Kafka中的分区分配
所属分类 kafka
浏览量 1122
发送端 消费端 broker
发送端分区分配
分区器(Partitioner)
如果ProducerRecord中指定了partition字段,那就不需要分区器
默认分区器
org.apache.kafka.clients.producer.internals.DefaultPartitioner
The default partitioning strategy:
If a partition is specified in the record, use it
If no partition is specified but a key is present choose a partition based on a hash of the key
If no partition or key is present choose a partition in a round-robin fashion
partition 指定了直接使用
key 不为null hash策略 Murmur2Hash
key 为null 轮询策略
broker
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 2 --replication-factor 1
创建 topic , 分区副本分配方案
如果使用 replica-assignment参数,按照指定的方案进行分区副本的创建
未指定机架信息和指定机架信息策略
未指定机架信息策略
没有配置broker.rack参数,或者使用disable-rack-aware参数来创建主题 ,
副本因子不能大于 Broker 个数
第一个分区(编号为0)的第一个副本(编号为0)放置位置是从 brokerList 随机选取
其他分区的第一个副本放置位置相对于第0个分区依次往后移
kafka.admin.AdminUtils.assignReplicasToBrokers
消费端
每一个分区只能被同一个消费组中的一个消费者消费
三种策略
RangeAssignor RoundRobinAssignor StickyAssignor
默认 RangeAssignor
对于每个主题,以数字顺序排列可用分区,以字典顺序排列消费者。
将分区数量除以消费者总数, 整除则平均分配 ,否则排在前面的消费者分配一个额外的分区
StickyAssignor
尽量保证均衡
尽量保证当前未宕机的consumer所消费的分区不会被分配给其他的consumer
上一篇
下一篇
Kafka 和 RocketMQ 底层存储简单比较
kafka发送端核心参数说明
kafka消息发送机制
linux OOM Killer 如何破
Kafka幂等和事务
kafka面试题及答案