2013-07-31 1 views
5

저는 카프카를 처음 접했고 소비자에 관해서는 기본적으로 두 가지 유형의 구현이 있다는 것을 이해했습니다.
1) The High level consumer/consumer group
2) Simple ConsumerApache Kafka 소비자 그룹 및 단순한 소비자

높은 수준의 추상화에 대한 가장 중요한 부분은 카프카가 처리하는 것에주의하지 않는 때 사용되는 단순 소비자가 오프셋 관리를 통해 더 나은 제어를 제공하면서 오프셋. 소비자 그룹을 사용한다면 사육사에 저장된 마지막 오프셋을 읽어야한다는 의미입니까? 그렇다면 혼란 스럽습니다. 다중 스레드 환경에서 소비자를 운영하고 오프셋에 대한 통제권을 갖고 싶습니다. 그것이 내가 가진 유일한 선택입니다.

답변

6

고급 소비자 API는 대부분 오프셋을 직접 제어 할 수 없습니다.

소비자 그룹을 처음 만들면 auto.offset.reset 속성을 사용하여 kafka가 저장 한 가장 오래된 메시지 또는 최신 메시지로 시작할지 여부를 알 수 있습니다.

auto.commit.enable을 false로 설정하여 높은 수준의 소비자가 사육사에게 새로운 오프셋을 커밋하는시기를 제어 할 수도 있습니다.

상위 수준 소비자가 사육사에 오프셋을 저장하기 때문에 앱이 사육사에게 직접 액세스하여 오프셋을 조작 할 수 있지만 상위 소비자 API 외부에있을 수 있습니다.

귀하의 질문에 다소 혼란 스러웠지만, 단순한 소비자를 멀티 스레드 환경에서 사용할 수 있습니다. 저것은 고급 소비자가하는 무슨이다.

0

아파치 카프카 0.9와 0.10에서 소비자 그룹 관리는 브로커 (조정을 위해)와 주제 (상태 저장을 위해)에 의해 카프카 애플리케이션 내에서 완전히 처리된다.

소비자 그룹이 처음으로 소비자가 특정 소비자가 주제/파티션을 할당 할 때 알림을받을 ConsumerRebalanceListener을 등록 할 수 있습니다 메시지 (http://kafka.apache.org/documentation.html#newconsumerconfigs)

을 소비하기 시작 어디 auto.offset.reset의 설정을 결정하는 주제에 가입

.

소비자가 실행되면 seek, seekToBeginningseekToEnd을 사용하여 특정 오프셋에서 메시지를 가져올 수 있습니다. seek는 소비자 poll 다음 영향을 주며,

소비자의 javadoc는 더 구체적인 상황을 언급 (활성화 된 경우 auto.commit.interval이 경과 할 때 예를 들어 commitSync, commitAsync 또는.) 다음 커밋에 저장됩니다 http://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

일단 카파가 제공하는 그룹 관리를 파티션이 할당되면 찾기 (..)를 통해 오프셋의 수동 관리와 결합 할 수 있습니다.