(10)消费者

1、消费组:分区只能一个消费者消费;消费者>分区个数,有空闲

2、分区策略:1)界限分配(默认)    2)轮询分配    3)粘性分配(均匀、尽可能与上次相同)

3、再均衡:分区所属变,删除/添加消费者 1)弊端:不可读、慢、重复消费    2)避免

4、再平衡全流程:1)状态机    2)流程

一、消费组

消费者只消费配到分区中消息。每个分区只能一个消费组一个消费者消费

分区固定,一味增加消费者,并不会提升消费能力,如消费者个数大于分区个数就有消费者配不到分区。如:一共有8个消费者,7个分区,C7空闲

二、消费端分区策略

partition.assignment.strategy 设置分区分配策略(消费者与主题间)

1、RangeAssignor界限分配(默认)

原理:(消费者+分区)总数整除获得跨度,按跨度平均分配给所有消费者订阅主题消费者按名称排序,每个消费者固定分区范围。如不够平均分,靠前消费者多分一个分区。

组内消费者 C0 和 C1,都订阅主题 t0 和 t1,每个主题4个分区,结果为:

3个分区,并不均匀

2、RoundRobinAssignor轮询分配

组内消费者及订阅topic分区按字典排序,轮询方式 分区逐个分每个消费者。

1)如订阅相同分配均匀。2)不同,就不完全轮询,可能不均匀。

例:3个消费者(C0、C1 和 C2),t0、t0、t1、t2主题分别3个分区,消费组订阅 t0p0、t1p0、t1p1、t2p0、t2p1、t2p2 6个分区

C0 订t0,C1 订t0 和 t1,C2 订 t0、t1 和 t2,最终结果:

3、StickyAssignor粘性分配

1、目的:分配均匀、尽可能与上次分配相同

2、例:消费者C0、C1 和 C2,订阅t0、t1、t2、t3,每个主题有2个。消费组订阅 t0p0、t0p1、t1p0、t1p1、t2p0、t2p1、t3p0、t3p1 8个分区

C1 脱离消费组,“黏性”:尽可能让前后两次相同,减少损耗及异常:

三、再均衡(Rebalance)

分区所属权转到另一消费者安全删除/添加消费者

1、弊端

    1)发生期间,组内消费者无法读消息

    2)慢,组里几百个Consumer,Rebalance几小时

    3)丢失消费者当前状态:消费没提交位移就再均衡,分给组内另一消费者,重复消费

2、Rebalance 发生时机

1)组成员数、2)订阅topic数、3)topic分区数变化    4)gc:Consumer 端频繁Full GC导致长时间停顿,也会引发 Rebalance

组成员数引发Rebalance如何避免(后两类业务调整导致,不可控):

    1)设置session.timeout.ms,默认10 秒没有收Consumer 心跳,认为挂

    2)设置heartbeat.interval.ms心跳请求频率,心跳间隔时间

    3)设置max.poll.interval.ms,Consumer 端应用程序调用 poll()时间间隔,5 分钟(默认)无法消费完 poll 方法返回消息,Consumer 发起“离开组”请求,Coordinator 开启Rebalance

ps:GroupCoordinator 管理消费组、负责再均衡。

四、消费者组再平衡全流程

过程:靠消费者端心跳线程(Heartbeat Thread),通知其他消费者

“REBALANCE_IN_PROGRESS”装进心跳请求,发给消费者。消费者发现心跳响应中包含“REBALANCE_IN_PROGRESS”,知道重平衡开始

1、消费者组状态机

Broker 的协调者完成重平衡,状态机(State Machine)实现

1)5 种状态:Empty、Dead、PreparingRebalance、CompletingRebalance 和 Stable。

2)流转:加入/退时,Stable 跳PreparingRebalance 状态,现存成员重新申请加入组。

    Kafka 定期自动删除/过期位移条件就是组Empty 状态。如消费者组停掉了很长时间(超过 7 天),Kafka 很可能就把该组的位移数据删除了。

2、消费者端重平衡流程

消费者端,重平衡两个步骤:加入组和等Leader消费者分配。JoinGroup和 SyncGroup请求

1.加入组:

    1)向协调器发JoinGroup请求,2)上报订阅topic,这样协调器就可收集所有订阅信息

2.选择消费组领导者

    1)协调者选领导者,2)收集所有成员订阅信息,3)制定分区消费分配方案

3.选举分区分配策略

消费者投票决定

1)协调器会收集支持组成候选集candidates。2)消费者从候选集candidates 中找出第一个自身支持策略,投票。3)计算选票数

如消费者不支持报出异常 IllegalArgumentException:Member does not support protocol。

4.发送 SyncGroup 请求

1)协调器把消费者组订阅信息装进 JoinGroup 请求响应体中,2)发给领导者统一做分配方案,3)领导者发送SyncGroup请求给协调器

5.响应SyncGroup

消费者发送SyncGroup请求,领导者请求内容为接收一个SyncGroup响应,接受订阅信息

https://mp.weixin.qq.com/s/C6dfvzFkNDYgiNeZ4eWPBQ

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容