kafka消费者没有指定分区(kafka中partition和消费者对应关系)
kafka消费者没有指定分区(kafka中partition和消费者对应关系)
2024-06-30 04:10:35  作者:刺芯疚  网址:https://m.xinb2b.cn/tech/vzo357325.html

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

消费者多于partition

topic: test 只有一个partition

创建一个topic——test,

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

在g2组中启动两个consumer,

1. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties2. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config config/consumer_g2.properties

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

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g2TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-IDtest 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。

用图表示为

kafka消费者没有指定分区(kafka中partition和消费者对应关系)(1)

生产者消费者对应关系1.jpg

如上图,向test发送消息:1,2, 3,4,5,6,7,8,9

只有C1能接收到消息,C2则不能接收到消息,即同一个partition内的消息只能被同一个组中的一个consumer消费。当消费者数量多于partition的数量时,多余的消费者空闲。

也就是说如果只有一个partition你在同一组启动多少个consumer都没用,partition的数量决定了此topic在同一组中被可被均衡的程度,例如partition=4,则可在同一组中被最多4个consumer均衡消费。消费者少于和等于partition

topic:test2包含3个partition

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic test2

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

1.bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g3.properties2.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-IDtest2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1test2 1 7 7 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1test2 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

用图表示为:

kafka消费者没有指定分区(kafka中partition和消费者对应关系)(2)

生产者消费者对应关系2.jpg

消费者数量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的两倍

然后,在g3组中再启动一个消费者,使得消费者数量为3等于topic2中partition的数量3.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-IDtest2 0 8 8 0 consumer-1-8b872ef7-a2f0-4bd3-b2a8-7b26e4d8ab2c /127.0.0.1 consumer-1test2 1 7 7 0 consumer-1-ab472ed5-de11-4e56-863a-67bf3a3cc36a /127.0.0.1 consumer-1test2 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的所有消息,即消息在同一个组之间的消费者之间均分了!

多个消费者组

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

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test2 --from-beginning --consumer.config config/consumer_g4.properties --delete-consumer-offsets

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

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

用图表示为

kafka消费者没有指定分区(kafka中partition和消费者对应关系)(3)

生产者消费者对应关系3.jpg

如上图,向test2发送消息1,2,3,4,5,6,7,8,9

那么g3组各个消费者及g4组的消费者接收到的消息是怎样地呢?欢迎思考!!

答案:

消息被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

启动多个组,则会使同一个消息被消费多次。

  • 杨紫琼十部必看电影(这部影片全球票房超7800万美元)
  • 2024-07-01这部影片全球票房超7800万美元每经记者:朱鹏每经编辑:魏官红,何小桃,易启江若要票选近两月最具热度的电影,《瞬息全宇宙》一定榜上有名由独立电影公司A24制作、杨紫琼主演的《瞬息全宇宙》自3月底上映后便迅速冲至电影圈头排位置,票房口。
  • 咖啡店创新创业商业计划书(商业计划书咖啡)
  • 2024-07-01商业计划书咖啡何总是开咖啡店的,从事这个行业十多年,先后在杭州、上海、南京等地开了不少门店,创业路上有高峰也有低谷,从最早的客单价35元左右,变成现在的20元左右何总能很快嗅到市场的改变,便对咖啡店进行调整愿意支付。
  • 周翡吴楚楚和李晟(有翡李晟频繁惹祸)
  • 2024-07-01有翡李晟频繁惹祸《有翡》中的李晟在很多人眼里是个又蠢又爱惹事的讨厌家伙在四十八寨时就常常惹出很多事端来,还让自己表妹周翡背锅他想离开四十八寨,但是武功又不过关,硬闯洗墨江,结果被困好在周翡去找他,才没被千机线伤害离开。
  • 极高明而道中庸是什么意思(中庸精彩选段欣赏)
  • 2024-07-01中庸精彩选段欣赏极高明而道中庸意思是达到极端的高明同时又遵循中庸之道出自《中庸》《中庸》精选:大哉,圣人之道!洋洋乎,发育万物,峻极于天优优大哉!礼仪三百,威仪三千待其人然后行故曰:苟不至德,至道不凝焉故君子尊德性而。
  • ps快捷键大全及用法(PS快捷键大全快速记忆)
  • 2024-07-01PS快捷键大全快速记忆ps这个软件是大部分的网友们办公修图才使用的,平常会较少使用的,PS中的程序快捷键或面板快捷键必须有Ctrl(控制键),加某一字母、数字或符号(功能键),如有重复加Alt或shift(辅助控制键)下面。
  • 每日一印文字(每日一印方字)
  • 2024-07-01每日一印方字象形下从舟省,而上有并头之象故知并船为本义本义:并行的两船;泛指并列;并行并船也象两舟省、总头形借“匚”意凡方之属皆从方借指四个角都是90度直角的四边形或六个面都是方形的立体;正~形,长~形“方”字篆。
  • 省略号代表啥意思
  • 2024-07-01省略号代表啥意思省略号表示什么意思的回答如下:1、答案:第一个意思是表示沉默、无语;第二个意思是表示语言中断;第三个意思是表示语言断断续续;第四个意思是表示含糊其辞,欲言又止;第五个意思是表示语义未尽;第六个意思是表。
  • 朱一龙宋轶最近消息(宋轶5部新剧未播先火)
  • 2024-07-01宋轶5部新剧未播先火对于宋轶我想大家都非常的熟悉了,之前在伪装者中,跟胡歌搭戏的时候,可是深得观众喜爱,硬是把女二号演成了女一号在创业时代中,也是如此,无论在演技上和气场上,完全碾压了杨颖这位女一号因此被推上了热搜最近她。
  • 家常大盘鸡的制作方法菜谱(清淡大盘鸡的制作方法)
  • 2024-07-01清淡大盘鸡的制作方法1、清淡版大盘鸡的用料:鸡肉、半只土豆、一只青椒、姜片、盐、冰糖、料酒、生抽、花椒、胡椒粉等各种香料少许2、鸡肉洗净,冷水稍微泡泡除血水,加盐、料酒、生抽、胡椒粉,拌匀腌半小时3、热锅冷油,放花椒、姜。
  • 车前子叶的功效与作用及禁忌(详解车前子叶有哪些功效禁忌)
  • 2024-07-01详解车前子叶有哪些功效禁忌车前子叶的功效与作用:(1)车前子治感冒:车前草、陈皮各适量,水煎服(2)车前子治惊风:鲜车前根、野菊花根各二钱五分水煎服(3)车前子能去风毒,肝中风热,毒风冲眼目,赤痛障翳,脑痛泪出,去心胸烦热车前。