文章目录
kafka 消费者分区分配策略
- kafka 消费者分区分配策略
- 范围分配 RangeAssignor
- 数据演示
- 部分源码分析
- 轮询分配RoundRobinAssignor
- 数据演示
- 部分源码分析
- 粘性分配法 StickyAssignor
- 数据演示
- 分配主流程
- 部分源码分析
Note:采用kafka1.1版本源码进行分析
在消费者客户端中有一个参数配置partition.assignment.strategy
,是用来配置消费者Client和Topic的分区分配策略,就是指消费者客户端消费订阅的topic的哪些分区,默认值是org.apache.kafka.clients.consumer.RangeAssignor
,这是一个默认的分区分配策略。
通过这个类的继承关系,可以发现其父类是一个实现了PartitionAssignor
接口的抽象类AbstractPartitionAssignor
。这个抽象类目前在1.1版本中一共有3个子类。
-
RangeAssignor
范围分配器
-
RoundRobinAssignor
轮询分配器
-
StickyAssignor
粘性分配器
以上分配器都重写在类AbstractPartitionAssignor中的抽象方法assign,这个方法是分配器具体的分配实现方法。
public abstract Map assign(Map partitionsPerTopic,
Map subscriptions);
- 入参
-
Map partitionsPerTopic
key:topic
Value:分区数量(大于0)
-
Map subscriptions
key:numberid 消费者组协调器为消费者分配的组成员id,其值是Client与UUID的组合
val memberId = clientId + "-" + UUID.randomUUID().toString
value;Subscription 消费者订阅了哪些topic和自定义数据
- 结果
-
Map assignment
key:numberid,消费者的组成员id
Value:List,topic分区对象的列表
/**
* 构建出Topic分区对象列表
*
* @param topic Topic名称
* @param numPartitions 分区数量
* @return List
*/
protected static List partitions(String topic, int numPartitions) {
List partitions = new ArrayList(numPartitions);
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?