2016-10-11 5 views
8

하나의 주제에서 레코드를 읽고 처리하고 다른 주제로 레코드를 출력하는 기본 Kafka 스트리밍 코드가 있습니다.카프카 스트리밍 동시성?

카프카 스트리밍이 동시성을 어떻게 처리합니까? 모든 것이 단일 스레드에서 실행됩니까? 설명서에 언급 된 내용이 보이지 않습니다.

단일 스레드 인 경우 많은 양의 데이터를 처리하기 위해 다중 스레드 처리 옵션을 원합니다.

멀티 스레드 인 경우 SQL 데이터베이스 연결을 다른 처리 스레드에서 공유해야하는 것처럼이 방법과 리소스 처리 방법을 이해해야합니다.

다른 옵션 (Spark, Akka, Samza, Storm 등)과 비교하여 대용량 시나리오에는 Kafka의 기본 제공 스트리밍 API가 권장되지 않습니까?

답변

13

어떻게 카프카 스트리밍이 동시성을 처리합니까? 모든 것이 단일 스레드에서 실행됩니까? 설명서에 언급 된 내용이 보이지 않습니다.

자세한 내용은 http://docs.confluent.io/current/streams/architecture.html#parallelism-model에 설명되어 있습니다. 여기에 그대로 붙여 넣기는하고 싶지 않지만이 IMHO를 이해하기 위해 중요한 요소는 파티션입니다 (cf. Kafka의 주제 파티션, Kafka Streams는 "스트림 파티션"으로 일반화되어 있습니다 참조). 현재 파티션이 Kafka (브로커/서버 측)와 Kafka Streams API (클라이언트 측)를 사용하는 스트림 처리 응용 프로그램의 병렬 처리를 결정하기 때문에 처리중인 모든 데이터 스트림이 Kafka를 거치지는 않습니다.

단일 스레드 인 경우 많은 양의 데이터를 처리하는 멀티 스레드 처리 옵션을 원합니다.

처리 파티션는 항상 동시성 문제로 실행하지 않는 보장 단 하나의 "스레드"에 의해 수행됩니다. 하지만 ...

만약 이것이 멀티 스레드라면, SQL 데이터베이스 연결이 다른 처리 스레드에서 공유되어야하는 것처럼이 기능과 리소스 처리 방법을 이해해야합니다.

... Kafka는 주제가 많은 파티션을 가질 수 있기 때문에 병렬 처리가 가능합니다. 예를 들어 항목에 100 개의 파티션이있는 경우 최대 100 개의 스트림 작업 (또는 응용 프로그램의 인스턴스를 실행하는 최대 100 개의 서로 다른 컴퓨터)이 해당 항목을 병렬로 처리 할 수 ​​있습니다. 다시 한번, 모든 스트림 작업은 하나의 파티션에 대한 독점적 인 액세스 권한을 얻습니다.

다른 옵션 (Spark, Akka, Samza, Storm 등)과 비교하여 대용량 시나리오에는 Kafka의 기본 제공 스트리밍 API가 권장되지 않습니까?

카프카의 스트림 처리 엔진은 확실히 권장되며 대용량 시나리오에서는 실제로 실제로 사용됩니다. 비교 벤치마킹 작업은 아직 완료되었지만 대부분의 경우 Kafka Streams 기반 응용 프로그램이 더 빨라졌습니다. 아시아 최대 규모의 소셜 플랫폼 중 하나 인 LINE Corp (220M + 사용자)의 기사에 대해서는 LINE engineer's blog: Applying Kafka Streams for internal message delivery pipeline을 참조하십시오. 여기서는 Kafka 및 Kafka Streams API를 프로덕션 환경에서 초당 수백만 개의 이벤트를 처리하는 방법을 설명합니다.

+1

LINE 엔지니어의 블로그 링크가 잠시 중단되었습니다. 여기에서 찾으실 수 있습니다 : https://engineering.linecorp.com/en/blog/detail/80 – Esk

+0

감사합니다. –

+0

@ MichaelG.Noll 스트림 응용 프로그램의 단일 인스턴스에서 여러 스레드간에 자원을 공유하는 방법은 무엇입니까? 내 ValueMapper가 스레드로부터 안전하지 않은 경우 여러 스레드로 앱 인스턴스를 실행해도 괜찮습니까? – mrnakumar

4

kstreams 설정 num.stream.threads을 사용하면 1에서 스레드 수를 무시할 수 있습니다. 그러나 스트리밍 앱의 여러 인스턴스를 실행하고 모든 사용자가 동일한 소비자 그룹을 실행하는 것이 좋습니다 . 그렇게하면 최적의 파티셔닝을 얻는 데 필요한만큼의 인스턴스를 생성 할 수 있습니다.

관련 문제