1

저는 아파치 카프카에서 시작하여 실제로 어떻게 사용할지 내 시스템을 어떻게 설계 할 수 있는지 알아 내려고합니다.아파치 카프카 메시지 발송 및 균형로드

저는 데이터를 처리하는 시스템을 구축하고 있습니다. 실제로 데이터의 청크는 처리해야 할 작업 (객체)입니다. 객체는 처리 방법을 알고 있으므로 문제가되지 않습니다.

내 시스템은 실제로 게시자 (작업 시작 코드), 전송 - 실제로 카프카 및 소비자 세트 - 실제로 대기열에서 데이터를 가져 와서 어떻게 든 처리하는 노동자입니다. 두 가지 계산이 필요하다면 소비자가 게시자가 될 수 있습니다 (소비자가 작업을 만들어 전송하기 만하면됩니다)

그래서 우리는 3 개의 서버가 있다고 생각할 수 있습니다. 루트 퍼블리셔 (카프카 서버도 거기에서 운영되고 있음)와 실제로 작업을 처리하는 2 개의 소비자 서버. 데이터 워크 플로는 다음과 같습니다. 게시자가 작업을 만들어 transposrt에 저장합니다. 소비자 중 한 명이이 작업을 대기열에서 가져 와서 처리합니다. 그리고 각 소비자가 다른 사람들과 동일한 양의 작업을 처리하면 (즉, 작업 부하가 소비자간에 균등하게 분산되는 경우) 좋을 것입니다.

이 경우 어떤 kafka 구성 패턴을 사용해야합니까? kafka는 메시지 밸런싱 기능을 가지고 있습니까? 아니면 2 개의 파티션을 생성해야하며 각 소비자는 단일 파티션에만 바인드되며이 파티션에서만 데이터를 소비 할 수 있습니까?

답변

1

카프카 파티션 수는 대략 시스템의 병렬 처리로 해석됩니다.

일반 팁은 주제 당 더 많은 파티션을 생성하며 (예 : 10) 소비자를 생성하는 동안 파티션 수에 해당하는 소비자 스레드 수를 지정합니다.

소비자를 만드는 동안 에서 항목 당 생성 할 스트림 (스레드) 수를 제공 할 수 있습니다. 10 개의 파티션을 만들고 하나의 컴퓨터에서 소비자 프로세스를 실행한다고 가정하면 topicCount를 10으로 지정할 수 있습니다. 2 서버에서 소비자 프로세스를 실행하는 경우 topicCount를 5로 지정할 수 있습니다.

link을 참조하십시오.

The createMessageStreams call registers the consumer for the topic, which results in rebalancing the consumer/broker assignment. The API encourages creating many topic streams in a single call in order to minimize this rebalancing.

또한 동적 카프카/bin에 kafka-add-partitions.sh 명령을 사용하여 파티션의 수를 증가 할 수 있습니다. 당신이 당신의 메시지 개체 내에서 어떤 임의의 키에 따라 KeyedMessage 클래스를 사용해야합니다 생산하는 동안 메시지가 고르게 다른 파티션에 분산되도록 파티션을 증가 후에는

또한 증가 topicCount와 소비자 프로세스를 다시 시작할 수 있습니다

+0

topicCount를 정의합니까? – gillyb

+0

createMessageStreams 메소드에서 topic -> topicCount를 Map으로 지정하십시오. 예 :지도 (topic1 -> 10). http://kafka.apache.org/documentation.html#highlevelconsumerapi 링크를 참조하십시오. –

관련 문제