實驗一:開多個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,纔可以不再重複消費。