参考文章:https://www.cnblogs.com/gxyandwmm/p/11442328.html

一个partition只能被同组的一个consumer消费,同组的consumer则起到均衡效果。

1. 消费者多于partition

1> 创建一个名称为test的topic, 该topic只有一个partition:

[root@bigdata02 ~]# bin/kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 1 --partitions 1 --topic test

2> 在g2组中启动两个consumer

1. [root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties2. [root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties

3> 消费者数量为2大于partition数量1,此时partition和消费者进程对应关系如下:

[root@bigdata02 ~]# bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092
--describe --group g2TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test 0 9 9 0 consumer-1-4a2a4aa8-32f4-4904-9c16-1c0bdf7128a2 /127.0.0.1 consumer-1
- - - - - consumer-1-fd7b120f-fd21-4e07-8c23-87b71c1ee8a5 /127.0.0.1 consumer-1

消费者consumer-1-fd7b120f-fd21-4e07-8c23-87b71c1ee8a5无对应的partition。
用图表示为

如上图,向test发送消息:1,2, 3,4,5,6,7,8,9只有C1能接收到消息,C2则不能接收到消息,

结论:
即同一个partition内的消息只能被同一个组中的一个consumer消费,当消费者数量多于partition的数量时,多余的消费者空闲。
也就是说如果只有一个partition你在同一组启动多少个consumer都没用,partition的数量决定了此topic在同一组中被可被均衡的程度,例如partition=4,则可在同一组中被最多4个consumer均衡消费。

2. 消费者少于和等于partition

1> topic:test2包含3个partition

[root@bigdata02 ~]# bin/kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 1 --partitions 3 --topic test2

2> 开始时,在g3组中启动2个consumer

1.[root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties2.[root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties

则对应关系如下:

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 1 7 7 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 2 8 8 0 consumer-1-f362847d-1094-4895-ad8b-1e1f1c88936c /127.0.0.1 consumer-1

其中,consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c对应了2个partition
用图表示为:

消费者数量2小于partition的数量3,此时,向test2发送消息1,2,3,4,5,6,7,8,9
C1接收到1,3,4,6,7,9
C2接收到2,5,8
此时P1、P2对对应C1,即多个partition对应一个消费者,C1接收到消息量是C2的两倍

3> 在g3组中再启动一个消费者,使得消费者数量为3等于topic2中partition的数量

[root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092
--topic test2 --from-beginning --consumer.config config/consumer_g3.properties

对应关系如下:

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1
test2 1 7 7 0 consumer-1-ab472ed5-de11-4e56-863a-67bf3a3cc36a /127.0.0.1 consumer-1
test2 2 8 8 0 consumer-1-f362847d-1094-4895-ad8b-1e1f1c88936c /127.0.0.1 consumer-1

此时,partition和消费者是一对一关系,向test2发送消息1,2,3,4,5,6,7,8,9
C1接收到了:2,5,8
C2接收到了:3,6,9
C3接收到了:1,4,7
C1,C2,C3均分了test2的所有消息,即消息在同一个组之间的消费者之间均分了!

3.多个消费者组

1> 启动g4组,仅包含一个消费者C1,消费topic2的消息,此时消费端有两个消费者组

[root@bigdata02 ~]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092
--topic test2 --from-beginning --consumer.config config/consumer_g4.properties
--delete-consumer-offsets

2> g4组的C1的对应了test2的所有partition:

[root@bigdata02 ~]# bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092
--describe --group g4TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test2 0 36 36 0 consumer-1-befc9234-260d-4ad3-b283-b67a2bf446ca /127.0.0.1 consumer-1
test2 1 35 35 0 consumer-1-befc9234-260d-4ad3-b283-b67a2bf446ca /127.0.0.1 consumer-1
test2 2 36 36 0 consumer-1-befc9234-260d-4ad3-b283-b67a2bf446ca /127.0.0.1 consumer-1

用图表示为

如上图,向test2发送消息1,2,3,4,5,6,7,8,9
消息被g3组的消费者均分,g4组的消费者在接收到了所有的消息。
g3组:
C1接收到了:2,5,8
C2接收到了:3,6,9
C3接收到了:1,4,7
g4组:
C1接收到了:1,2,3,4,5,6,7,8,9
启动多个组,则会使同一个消息被消费多次,即组与组之间的消息是否被消费是相互隔离互不影响的。

那么,在消息消费的过程中,如果有一个consumer宕机了kafka会如何应对呢? 

此处可参考:Kafka Consumer Group和Consumer Rebalance机制

kafka中consumer和partition的对应关系相关推荐

  1. Kafka中topic的Partition,Kafka为什么这么快,Consumer的负载均衡及consumerGroup的概念(来自学习笔记)

    1.1. Kafka中topic的Partition  在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic ...

  2. kafka中topic、partition、broker、consumerGroup、consumer之间的关系、区别及存在意义

    概念理解 topic: 逻辑概念,用于联系Producer 和 Consumer的message生产和消费.Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的 ...

  3. kafka中Topic、Partition、Groups、Brokers概念辨析

    kafka消息队列有两种消费模式,分别是点对点模式和订阅/发布模式.具体比较可以参考Kafka基础–消息队列与消费模式. 下图是一个点对点的Kafka结构示意图,其中有以下几个部分: producer ...

  4. kafka partition java,kafka中partition数量与消费者对应关系以及Java实践

    kafka中partition数量与消费者对应关系以及Java实践 kafka中partition数量与消费者对应关系以及Java实践 kafka是由Apache软件基金会开发的一个开源流处理平台.k ...

  5. 关于kafka中的timestamp与offset的对应关系

    关于kafka中的timestamp与offset的对应关系 @(KAFKA)[storm, kafka, 大数据] 关于kafka中的timestamp与offset的对应关系 获取单个分区的情况 ...

  6. kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?

    leader和follower 在Kafka中,每个topic都可以配置多个分区以及多个副本.每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的 ...

  7. 8.解析Kafka中的 Topic 和 Partition

    目录 1.什么是Topic 2.什么是Partition 3.Consumer Group 消费者组 4.Topic 和 Partition 的存储 5.producer消息分发策略 6.消费者如何消 ...

  8. 解析Kafka中的 Topic 和 Partition

    topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据 1.什么是Topic ...

  9. kafka中topic默认属性_kafka consumer 配置详解

    1.Consumer Group 与 topic 订阅 每个Consumer 进程都会划归到一个逻辑的Consumer Group中,逻辑的订阅者是Consumer Group.所以一条message ...

最新文章

  1. C#之 HashSet(临时笔记,未参考资料,请慎重)
  2. 发现一个有意思的博主(科研工作者)
  3. python批量命名变量_python变量命名的7条建议
  4. Windows下安装配置SBT
  5. 前些日子接了一单私单
  6. 系统集成项目管理工程师-项目采购管理笔记
  7. 对xml文件的sax解析(增删改查)之一
  8. linux 下安装JDK
  9. tpcc mysql优化_tpcc_mysql性能测试
  10. json在线解析工具大集合
  11. Oracle RMAN 维护(二)--恢复目录的维护
  12. iptables第二部分
  13. 10. zf workflow
  14. IIS网站设置禁止IP访问设置方法
  15. IMU、INS、DGPS和POS
  16. 讨教大学|FMEA成功实施的关键是什么?
  17. nmap 扫描主机端口(谨慎使用)
  18. 等差乘等比数列求和公式
  19. 亲密接触Redis-第一天
  20. 是时候重估“返利网”的市场价值了

热门文章

  1. 数据挖掘的过程是什么?通俗易懂
  2. java 算出下一个工作日_Java 计算一段时间段内除去周六日、节假日的工作日数———超详细(全)...
  3. ctf show-web入门 php特性篇部分题解
  4. 知名大数据厂商云宏加入龙蜥社区,共同打造信息安全坚实“地基”
  5. 使用Python获取微信朋友圈的内容
  6. 【PMAC学习笔记——第0篇】初识PMAC运动控制卡以及 Microsoft Visual C++ 2019,PeWin32 PRO2环境搭建
  7. 洛谷每日三题之第一天
  8. Telegram-“只能给双向联系人发送消息”的错误信息
  9. 最新苹果手机备份同步工具 iMazing2.16.4官方免费下载
  10. list列表 for循环