Kafka Rebalance详解

浩客2年前技术文章1469

1.rebalance概览

rebalance中文含义为再平衡。它本质上是一组协议,它规定了一个 consumer group 是如何达成一致来分配订阅 topic 的所有分区的。比方说Consumer Group A 有3个consumer 实例,它要消费一个拥有6个分区的topic,每个consumer消费2个分区,这就是rebalance。

rebalance是相对于consumer group 而言,每个consumer group会从kafka broker中选出一个作为组协调者(group coordinator)。coordinator负责对整个consumer group的状态进行管理,当有触发rebalance的条件发生时,促使生成新的分区分配方案。


2.rebalance触发条件

rebalance触发的条件有三个:

  • consumer group成员发生变更,比方说有新的consumer实例加入,或者有consumer实例离开组,或者有consumer实例发生奔溃。

  • consumer group订阅的topic数发生变更,这种情况主要发生在基于正则表达式订阅topic情况,当有新匹配的topic创建时则会触发rebalance。

  • consumer group 订阅的topic分区数发生变更。

其实无论哪种触发条件,我们可以发现根本原因还是因为topic 中partition或者consumer实例发生了变更。


3.rebalance分区分配策略

分区分配策略决定了将topic中partition分配给consumer group中consumer实例的方式。

可以通过消费者客户端参数partition.assignment.strategy来设置消费者与主题之间的分区分配策略

kafka新版本提供了三种rebalance分区分配策略:

  • range

  • round-robin

  • sticky

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

假设 n = 分区数/消费者数量,m= 分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。

round-robin分配策略是将消费者组内所有主题的分区按照字典序排序,然后通过轮询的方式逐个将分区一次分配给每个消费者。

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

(1)分区的分配要尽可能均匀。

(2)分区的分配尽可能与上次分配的保持相同。

当两者发生冲突时,第一个目标优于第二个目标。sticky具体实现要比上面两种要复杂的多。



相关文章

MySQL 初始化推荐关注的参数

MySQL 初始化推荐关注的参数

前言新部署的 MySQL 实例如何配置?本 SOP 将提供一些 MySQL 关键参数及设置方法。必须设置的参数1. innodb_buffer_pool_size对于 innodb 表引擎来说,用户数...

MS SQL Server 实战 统计与汇总重复记录

MS SQL Server 实战 统计与汇总重复记录

需求在日常的数据管理应用中,统计和汇总重复记录的情况是经常遇到的一个问题,然后我们会根据统计结果进一步对数据进行合理化处理。比如我们有一组题库数据,主要包括题目和选项字段(如单选题目、多选题目和判断题...

MySQL日期相关函数

一、当前时间--当前时间select current_timestamp();--当前时间 等价于 select current_timestamp();select now();--基本等价于以上两...

AD域主备部署

AD域主备部署

总览在本篇文章中, 我将记录部署多 DC 实现高可用方案的详细步骤, 期间我会尽量使用 PowerShell 来实现相应的动作, 实在找不到命令或者 GUI 更方便的再附截图. 主要步骤分为:部署 2...

MongoDB的索引(三)

七、Compound Indexes{  "item": "Banana",  "category": ["food", "produce", "grocery"],  "location": ...

hive元数据迁移

hive元数据迁移

一、在新集群中创建hive数据库,作为新集群中的元数据库。注意点:创建hive数据库时注意用户和用户的权限及使用的编码格式一致。查看旧集群中角色权限和编码格式,在新的hive元数据库中设置相同的角色权...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。