当前位置: 首页 > news >正文

【消息队列】细说Kafka消费者的分区分配和重平衡

消费方式

我们直到在性能设计中异步模式,一般要么是采用pull,要么采用push。而两种方式各有优缺点。

  • pull :说白了就是通过消费端进行主动拉去数据,会根据自身系统处理能力去获取消息,上有Broker系统无需关注消费端的消费能力。kafka采用pull模式
  • push : Broker主动推送消息到消费端,但是由于各个消费端吞吐量能力不同,可能推送相同的消息,不同的consumer处理能力不能,造成消息堆积。并且也需要下游系统的服务情况,以及当下游系统进行扩容或者宕机的时候都需要及时获取,这在设计难度上比较高。
    在这里插入图片描述

消费者总体流程

在这里插入图片描述

消费者组

Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制

  • 消费者组有一个或多个消费者实例
  • Group Id 标识一个消费者组 是唯一值,不同的Group 消费互相不影响
  • Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费。这个分区当然也可以被其他的 Group 消费

设置多少个消费者?
理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数。假设Group 订阅了3个主题,每个主题有3个分区,那么设置9个消费者最好,

在这里插入图片描述
在这里插入图片描述

消费组初始化过程

在这里插入图片描述

消费者组详细消费过程

在这里插入图片描述

分区的分配

分区的分配: 首先说一下什么是分区的分配,通俗一点的话就是,我们直到一个Topic下可能存在多个分区,而同时可能存在多个Topic,也就是多Topic+多分区,而消费者这边为了提升消费能力,也会设置多个消费者组,每个消费者组都包含多个消费者,而如何将分区的消息对应到具体的消费者组下的消费者就是分区的分配。
在这里插入图片描述
如上图所示,具体会根据流程来进行分区的分配。

  • 1.每个consumer发送Join Group请求到Broker的leader
  • 2.选择出一个consumer作为一个Leader。
  • 3.coordinator 把要消费的topic情况发送给Leader消费者
  • 4.Consumer Leader会负责指定消费方案
  • 5.把消费方案发给coordinator
  • 6.coordinator把消费方案发给各个consumer
  • 7.每个消费者和coordinator保持心跳,超时或者处理时间过长会触发在平衡。

1而在分区分配的时候有对应的分区策略具体就是如下三种方式

Range分区策略原理

在这里插入图片描述
总体思想就是将topic的分区和消费者进行排序,分区数/消费者个数。将对于出来的交给消费者排名考前的消费者,图中是7个分区,3个消费者。7/3 余 1,C0消费3个,C1和C2消费2个。

缺点:如果针对的topic和分区多,那么靠前的消费者可能会承担较多的消费。

RoundRobin以及再平衡

在这里插入图片描述
直接就是按照分区进行hash,排序,比如7个分区,分别C0负责0,3,6,C1负责1,4,C2负责2,5

Sticky以及再平衡

粘性分区的出现主要是避免分区的变动,节省开销。
首先会尽量均衡的放置分区到消费者上面,在出现同一消费者组内消费者出现问题的时候,会尽量保持原有分配的分区不变化。

重平衡

重平衡:首先大家看到重平衡有点懵逼,说白了,就是在上述分区分配的过程中,如果出现消费者组中消费者退出或者新加入消费者的时候,需要将消费者组内对所消费的Topic的分区达成共识的过程。这个共识说白了就是AConsumer消费那个分区,BConsumer消费那个分区的过程。

协调者:在分区分配的过程中引入了一个协调者的概念,而这个针对的级别是每个Broker都有自己各自的Coordinator组件,比如你部署了三台Broker集群,那么就有三个Coordinator。作用主要是负责为Consumer Group服务,提供Rebalance以及位移管理和组成员管理的。

kafka确定consumer group的Coordinator的过程

  • 确定位移主题的那个分区保存Group:partitionId=Math.abs(groupId.hashCode() % offsetsTopicPartitionCount)。
  • 找出该分区的Leader副本所在的Broker,该Broker就是对应的Coordinator。

