2014-07-09 1 views
4

Kafka 0.8.1 및 Kafka python-0.9.0을 사용하고 있습니다. 제 설정에서 카프카 브로커를 2 대 설치했습니다. 카프카 소비자를 실행할 때 대기열에서 메시지를 검색하고 두 브로커 모두에 대한 오프셋을 추적하는 것을 볼 수 있습니다. 모든 것이 훌륭하게 작동합니다!Kafka (python) 사용자를 다시 시작하면 대기열에있는 모든 메시지가 다시 사용됩니다.

제 문제는 소비자를 다시 시작할 때 처음부터 메시지를 소비하기 시작한다는 것입니다. 내가 예상했던 것은 재시동 할 때 소비자가 죽기 전에 중단 한 곳에서 메시지를 소비하기 시작한다는 것입니다.

Redis에서 메시지 오프셋을 추적 한 다음 큐에서 메시지를 읽기 전에 consumer.seek를 호출하여 이전에 보지 못했던 메시지 만 수신하도록했습니다. 이 솔루션을 배포하기 전에이 방법이 효과가 있었지만, 저는 모두에게 확인하고 싶었습니다 ... 아마도 카프카 (Kafka) 또는 파이썬 - 카프카 (Kafka) 클라이언트에 대한 오해가 있습니다. 소비자가 읽은 곳을 다시 시작할 수있는 것처럼 보이는 것은 꽤 기본적인 기능입니다.

감사합니다.

답변

0

카프카 소비자 is able to store offsets in Zookeeper. Java API에서 우리는 two options - 높은 수준의 소비자로서 우리를 위해 상태를 관리하고 다시 시작한 후 소비 한 곳에서 시작하며이 초강력이없는 상태 비 상태의 저급 소비자입니다. 나는 파이썬의 소비자 코드 (https://github.com/mumrah/kafka-python/blob/master/kafka/consumer.py)에서 이해하는 바로는

, 모두 SimpleConsumerMultiProcessConsumer은 상태이며, 당신이 reconsuming 문제를 가지고 이상하다, 그래서 사육사의 현재 오프셋을 추적.

auto_commit: default True. Whether or not to auto commit the offsets 
auto_commit_every_n: default 100. How many messages to consume 
        before a commit 
auto_commit_every_t: default 5000. How much time (in milliseconds) to 
        wait before commit 

있을 수 있습니다 당신이 < 100 메시지 나 <를 소비 :

당신이 다시 시작에서 동일한 소비자 그룹 ID를 가지고 있는지 확인은 다음과 같은 옵션을 (? 당신은 임의 설정 가능) 및 확인 5000ms?

2

kafka-python은 별도의 사육사 연결이 아닌 kafka 서버와 오프셋을 저장합니다. 불행히도 커밋/페칭 오프셋을 지원하는 kafka 서버 API는 apache kafka 0.8.1.1까지 완전히 기능하지 못했습니다. 카프카 서버를 업그레이드하면 설치가 잘됩니다. 또한 kafka-python을 0.9.4로 업그레이드 할 것을 제안합니다.

[kafka-python 메인테이너]

4

kafka-python 라이브러리에주의하십시오. 사소한 문제가 있습니다.

속도가 실제로 소비자에게 문제가되지 않으면 모든 메시지에서 자동 커밋을 설정할 수 있습니다. 작동해야합니다.

SimpleConsumer는 원하는 모든 지점에서 메시지를 소비 할 수있는 seek 방법 (https://github.com/mumrah/kafka-python/blob/master/kafka/consumer/simple.py#L174-L185)을 제공합니다.

가장 일반적인 통화는 다음과 같습니다

  • consumer.seek(0, 0)는 큐의 처음부터 읽기 시작합니다.
  • consumer.seek(0, 1) 현재 오프셋에서 읽기를 시작합니다.
  • consumer.seek(0, 2)을 사용하면 보류중인 모든 메시지를 건너 뛰고 새 메시지 만 읽기 시작할 수 있습니다.

첫 번째 인수는 해당 위치에 대한 오프셋입니다. 그런 식으로 consumer.seek(5, 0)으로 전화하면 대기열에서 처음 5 개의 메시지를 건너 뜁니다.

또한 오프셋은 소비자 그룹에 저장된다는 점도 잊지 마십시오. 항상 같은 것을 사용하고 있는지 확인하십시오.

관련 문제