故障与恢复[消费端] kafka_2.13-2.6.0
: 有三个broker[a,b,c] 创建topic:notice 分配了三个 partition[1,2,3] ,且副本数量为3,创建mygroup分组消费者为3个:consumer1,consumer2,consumer3
? 如何消费
写[控制台/脚本]kafka-console-producer.bat --bootstrap-server 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094 --topic notice --property parse.key=true
key | msg |
---|---|
1 | a1 |
2 | b1 |
4 | c1 |
读[控制台/脚本]kafka-console-consumer.bat --bootstrap-server 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094 --topic notice --group mygrop
三个消费者分别消费不同的 partition
消费者 | msg |
---|---|
consumer1 | b1 |
consumer2 | a1 |
consumer3 | c1 |
? 如果consumer1挂了,如何消费
写[控制台/脚本]
key | msg |
---|---|
1 | a2 |
2 | b2 |
4 | c2 |
读[控制台/脚本]
有两个 partition1 和 partition2 分配到了 consumer2 中,此时 consumer2 消费两条数据,注意 consumer2 会先消费完 partition1 再去消费 partition2
并不会去轮询消费partition 中的数据,这种情况下可能会造成乱序
消费者 | msg |
---|---|
consumer2 | a2 |
consumer2 | c2 |
consumer3 | b2 |
? 如果consumer1恢复了,如何消费
写[控制台/脚本]
key | msg |
---|---|
1 | a3 |
2 | b3 |
4 | c3 |
读[控制台/脚本]
此时三个消费端分别消费一个partition 中的数据。但相较与第一次,消费端消费的key 变了:最初key=2 的消息会被consumer1 消费,现在 key=2 被 consumer3 消费
消费者 | msg |
---|---|
consumer1 | c3 |
consumer2 | a3 |
consumer3 | b3 |
? 如果consumer1,consumer2挂了,如何消费
写[控制台/脚本]
key | msg |
---|---|
1 | a4 |
2 | b4 |
4 | c4 |
读[控制台/脚本]
三个partition 中的数据都被 consumer3 消费了
消费者 | msg |
---|---|
consumer3 | a4 |
consumer3 | b4 |
consumer3 | c4 |
? 如果consumer1,consumer2恢复,如何消费
写[控制台/脚本]
key | msg |
---|---|
1 | a5 |
2 | b5 |
4 | c5 |
读[控制台/脚本]
此时三个消费端分别消费一个partition 中的数据。但相较与第一次,消费端消费的key 变了
消费者 | msg |
---|---|
consumer1 | a5 |
consumer2 | c5 |
consumer3 | b5 |
最后看下kafka 三个partition 中的数据
Partition | msg list |
---|---|
Partition 0 | a1,a2,a3,a4,a5 |
Partition 1 | c1,c2,c3,c4,c5 |
Partition 2 | b1,b2,b3,b4,b5 |
结论: 看到生产者向 partition 中放入的数据一直没变, 变的是消费端它们自己完成对partition 的分配
来源:oschina
链接:https://my.oschina.net/u/2552286/blog/4792225