前言:
当前大家对“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一个生产者多个消费者