【Kafka】分区分配策略

167 阅读1分钟

image.png

1. RangeAssignor

目的:保证分区尽可能均匀地分配给所有消费者。

原理:按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将消费组内所有订阅这个主题的消费者按照名称的字典序排序,最后为每个消费者划分固定的分区范围。

(如果不够平均分配,则字典序靠前的消费者会被多分配一个分区。) image.png 极端情况:部分消费者过载

2. RoundRobinAssignor

原理:将消费组内所有消费者及消费者订阅的所有主题的分区按照字典序排序,然后通过轮询方式逐个将分区依次分配给每个消费者。 image.png

3. StickyAssignor

目的:保证分配最大程度地平衡,同时尽可能与上次分配保持相同

优点:使分区重分配具备“黏性”减少不必要的分区移动。

例3 image.png

4. CooperativeStickyAssignor

原理:与 StickyAssignor 逻辑相同,同时允许重新平衡

5. 自定义分区分配策略

实现 PartitionAssignor,实现自定义分配。