我们举一个案例来描述一下,假设我们的GroupId 是test,hash值是15,对应的分区是12个,15%12 = 3,那么分区3就是存储Group信息的分区,而通过这个分区3在找到对应的Leader副本,就可以确定在哪个Broker了。进一步找到对应的Coordinator。

如何避免重平衡

为什么要避免重平衡

  • 在Rebalance过程中影响消费者的TPS,这个期间Consumer会停下手上所有的事情。
  • Rebalance过程是比较慢的,会影响实时在线业务

发生Rebalance的时机

  • 组成员数量发生变化
  • 订阅主题数量发送变化
  • 订阅主题的分区数发生变化

后两个其实是主动操作,是不可避免的。而大多数的Rebalance都是由于consumer成员发生变动导致的,一个是增加,增加消费者本身是为了提升系统消费者的吞吐量,这个不在控制范围,而减少就是重中之重的避免rebalance。

从上图我们直到,consumer会定期的向协调者Coordinator发送心跳检测,如果不能在固定时间内
session.timeout.ms 默认10S 发送心跳,Coordinator会认为consumer死亡,从而发生rebalance。

heartbeat.interval.ms 是发送心跳的频率,一般来说越高频发送心跳检测,那么消耗的带宽资源就越多。

max.poll.interval.ms consumer端两次调用poll的最大时间间隔,默认是5分钟,如果5分钟没有消费poll方法返回的消息,那么会主动发起离开组的请求,开启新的一轮rebalance。

如何避免

  • 避免rebalance未能及时发送心跳而导致触发Rebalance。需要合理设置参数值
    • 设置 session.timeout.ms = 6s。
    • 设置 heartbeat.interval.ms = 2s。
    • 要保证 Consumer 实例在被判定为“dead”之前,能够发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms。
  • Rebalance 是 Consumer 消费时间过长导致的,根据业务处理时间设置 max.poll.interval.ms的值。如果业务处理50S,那么就设置55S

小结

本篇从消费者角度描述了一下 消费者组和消费者的关系,以及消费者组和分区的关联流程,而从中引出了重平衡的话题,而在实际的生产环境中我们需要避免重平衡的发生。

相关文章:

【消息队列】细说Kafka消费者的分区分配和重平衡

消费方式 我们直到在性能设计中异步模式,一般要么是采用pull,要么采用push。而两种方式各有优缺点。 pull :说白了就是通过消费端进行主动拉去数据,会根据自身系统处理能力去获取消息,上有Broker系统无需关注消费端的…...

【Python从入门到人工智能】14个必会的Python内置函数(7)——打印输出(详细语法参考 + 参数说明 + 具体示例)| 附:Python输出表情包

你仔细想想,你和谁在一起的时候,最放得开、最自然、最舒服,又毫无顾忌,可以做回真实的你。那个人才是你心里最特别,最重要的人。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4�…...

为什么要创建FAQ?这篇文章告诉你

什么是FAQ 通过上述的引入大家应该也了解到了,FAQ是为了“解决问题”而存在的。FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。FAQ是当前网络上提供在线帮助的主要手段&…...

基于html+css的盒子展示1

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...

Python 无监督学习实用指南:1~5

原文:Hands-on unsupervised learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关…...

2023 腾讯暑期实习申请经验分享

首先要向还在等我出 CMU 15-445 后面实验的同学们说声抱歉,这个系列可能暂时要停更啦。 一方面是博主最近课程和实验室方面的任务比较多,另一方面是有幸拿下了今年腾讯 WXG 后端开发的暑期实习 Offer,后面可能要提前学习一些工作中用到的框架…...

Protocol Buffers 介绍

