Kafka消费者组和Rebalance

消费者组

Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制

特性:

1.一个组下可以包含多个消费者实例。可以是消费者进程,也可以是消费者线程。

2.GroupID是个字符串,标识唯一的group。

3.Topic下的分区只能被某个Group的一个Consumer消费。一个Consumer可以消费多个分区,即分区和消费者是多对一的关系。所以Kafka可以实现消息队列(一个消费者属于单个Group),也可以实现发布/订阅模型(一个消费者属于多个Group)。

group中的offset
老版本中保存在Zookeeper中,新版本保存在Broker节点Topic中。

Rebalance

Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 Consumer 如何达成一致,来分配订阅 Topic 的每个分区。

触发条件:

1.Group下的consumer成员变更

2.Topic变更

3.Topic分区变更

影响:

Stop The World.即在Rebalance时kafka会停止所有的服务,因为当前版本的Kafka触发Rebalance时候会重新分配所有的Consumer对应的分区,并不是像一致性哈希(一致性Hash算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。)那样尽量保证其他节点不影响。所以要尽量避免发生Rebalance的发生。