什么是kafka的重平衡机制?

news2024/9/19 10:38:13

背景

kafka重平衡的主要发生在消费者端,重平衡的目的,主要是为了均衡消费者消费kafka的消息而设计的,对于动态加入消费者,减少消费者,以及消息分区变化这些场景中,若不设计消费者重平衡,容易出现某个消费者消费消息出现倾斜的情况,如:某个消费者消费的消息特别多,而某些消费者不消费消息,造成资源的浪费。

触发条件

  • 消费者组内成员变更,如新增消费者,消费者下线。

  • 主题的分区数发生变更,kafka支持动态增加主题的分区,当增加主题的分区时会触发重平衡。

  • 订阅的主题发生变化。当消费者组使用正则表达式订阅主题时,这时kafka的主题发生变化时,就会触发重平衡流程。

以上这几个场景就是kafka触发重平衡流程的场景,其他的场景,如消费者消费消息时间过长,这些场景其实可以归纳为第一类场景,无非就是消费者心跳检测超时,导致消费者下线,从而触发的重平衡。

在了解重平衡之前,你需要知道这两个角色

群组协调器(Coordinator)群组协调器是一个能够从消费者群组中收到所有消费者发送心跳消息的 broker。在最早期的版本中,元数据信息是保存在 ZooKeeper 中的,但是目前元数据信息存储到了 broker 中。每个消费者组都应该和群组中的群组协调器同步。当所有的决策要在应用程序节点中进行时,群组协调器可以满足 JoinGroup 请求并提供有关消费者组的元数据信息,例如分配和偏移量。群组协调器还有权知道所有消费者的心跳,消费者群组中还有一个角色就是领导者,注意把它和领导者副本和 kafka controller 进行区分。领导者是群组中负责决策的角色,所以如果领导者掉线了,群组协调器有权把所有消费者踢出组。因此,消费者群组的一个很重要的行为是选举领导者,并与协调器读取和写入有关分配和分区的元数据信息。

消费者领导者:每个消费者群组中都有一个领导者。如果消费者停止发送心跳了,协调者会触发重平衡。

在了解重平衡之前,你需要知道状态机是什么

Kafka 设计了一套消费者组状态机(State Machine) ,来帮助协调者完成整个重平衡流程。消费者状态机主要有五种状态它们分别是 Empty、Dead、PreparingRebalance、CompletingRebalance 和 Stable

了解了这些状态的含义之后,下面我们用几条路径来表示一下消费者状态的轮转

  1. 消费者组一开始处于 Empty 状态,当重平衡开启后,它会被置于 PreparingRebalance 状态等待新消费者的加入,一旦有新的消费者加入后,消费者群组就会处于 CompletingRebalance 状态等待分配,只要有新的消费者加入群组或者离开,就会触发重平衡,消费者的状态处于 PreparingRebalance 状态。等待分配机制指定好后完成分配,那么它的流程图是这样的

  2. 在上图的基础上,当消费者群组都到达 Stable 状态后,一旦有新的消费者加入/离开/心跳过期,那么触发重平衡,消费者群组的状态重新处于 PreparingRebalance 状态。那么它的流程图是这样的。

  3. 在上图的基础上,消费者群组处于 PreparingRebalance 状态后,很不幸,没人玩儿了,所有消费者都离开了,这时候还可能会保留有消费者消费的位移数据,一旦位移数据过期或者被刷新,那么消费者群组就处于 Dead 状态了。它的流程图是这样的

  4. 在上图的基础上,我们分析了消费者的重平衡,在 PreparingRebalance或者 CompletingRebalance  或者 Stable 任意一种状态下发生位移主题分区 Leader 发生变更,群组会直接处于 Dead 状态,它的所有路径如下

 

这里面需要注意两点:

一般出现 Required xx expired offsets in xxx milliseconds 就表明Kafka 很可能就把该组的位移数据删除了

只有 Empty 状态下的组,才会执行过期位移删除的操作。

重平衡流程 

上面我们了解到了消费者群组状态的转化过程,下面我们真正开始介绍 Rebalance 的过程。重平衡过程可以从两个方面去看:消费者端和协调者端,首先我们先看一下消费者端

从消费者看重平衡

