2017-04-07 44 views
0

我有兩個消費者,使用不同的客戶端ID和組ID。除保留小時和最大分區外,我的Kafka安裝還包含默認配置。我環顧四周,看看其他人是否有同樣的問題,但不能得出任何結果。兩個卡夫卡消費者彼此造成奇怪的行爲

所以場景是這樣的:

消費者: 連接到卡夫卡,消耗了需要消耗約3萬條信息,然後坐在空閒等待更多的消息。

消費者B: 不同的客戶端/組ID會連接到相同的Kafka主題,這會導致消費者A重複使用300萬條消息,同時消費者B也會消耗它們。

這兩個消費者是兩個完全不同的Java應用程序,不同的客戶端和組ID在同一臺計算機上運行。 Kafka服務器在另一臺計算機上。

這是卡夫卡的正常行爲嗎?我完全喪失了。

這裏是我的消費者的配置:

bootstrap.servers=192.168.110.109:9092 
acks=all 
max.block.ms=2000 
retries=0 
batch.size=16384 
auto.commit.interval.ms=1000 
linger.ms=0 
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer 
value.deserializer=org.apache.kafka.common.serialization.StringDeserializer 
block.on.buffer.full=true 
enable.auto.commit=false 
auto.offset.reset=none 
session.timeout.ms=30000 
zookeeper.session.timeout=100000 
rebalance.backoff.ms=8000 

group.id=consumerGroupA 
zookeeper.connect=192.168.110.109:2181 
poll.interval=100 

而在我的消費者B中的明顯不同的是group.id=consumerGroupB

+0

嘗試:auto.offset.reset:最早的 – ImbaBalboa

+0

@ImbaBalboa這是我第一次沒有運氣的嘗試。 – user0000001

+0

這聽起來很奇怪,不應該發生 - 如果兩個消費者使用不同的group.id,他們不應該互相干擾。消費者和/或經紀人記錄有什麼可疑的嗎? –

回答

2

這是一個正確的行爲。因爲根據您的配置,您的消費者不會提交他們已閱讀的記錄的偏移量!

當消費者閱讀記錄時,必須提交閱讀記錄,您可以確保消費者通過設置enable.auto.commit=true或手動提交每條記錄來自動提交補償。在這種情況下,我認爲自動提交對你來說很好。

+0

謝謝您的回覆。明天早上我會嘗試這個第一件事。 – user0000001