小玩kafka之消息重複消費的實驗

實驗一:開多個consumer終端,是同一個consumer group嗎?

./bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

 

開2個終端,顯示消費了同樣的信息,說明2個consumer屬於不同的consumer group

輸入group list驗證下,存在多個group,每個終端屬於不同的group。

--> ./bin/windows/kafka-consumer-groups.bat --list --bootstrap-server localhost:9092
console-consumer-25516
test-consumer-group
console-consumer-89825

如下帶上 --group 參數,即指定了2個consumer屬於同一group,屬於同一group後會發生什麼?

$ ./bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning --group test-consumer-group

這一次,只有一個終端在消費消息。

如果關掉了正在消費信息的consumer(相當於此consumer發生了宕機),另一個consumer纔開始消費消息

結論:kafka中消息只能被同一consumer-group中的一個consumer消費。

實驗二:如何重現重複消費

重複消費,很多時候是和 enable.auto.commit 這個參數相關的

消費消息後,默認會自動提交,這裏在consumer.properties文件的末尾,添加2個參數,

max.poll.interval.ms=100000
enable.auto.commit=false

打開2個consumer終端,第1個終端消費完成後,shutdown,第2個終端居然又消費了一次,造成了重複消費。

--> cd config

--> ../bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config consumer.properties

此時,需要手動commit,纔可以不再重複消費。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章