从消费者看重平衡有两个步骤:分别是 消费者加入组 和 等待领导者分配方案。这两个步骤后分别对应的请求是 JoinGroup 和 SyncGroup

新的消费者加入群组时,这个消费者会向协调器发送 JoinGroup 请求。在该请求中,每个消费者成员都需要将自己消费的 topic 进行提交,我们上面描述群组协调器中说过,这么做的目的就是为了让协调器收集足够的元数据信息,来选取消费者组的领导者。通常情况下,第一个发送 JoinGroup 请求的消费者会自动称为领导者。领导者的任务是收集所有成员的订阅信息,然后根据这些信息,制定具体的分区消费分配方案。如图

在所有的消费者都加入进来并把元数据信息提交给领导者后,领导者做出分配方案并发送 SyncGroup请求给协调者,协调者负责下发群组中的消费策略。下图描述了 SyncGroup 请求的过程

当所有成员都成功接收到分配方案后,消费者组进入到 Stable 状态,即开始正常的消费工作。

从协调者来看重平衡 

从协调者角度来看重平衡主要有下面这几种触发条件,

  • 新成员加入组

  • 组成员主动离开

  • 组成员崩溃离开

  • 组成员提交位移

我们分别来描述一下,先从新成员加入组开始

新成员加入组

我们讨论的场景消费者集群状态处于Stable 等待分配的过程,这时候如果有新的成员加入组的话,重平衡的过程

从这个角度来看,协调者的过程和消费者类似,只是刚刚从消费者的角度去看,现在从领导者的角度去看

组成员离开 

组成员离开消费者群组指的是消费者实例调用 close() 方法主动通知协调者它要退出。这里又会有一个新的请求出现 LeaveGroup()请求 。如下图所示

组成员崩溃 

组成员崩溃是指消费者实例出现严重故障,宕机或者一段时间未响应,协调者接收不到消费者的心跳,就会被认为是组成员崩溃,崩溃离组是被动的,协调者通常需要等待一段时间才能感知到,这段时间一般是由消费者端参数 session.timeout.ms 控制的。如下图所示

重平衡时提交位移 

这个过程我们就不再用图形来表示了,大致描述一下就是 消费者发送 JoinGroup 请求后,群组中的消费者必须在指定的时间范围内提交各自的位移,然后再开启正常的 JoinGroup/SyncGroup 请求发送。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十五章 数据管理成熟度评估

定义: 能力成熟度评估: 是是一种基于能力成熟度模型框架的能力提升方案,描述了数据管理能力初始状态发展到最优化的过程。 数据管理成熟度评估:(Data Management Maturity Assessment, DMMA)可用于全面评估…

MySQL——数据表的基本操作(一)创建数据表

数据库创建成功后,就需要创建数据表。所谓创建数据表指的是在已存在的数据库中建立新表。需要注意的是,在操作数据表之前,应该使用 “ USE 数据库名 ” 指定操作是在哪个数据库中进行,否则会抛出 “ No database selected ” 错误。创建数据表…

大路灯护眼灯有必要买吗?五款护眼大路灯推荐

大路灯护眼灯有必要买吗?许多消费者对护眼大路灯的了解不够,总是被不专业产品“耍”得团团转。就比如市面上很多声称用了眼睛就不近视的产品,实际上它们毫无专业技术沉淀,还疏于调校光线稳定性、光线均匀度等上百项核心参数&#…

【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)

目录 1 -> HTML常见标签 1.1 -> 表格标签 1.1.1 -> 基本使用 1.1.2 -> 合并单元格 1.2 -> 列表标签 1.3 -> 表单标签 1.3.1 -> form标签 1.3.2 -> input标签 1.4 -> label标签 1.5 -> select标签 1.6 -> textarea标签 1.7 -> …

C++类和对象——中

1. 类的默认成员函数 默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不…

数字孪生赋能智慧城市大脑智建设方案(可编辑65页PPT)

引言:随着科技的飞速发展,智慧城市的建设已成为全球城市发展的新趋势。数字孪生技术作为其中的关键技术之一,正逐步赋能智慧城市大脑的建设,推动城市治理从数字化向智能化、智慧化转型升级。本方案旨在简要介绍数字孪生赋能智慧城…

“七人拼团:共赢与互助的奖励之旅“

