2017-03-03 67 views
1

我已經建立了機器上的卡夫卡集羣,並與卡夫卡控制檯producer.bat和卡夫卡控制檯producer.bat測試卡夫卡不檢索被髮送消息時它處於脫機狀態

我開始飼養員, kafka-server,並使用kakfa-console-producer生成一些測試消息,然後是kakfa-console-consumer,不會打印任何消息。但是,如果我啓動zookeeper,kakfa-server,kakfa-console-consumer和最後一個kakfa-console-producer並生成測試消息,則會在kakfa-console-consumer上打印這些消息。

爲什麼卡夫卡無法在離線時收取郵件?我只使用1個經紀人。

回答

2

卡夫卡有一個叫做消費羣體的概念,當每個消費者連接到一個經紀人時,它就會加入一個消費羣體。對於每個消費者羣體,Kafka都會跟蹤最後讀到的消息偏移量。如果一個消費羣體是未知的經紀人,消費者參數調用auto.offset.reset影響會發生什麼:

  • 最早:開始從主題開始閱讀信息
  • 最新:開始閱讀該專題目前結束(所以任何消息產生的消費者開始後)

默認此參數是最新以來控制檯消費者隨機化的消費羣,這是你的情況下會發生什麼以及爲什麼你沒有看到消費者啓動之前產生的任何消息。 您可以將參數 - from-beginning添加到您的控制檯消費者命令中,該命令用於控制此工具的此行爲。那麼你應該看到所有的消息。

更新: 如果你想確保你拿起你的消費者留下的,則需要手動設置一個消費羣體,並保持此相同每次你打電話給你的消費時間。 您可以通過使用此參數創建一個文本文件並將其傳遞給控制檯使用者來完成此操作。

echo "group.id=test" > consumer.config 
./kafka-console-consumer --topic test --new-consumer --bootstrap-server 127.0.0.1:9092 --consumer.config consumer.config 
+0

我不想被消耗,再重新處理的消息。我正在查看消費者離線時發送的消息。 – youcanlearnanything

+0

我已經更新了我的回覆以添加該部分。 –

+0

卡夫卡默認保留24小時的偏移量。代理配置'offsets.retention.minutes'控制偏移保留期。如果消費者脫機並且沒有在該期間提交任何新的抵消,那麼Kafka可能會刪除該消費羣組的抵消額。 –