kafka消费者出现频繁Rebalance

kafka消费者在正常使用过程中,突然出现了不消费消息的情况,项目里是使用了多个消费者消费不同数据,按理不会相互影响,看日志,发现消费者出现了频繁的Rebalance。

Rebalance的触发条件

  1. 组成员发生变更(新consumer加入组、已有consumer主动离开组或已有consumer崩溃)
  2. 订阅主题数发生变更——这当然是可能的,如果你使用了正则表达式的方式进行订阅,那么新建的匹配正则表达式的topic就会触发rebalance
  3. 订阅主题的分区数发生变更

经过查找资料和排除发现,我们的项目里多个消费者使用了相同的消费者组,也就是同个消费者组里的多个消费者分别消费不同topic,这种情况会增大发生Rebalance的概率,原因是

消费者在zookeeper中注册中,消费者注册标识符(Consumer Identifiers Registry)是保存在zookeeper的/consumers/[group_id]/ids/[consumer_connector_id]的路径下,这些消费者注册节点形成一棵树,当有消费者加入或离开时,树上所有的消费者都会被通知到,从而进行rebanlance。
消费者在zookeeper注册的路径与topic并没有关系,反而与groupid绑定,这是因为同一个consumer可以消费不同的topic。如果不同的consumer使用同一个groupid消费不同的topic,而任何一个topic的consumer出现加入或离开等变化时,所有groupid组里的consumer都会发生rebalance。

在项目中,我们为了保证消费的有序性,所有主题均使用单分区,消费者组的作用,更多是为了单主题多分区时,使用多个消费者消费此多分区主题可以避免重复消费,我们这里使用一个消费者组里的不同消费者消费不同主题,虽然能用,但是是没有必要的,而且会有风险,就是这些消费者在同一个组时,会出现相互影响的情况,最明显的就是这次出现的频繁rebalance,只要组内有一个消费者加入或者退出,都会触发rebalance。因此,除了使用多个消费者消费单多分区的主题时使用同一个消费者组,其它情况一律建议一个消费者对应一个消费者组。

Rebalance的影响

  1. 数据重复消费:消费过的数据由于提交offset任务也会失败,在partition被分配给其他消费者的时候,会造成重复消费,数据重复且增加集群压力
  2. Rebalance扩散到整个ConsumerGroup的所有消费者,因为一个消费者的退出,导致整个Group进行了Rebalance,并在一个比较慢的时间内达到稳定状态,影响面较大
  3. 频繁的Rebalance反而降低了消息的消费速度,大部分时间都在重复消费和Rebalance
  4. 数据不能及时消费,会累积lag,在Kafka的TTL之后会丢弃数据

其中第1点由于我们是单分区,可以忽略,因此主要是2和3,我们这次出现不消费消息的情况,就是因为频繁Rebalance,在Rebalance过程中,消费者组内的所有消费者实例都会停止工作,等待Rebalance完成。

这里此前我之所以使用同一个消费者组,是在另一个功能中为了避免重复消费,直接搬过来没修改确实不应该,后续应该要引以为戒。

补充:

对于使用单个group里的多个消费者消费同一个单分区的主题,不是完全一无是处,其能一定程度提高系统的高可用性
以下为AI的回答:

当消费者组内的消费者数量超过主题的分区数量时,虽然多余的消费者无法直接消费消息,但它们可以作为备用消费者存在。一旦某个正在消费消息的消费者出现故障(如宕机、网络问题等),Kafka的控制器(Controller)可以触发重平衡(Rebalance)操作,将出现故障的消费者所负责的分区重新分配给其他空闲的消费者。这样,即使某个消费者出现故障,也不会导致消息丢失或处理延迟,从而保证了系统的高可用性。
此外,这种配置还可以提供灵活的扩展性。随着业务的发展,消息量可能会逐渐增加,需要更多的消费者来处理。如果预先配置了多余的消费者,那么当需要增加消费能力时,只需要增加主题的分区数量,并触发重平衡操作,就可以将新的分区分配给空闲的消费者,而无需停止和重启消费者组。
然而,需要注意的是,虽然多余的消费者可以提高系统的高可用性和扩展性,但也会增加系统的资源消耗和复杂性。因此,在实际应用中,需要根据具体场景和需求来合理配置消费者数量和分区数量,以实现最佳的平衡。

参考文章

https://www.cnblogs.com/adai-study-1030/p/14793846.html
https://blog.csdn.net/hellozhxy/article/details/114602341
https://blog.csdn.net/u013200380/article/details/87868696
https://blog.csdn.net/lubin2016/article/details/125072753

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

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

相关文章

QList和QSet常用操作(查找、插入、排序、交集)

