Skip to content

Latest commit

 

History

History
35 lines (23 loc) · 1.72 KB

消费组分区分配策略.md

File metadata and controls

35 lines (23 loc) · 1.72 KB

消费组分区分配策略

前言

Kafka提供了消费者客户端参数partition.assignment.strategy来设置消费者与订阅主题之间的分区分配策略。

默认值: org.apache.kafka.clients.consumer.RangeAssignor

此外还提供了另外两种分配策略:

  • RoundRobinAssignor
  • StickyAssignor

RangeAssignor分配策略

RangeAssignor 分配策略的原理是按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配,以保证分区尽可能均匀地分配给所有的消费者。

对于每一个主题,RangeAssignor策略会将消费组内所有订阅这个主题的消费者按照名称的字典序排序,然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区。

RoundRobinAssignor分配策略

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

RoundRobinAssignor分配策略对应的 partition.assignment.strategy 参数值为org.apache.kafka.clients.consumer.RoundRobinAssignor。

StickyAssignor分配策略

“sticky”这个单词可以翻译为“黏性的”

Kafka从0.11.x版本开始引入这种分配策略,它主要有两个目的:

  • (1)分区的分配要尽可能均匀。
  • (2)分区的分配尽可能与上次分配的保持相同。

自定义分配策略

Kafka还提供了一个抽象类,简化实现PartitionAssignor 接口的工作

org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor

总结

大部分情况下默认分配策略就可以了。