Protocol Buffers Protocol Buffers ,协议缓冲区。什么是Protocol Buffers呢?或者我们简称PB 吧。那么Protocol Buffers 是一种与语言无关、与平台无关的可扩展机制,用于序列化结构化的数据。 example message Person {optional string nam…...

【模电实验】基尔霍夫定律、叠加定理和戴维南定理验证实验

实验目的 验证基尔霍夫电流定律(KCL)和电压定律(KVL)加深对该定理的理解验证叠加定理,加深对该定理的理解验证戴维南定理,掌握有源二端口网络的开路电压,短路电流和入端等效电阻的测定方法通过实…...

java某百货店POS积分管理系统_积分点更新生成以及通票回收处理

百货店是生活中不可缺少的一部分,为了给顾客提供更方便的服务平台以及更好的服务质量,而设计了POS积分管理系统。百货店通过点积分的管理获得顾客更好的信誉,增加客户流量,获得更多的利益。在百货店经营的过程中,每天的…...

Flutter 常用指令

1.flutter create app_01 &#xff1a;创建一个新的Flutter项目 2.flutter run&#xff1a;运行应用程序 3.flutter run -d <deviceId>&#xff1a;运行指定模拟器或者真机 4.flutter devices&#xff1a;查看计算机上的真机设备和IOS模拟器 5.flutter emulators&…...

定义全局变量property与getprop

authordaisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主 adb调试 adb shell getprop .adb logcat 报错 init: sys_prop: permission denied uid:1006 name:ro.camera.gc02m1 在linux驱动中查找 find ./ -name *.c | xargs grep -n "property_set" find ./ -n…...

双目三维测距(python)

文章目录 1. 双目检测1.1 调用相机1.2 分割画面 2. 双目标定2.1 相机标定2.2 获取参数 3. 双目测距3.1 立体校正3.1.1 校正目的3.1.2 校正方法3.1.2 相关代码 3.2 立体匹配和视差计算3.3 深度计算3.4 注意事项 4. 完整代码 代码打包下载&#xff1a; 链接1&#xff1a;https://…...

数据结构|二叉树的三种遍历方式,你掌握了几种?

目录 1、遍历方式 2、前序遍历 3、中序遍历 1、遍历方式 学习二叉树的结构&#xff0c;最简单的方式就是遍历二叉树。遍历二叉树就是通过某条线路对二叉树的各个结点进行一次访问&#xff0c;访问的方法有三种分为前序遍历、中序遍历、后续遍历&#xff0c;层序遍历它们的遍…...

Direct3D 12——灯光——法向量

a:平面法线着色 b:顶点法线着色 c:像素着色 平面法线&#xff08;face normal,由于在计算机几何学中法线是有方向的向量&#xff0c;所以也有将normal译作法向量&#xff09; 是 一种描述多边形朝向&#xff08;即正交于多边形上所有点&#xff09;的单位向量。 曲面法线&a…...

软考-信息系统工程(五)

信息系统工程 Garlan和Shaw对通用软件架构风格进行了分类&#xff0c;他们将软件架构分为:(曾经考过1分选择题 区分) 数据流风格:数据流风格包括批处理序列和管道/过滤器两种风格。调用/返回风格:调用/返回风格包括主程序/子程序、数据抽象和面向对象&#xff0c;以及层次结构…...

解决谷歌翻译不能使用的问题

今天登录国外网站&#xff0c;发现谷歌翻译已无法正常使用&#xff0c;网上最多的方法就是更改host文件&#xff0c;在host内增加ip地址&#xff0c;但是经常失效&#xff0c;经常手动更改增加ip着实烦恼&#xff0c;还有可能有别的错误。 最终解决方式是&#xff1a;登录GitH…...

Insomnia 简单使用方法

文章目录 1. 新建工程2. 新建若干文件夹3. 设置环境变量4. 授权以及进行请求的链式调用 (chaining requests)4. 1 解决办法 14. 2 解决办法 2 Insomnia 同 Postman&#xff0c; 用于测试后端 endpoint&#xff0c;很容易使用。 使用步骤如下&#xff1a; 1. 新建工程 2. 新建若…...

2023接口自动化测试,完整入门篇

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…...

2023年股票代持行业研究报告

第一章 股票代持概述 1.1 基本概念 股票代持&#xff0c;或称委托持股&#xff0c;是指实际出资人与名义出资人达成以下约定&#xff1a;名义出资人作为名义股东&#xff0c;在股东名册等公司工商登记信息上出现&#xff0c;而实际上由实际出资人出资并享有投资权益。 股票代…...

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配

目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识&#xff0c;当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置&#xff0c;具体的源码过程如下&#xff1a; …...

扛住十万并发的“冷面保安”:一文扒透限流的四大经典算法与代码实战

在高并发架构中&#xff0c;如果说缓存和 MQ 是替服务器扛伤害的“防弹衣”&#xff0c;那么限流&#xff08;Rate Limiting&#xff09;就是守在系统大门外的“冷面保安”。他的核心逻辑极其冷酷&#xff1a;不管外面排队的人有多急&#xff0c;只要超过了系统的最大接待能力&…...

如何扛住十万级流量洪峰?扒开高并发架构的五层防御体系

在互联网的残酷战场上&#xff0c;流量既是黄金&#xff0c;也是洪水。试想这样一个场景&#xff1a;你们公司花重金请了一位顶流代言人&#xff0c;晚上 8 点准时开启一场“一元秒杀”活动。时间一到&#xff0c;原本平时只有几百 QPS&#xff08;每秒请求数&#xff09;的系统…...

2026年降AI工具维普检测专项实测:五款主流工具维普AIGC检测通过率完整横评

2026年降AI工具维普检测专项实测&#xff1a;五款主流工具维普AIGC检测通过率完整横评 拿同一篇论文&#xff0c;用三款工具分别处理&#xff0c;记录了完整检测数据。 结论先说&#xff1a;嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;效果最稳&#xff0c;价格也最…...

深度解析fullPage.js全屏滚动插件的架构设计与性能优化策略

深度解析fullPage.js全屏滚动插件的架构设计与性能优化策略 【免费下载链接】fullPage.js fullPage plugin by Alvaro Trigo. Create full screen pages fast and simple 项目地址: https://gitcode.com/gh_mirrors/fu/fullPage.js fullPage.js作为现代Web开发中广受青睐…...

ComfyUI Segment Anything:零门槛实现智能图像分割的完整指南

ComfyUI Segment Anything&#xff1a;零门槛实现智能图像分割的完整指南 【免费下载链接】comfyui_segment_anything Based on GroundingDino and SAM, use semantic strings to segment any element in an image. The comfyui version of sd-webui-segment-anything. 项目地…...

无王无帝定乾坤,来自田间第一人 凰标重塑新风骨

一、破题&#xff1a;王权不是答案旧认知新真相山河气运系于帝王扭转乾坤藏于民间位高者裁定是非布衣亦可定乾坤权贵定义风骨凰标重塑精神二、旧世风骨之殇等级枷锁 王权为纲 → 尊卑为界 → 精神镣铐千年。世俗偏见 财富分贵贱 → 地位论高低 → 人心逐利忘本。结局 风骨消磨 …...

抖音下载器终极实战指南:高效批量下载与去水印的完整解决方案

抖音下载器终极实战指南&#xff1a;高效批量下载与去水印的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

别再自己造轮子了!用BouncyCastle库在C#里快速搞定SM4国密加解密

用BouncyCastle在C#中高效实现SM4国密算法 金融级数据安全已成为现代企业系统的刚需&#xff0c;而国密算法作为我国自主研发的密码体系核心&#xff0c;正在政务、金融等高安全要求场景中快速普及。SM4作为国密标准中的对称加密算法&#xff0c;其128位分组长度和32轮非线性迭…...

从‘果冻屏’到‘瀑布屏’:OCA全贴合工艺如何悄悄改变了你的视觉体验?

从‘果冻屏’到‘瀑布屏’&#xff1a;OCA全贴合工艺如何悄悄改变了你的视觉体验&#xff1f; 还记得十年前那些让人抓狂的“果冻屏”吗&#xff1f;阳光下泛着彩虹纹&#xff0c;触控时总感觉隔着一层毛玻璃&#xff0c;甚至能清晰看到屏幕边缘积攒的灰尘。如今拿起任何一款旗…...

保姆级教程:在Ubuntu上配置Lotus基准测试环境(含参数下载与自定义GPU支持)

在Ubuntu上配置Lotus基准测试环境的完整指南 对于Filecoin生态系统的参与者来说&#xff0c;理解网络性能并优化硬件配置至关重要。本文将带您完成在Ubuntu系统上搭建Lotus基准测试环境的全过程&#xff0c;从基础环境准备到高级GPU自定义支持&#xff0c;为您提供一份详尽的实…...