1、QList常用操作(查找、插入、排序) (1)QList查找(前提:已排序) /*[查找val在列表(已排序)中的位置,返回值范围[-1,0,,size()-1]]*/ int posOf(const QLis…

机器学习基础05

目录 1.随机森林 1.1随机森林的介绍 1.2算法原理 1.3API 2.线性回归 2.1回归的含义 2.2线性回归 2.3损失函数 2.4多参数回归 2.5最小二乘法MSE 2.6API 1.随机森林 集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。 集成…

深度解析 Feign

一、引言 在当今微服务架构盛行的时代,众多微服务相互协作构成了复杂的分布式系统。然而,各个微服务之间的调用往往涉及到诸多繁琐的细节,比如网络请求的构建、参数的处理、响应的解析等。为了让开发人员能够更加专注于业务逻辑的实现&#x…

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中,范式是一系列规则,用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计,数据可能会以平铺式罗列,仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…

iOS swift开发--- 加载PDF文件并显示内容

iOS开发采用pdfkit ,可以很方便的读取pdf的内容。以下是简易的显示pdf内容的代码 import UIKit import PDFKitclass ViewController: UIViewController, UIDocumentPickerDelegate {var pdfView: PDFView! //创建一个控件显示内容let selectPDFButton UIButton(ty…

统信操作系统离线安装JDK、Nginx、elasticsearch、kibana、ik、pinyin

第一步:挂载光盘 1、查看设备名称 查看光盘的名称,通常是以 /dev/sr0 或者类似格式显示lsblk 2、创建挂载点并挂载光盘 创建挂载目录sudo mkdir /mnt/cdrom 进行光盘目录挂载,/dev/sr0 要替换为实际查看到的光盘设备名称sudo mount /dev…

Linux服务器下连接kingbase并执行SQL的脚本

Linux服务器上实现通过shell脚本更新数据(非信创服务器) #!/bin/bash# PostgreSQL 连接信息 HOST"172.16.2.112" DBNAME"bxszf" USER"flexoffice" PASSWORD"123456789"# SQL 更新语句 SQL_QUERY"update f…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

Hadoop生态圈框架部署(六)- HBase完全分布式部署

文章目录 前言一、Hbase完全分布式部署(手动部署)1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.j…

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题:他们发现某个应用对一个数据量相对较小的表(仅包含数千条记录)访问时,频繁遇到性能下降的情况。为解决此问题,客户向我们求助进行分析。我们发现这张表有频繁的批量插…

nginx证书流式响应配置

要配置 Nginx 支持流式响应的反向代理,你需要进行一些特定的设置,以确保 Nginx 不会缓冲响应并正确地将数据转发到后端服务器。以下是一个简单的配置示例,假设你的后端服务器运行在 http://backend-server:port: server {listen …

CentOS 8 安装 chronyd 服务

操作场景 目前原生 CentOS 8 不支持安装 ntp 服务,因此会发生时间不准的问题,需使用 chronyd 来调整时间服务。CentOS 8以及 TencentOS 3.1及以上版本的实例都使用 chronyd 服务实现时钟同步。本文介绍了如何在 CentOS 8 操作系统的腾讯云服务器上安装并…

AI大模型(二):AI编程实践

一、软件安装 1. 安装 Visual Studio Code VSCode官方下载:Visual Studio Code - Code Editing. Redefined 根据自己的电脑系统选择相应的版本下载 安装完成! 2. 安装Tongyi Lingma 打开VSCode,点击左侧菜单栏【extensions】,…

Win10/11 安装使用 Neo4j Community Edition

如果你下载的是 Neo4j Community Edition 的压缩包,意味着你需要手动解压并配置 Neo4j。以下是详细的使用步骤: 0. 下载压缩包 访问Neo4j官网,找到 Community Edition 版本并选择 4.x 或者 5.x 下载:https://neo4j.com/deployme…

使用json配置动态区间及动态执行公式

背景 有时候可能线上一直需要调整公式或者区间以及参数等等,如果使用代码方式,将会变得比较麻烦,可以在redis或者数据库配置一份动态配置,让代码进行解析并执行,可以对公式以及参数等进行动态调节 需求 x 是估值&…

腾讯地图GL JS点标识监听:无dragend事件的经纬度获取方案

引入腾讯地图SDK <!--腾讯地图 API--><script charset"utf-8" src"https://map.qq.com/api/gljs?librariestools&v1.exp&key***"></script>构建地图容器 <div class"layui-card"><div class"layui-car…

Tiktok对接和内容发布申请流程

这段时间在搞AI生成视频&#xff0c;希望用户能一键发布到Tiktok&#xff0c;因此研究了一下Tiktok的开发者申请流程&#xff0c;发现好复杂&#xff0c;同时也发现Tiktok的开发也跟我一样&#xff0c;挺草台班子的 0、流程简述 废话不多说&#xff0c;Tiktok的开发者申请和…

企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群

前言&#xff1a;Apache Kafka是一个分布式流处理平台&#xff0c;由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点&#xff0c;适用于处理大量数据。 以下是Kafka的一些核心概念和特性&#xff1…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口&#xff0c;执行终端命令&#xff1a;sh 文件名.sh&#xff0c;出现如下错误&#xff1a; 解决办法&#xff1a;