一个消费者组消费消息的offset只会存在__consumer_offsets
里的一个分区上面,所以如果副本只有一份,那就只会在特定的broker上
Topic:consumer_offsets PartitionCount:50 ReplicationFactor:1 Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
Topic: __consumer_offsets Partition: 0 Leader: 2 Replicas: 2 Isr: 2
Topic: __consumer_offsets Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: __consumer_offsets Partition: 2 Leader: 1 Replicas: 1 Isr: 1
Topic: __consumer_offsets Partition: 3 Leader: 2 Replicas: 2 Isr: 2
但是从这里可以看到,并没有所有partion都在一个broker上,三个broker都有offset的分区。所以你说 "当刚好是这个leader的broker挂掉时,即使其他broker竞选成功为leader,他那里也没有消费者的offsets信息" 似乎并不成立。
offsets.topic.replication.factor
为1的时候,不管__consumer_offsets
分区怎么分布,反正只要首个启动的broker存活,集群就能工作......
这个是因为消费者消费offsets topics的副本如果只存在leader里存了一份,当刚好是这个leader的broker挂掉时,即使其他broker竞选成功为leader,他那里也没有消费者的offsets信息。