龙空技术网

Kafka 分区与生产者、消费者的关系 「五分钟系列」

在键盘上跳舞 43

前言:

当前大家对“kafka一个生产者多个消费者”可能比较关怀,姐妹们都需要分析一些“kafka一个生产者多个消费者”的相关知识。那么小编在网上收集了一些关于“kafka一个生产者多个消费者””的相关内容,希望姐妹们能喜欢,我们快快来学习一下吧!

Kafka 分区与生产者、消费者的关系 [五分钟系列]

背景

我们知道 kafka 生产者发送消息到 topic ,消费者订阅 topic 消费消息。而 topic 下是分区,消息是存储在分区中,所以事实上生产者发送消息到分区,消费者则从分区读取消息,那么,这里问题来了,生产者发送消息到哪个分区?消费者消费哪个分区的消息?接下来,我用五分钟的时间给大家介绍一下。

生产者与分区

分区策略源码:

org.apache.kafka.clients.producer.internals.DefaultPartitioner

分区策略介绍:

如果记录中指定了分区,则直接使用该分区如果记录中未指定了分区,但存在 key ,则根据 key 的哈希值选择一个分区如果记录中未指定了分区,也不存在 key ,则用轮询的方式选择一个分区消费者与分区

分区策略有2个默认的实现:

range

range 分区策略源码:org.apache.kafka.clients.consumer.RangeAssignor

分区策略介绍:

1、range分配策略针对的是主题;

2、将分区按数字顺序排序,消费者按消费者名称的字典序排序;

3、用分区总数除以消费者总数。如果能够除尽,则平均分配;若除不尽,则位于排序前面的消费者将多负责一个分区。

roundrobin(轮询)

roundronbin 分区策略源码:org.apache.kafka.clients.consumer.RoundRobinAssignor

轮询分配策略是基于所有可用的消费者和所有可用的分区,与 range 分区策略最大的不同就是它不局限于某个主题。

假设有两个消费者C0和C1,两个主题t0和t1,每个主题有3个分区,分别是t0p0,t0p1,t0p2,t1p0,t1p1,t1p2

那么,最终分配的结果是这样的:

C0: [t0p0, t0p2, t1p1]

C1: [t0p1, t1p0, t1p2]

------ 五分钟系列文章

标签: #kafka一个生产者多个消费者