在七人拼团策略中,其精心构建的奖励体系无疑是吸引并激励参与者踊跃参与的核心驱动力。接下来,我们将深入剖析该策略中三种核心奖励类型——直推奖、滑落奖与团队奖,并探讨它们如何促进成员间的互助合作机制。 奖励体系深度剖析 直推奖&…

python爬虫实践

两个python程序的小实验(附带源码) 题目1 爬取http://www.gaosan.com/gaokao/196075.html 中国大学排名,并输出。提示:使用requests库获取页面的基本操作获取该页面,运用BeautifulSoup解析该页面绑定对象soup&#x…

股票多因子模型实战之因子行业中性化(附python代码)

原创文章第607篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 今天开始,咱们从ETF、可转债正式转到大家最熟悉、最常见的股票市场。 而且切入的方向,仍然是——“多因子模型”。 01 什么是因子? 因子是什么…

qml教程:qml视频播放组件介绍

更多qml教程,请参考QML入门进阶教程专栏:https://mingshiqiang.blog.csdn.net/category_9951228_2.html 文章目录 MediaPlayerVideoOutput视频播放代码示例增加视频效果图片二值化处理视频帧本篇博客介绍qml如何播放视频,以及视频特效处理。 本篇博客提供的代码全部通过Qt6.…

64位Office API声明语句第121讲(终了)

跟我学VBA,我这里专注VBA, 授人以渔。我98年开始,从源码接触VBA已经20余年了,随着年龄的增长,越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友,都来学习VBA,利用VBA,起码可以提高…

【Mind+】掌控板入门教程02 趣味相框

光影重叠,时间和回忆定格在在一张张相片里。人们通常会用相框把相片装裱起来,展示在家中或者工作的地方,来回味往日的美好时光。但是一个相框只能放一张照片,怎么才能让它展示不同的照片呢?正好此时我们的手边有一块掌…

Python 爬虫项目实战(一):破解网易云 VIP 免费下载付费歌曲

前言 网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

World of Warcraft [RETAIL] UI Setting

/*测试魔兽世界正式服,界面UI编辑器,UI布局文本 World of Warcraft [RETAIL] UI Setting开头的:1 39 某种类型 : 序号(默认-1,有多个从0开始计数0,1,2,3 未知类型 未知类型 未知类型 控件类型&#xff1…

【中项】系统集成项目管理工程师-第9章 项目管理概论-9.8项目管理知识领域

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

vue2-04-利用VueCli脚手架搭建vue2项目步骤、目录解读、eslint缩进配置、自适应配置、less

目录 前置信息创建vue2项目目录解读在VSCode中启动项目eslint配置自适应配置(px自动转rem)less配置 前置信息 我用的代码编译器是VSCode,node版本是16.20.2,npm版本是8.19.4,项目选用的是less预处理,npm安…

EyouCMS响应式高端网站建设互联网营销网站模板/易优CMS网站建设类企业网站模板源码

EyouCMS响应式高端网站建设互联网营销网站模板,易优CMS网站建设类企业网站模板源码。适用于IT、软件、互联网、游戏类企业网站建设使用。 模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS,完美兼容IE7、Firefo…

链式二叉树的实现

文章目录 🎯引言👓链式二叉树的实现1.链式二叉树的结构2.链式二叉树相关操作实现2.1源码展示2.2函数实现详解2.2.1前中后序遍历2.2.2二叉树的其他方法实现2.2.3二叉树的层序遍历和判断是否是完全二叉树 🥇结语 🎯引言 欢迎来到Ha…

论文笔记:InternImage—基于可变形卷积的视觉大模型,超越ViT视觉大模型,COCO 新纪录 64.5 mAP!

文章信息 Title:InternImage: Exploring Large-Scale Vision Foundation Models with Deformable ConvolutionsPaper Link:https://arxiv.org/abs/2211.05778 Code Link:https://github.com/OpenGVLab/InternImage 写在前面 拿到文章之后先看…

科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ如何保证发送消息不丢失

概叙 本文分析了 RocketMQ 同步发送、异步发送和单向发送三种方式的原理、优缺点以及使用场景,并且分析了每种方式涉及到的核心源码。 科普文:微服务之Spring Cloud Alibaba版本选择-CSDN博客 通过上文的介绍可以知道同步发送方式可以保证消息发送时不…