kafka分区分配策略

kafka的分区分配策略大概可以分为一下几步:
前置条件:
a.假设消费者组到对应的server的GroupCordinator是已知的,这个groupCordinator和消费组对应的_offset_消费主题所在的leader分区在同一个broker上面
b.对于每个消费者服务端都会给一个独一无二的标识:
client_id + uuid标识

1.每个消费者发送joingroup请求到groupCordinator中,这个请求中带着分区策略(比如rangeAssignator和stickyAssignator)
2.服务端的groupCordinator确定这个消费者组使用的分区策略,规则大致是多数原则,也就是得票最多的分区策略作为整个消费组的分区策略
3.服务器的groupCordinator还要确定一个消费者leader,消费者leader的确定非常简单,要么是第一个加入消费者组的消费者要么是随机一个消费者作为消费者leader
4.服务端的groupCordinator会把确定好的分区分配策略发送给所有的消费者,其中发给消费者leader的消息中会包含所有的消费者信息,这样leader消费者就使用这个分区分配策略的具体本地实现类实现具体分区分配逻辑
5.leader消费者把具体的每个消费者对应的消费分区的详细信息发送给groupCordinator,groupCordinator会把这个具体的分配信息同步给所有的消费者

总结:具体的分区分配策略是由消费者客户端实现的,如果要支持其他的比如自定义的分区分配策略,只需要客户端实现并重启消费者实例组即可,kafka服务器无需重启

你可能感兴趣的:(kafka,kafka)