Kafka consumer 端设计 cousumer group 状态机

consumer依赖broker端的组协调者coordinator来管理组内所有的sonsumer实例 并负责把分配方案下发到每个consumer上,分配方案是由组内的leader sonsumer来根据指定的分配策略来决定的。该分配策略必须是组内所有consumer都支持的。如果所有sonsumer在一起无法选择共同的策略 那么将抛出异常。这种设计确保了consumer group的一致性。同时可以保证每个consumer只能为它拥有的分区提交位移。

 

在sonsumer端实现的好处:

1。便于维护和升级。如果在broker端 那么分配从策略变动 需要重启kafka集群,生产环境重启服务区代价很高昂。

2。便于实现自定义策略,不同的策略有不同的逻辑实现。

3。解耦了组管理和分区分配,coordinator负责组管理,而consumer 程序负责分区分配

 

下图为kafka consumer group的五个状态转换以及生命周期

 

Kafka consumer 端设计 cousumer group 状态机