kafka消费者出现频繁Rebalance
kafka消费者在正常使用过程中,突然出现了不消费消息的情况,项目里是使用了多个消费者消费不同数据,按理不会相互影响,看日志,发现消费者出现了频繁的Rebalance。
Rebalance的触发条件
- 组成员发生变更(新consumer加入组、已有consumer主动离开组或已有consumer崩溃)
- 订阅主题数发生变更——这当然是可能的,如果你使用了正则表达式的方式进行订阅,那么新建的匹配正则表达式的topic就会触发rebalance
- 订阅主题的分区数发生变更
经过查找资料和排除发现,我们的项目里多个消费者使用了相同的消费者组,也就是同个消费者组里的多个消费者分别消费不同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的影响
- 数据重复消费:消费过的数据由于提交offset任务也会失败,在partition被分配给其他消费者的时候,会造成重复消费,数据重复且增加集群压力
- Rebalance扩散到整个ConsumerGroup的所有消费者,因为一个消费者的退出,导致整个Group进行了Rebalance,并在一个比较慢的时间内达到稳定状态,影响面较大
- 频繁的Rebalance反而降低了消息的消费速度,大部分时间都在重复消费和Rebalance
- 数据不能及时消费,会累积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
相关文章:
kafka消费者出现频繁Rebalance
kafka消费者在正常使用过程中,突然出现了不消费消息的情况,项目里是使用了多个消费者消费不同数据,按理不会相互影响,看日志,发现消费者出现了频繁的Rebalance。 Rebalance的触发条件 组成员发生变更(新consumer加入组…...
rk3399开发环境使用Android 10初体验蓝牙功能
版本 日期 作者 变更表述 1.0 2024/11/10 于忠军 文档创建 零. 前言 由于Bluedroid的介绍文档有限,以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等),加上需要掌握的语言包括Java/C/C等࿰…...
ASP.NET 部署到IIS,访问其它服务器的共享文件 密码设定
asp.net 修改上面的 IIS需要在 配置文件 添加如下内容 》》》web.config <system.web><!--<identity impersonate"true"/>--><identity impersonate"true" userName"您的账号" password"您的密码" /><co…...
将自定义函数添加到MATLAB搜索路径的方法
在MATLAB中,将自定义函数添加到搜索路径可以确保你能够方便地调用这些函数,而不必每次都指定完整路径。本文介绍几种将自定义函数添加到MATLAB搜索路径的方法 文章目录 使用 MATLAB 的路径管理工具使用 addpath 命令在启动时自动添加路径使用 genpath 命…...
云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测
背景 如果你要为应用程序构建规范或用户故事,那么务必先把应用程序每个组件的监控指标考虑进来,千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当…...
什么是MySQL,有什么特点
什么是 MySQL? MySQL 是一个关系型数据库管理系统(RDBMS),由瑞典公司 MySQL AB 开发,后来被 Sun Microsystems 收购,最终成为 Oracle Corporation 的一部分。MySQL 是最流行的关系型数据库之一,…...
初始化mysql5.7
-- 环境变量 MYSQL_HOME %MYSQL_HOME%\bin -- 新增配置文件 my.ini [mysqld] port 3306 basedir D:/develop/MySQL/mysql-5.7.44-winx64 datadir D:/develop/MySQL/mysql-5.7.44-winx64/data max_connections 200character-set-serverutf8 default-storage-engineINNODB …...
C# 字典应用
using System;using System.Collections.Generic;class Program{static void Main(){// 创建一个字典,键是字符串类型,值是整数类型Dictionary<string, int> studentScores new Dictionary<string, int>();// 向字典中添加键值对// 原理&am…...
CDH安装与配置及相关大数据组件实践
CDH安装与配置及相关大数据组件实践 一、CDH 介绍 CDH(Cloudera’s Distribution Including Apache Hadoop)是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoo…...
fastapi 调用ollama之下的sqlcoder模式进行对话操作数据库
from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel import ollama import mysql.connector from mysql.connector.cursor import MySQLCursor import jsonapp FastAPI()# 数据库连接配置 DB_CONFIG {"database": "web&quo…...
YOLO系列基础(六)YOLOv1原理详解,清晰明了!
系列文章地址 YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客 YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客 YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客 YOLO系列基础…...
LeetCode100之环形链表(141)--Java
1.问题描述 给你一个链表的头节点 head ,判断链表中是否有环 示例1 输入:head [3,2,0,-4], pos 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点 示例2 输入:head [1,2], pos 0 输出…...
【ict基础软件赛道】真题-50%openEuler
以下哪个命令可用于查看当前shell的后台任务在openeuler中哪个符号用于创建后台执行进程在openeuler中使用哪个命令查看软件包的详细信息在openeuler中如果想要查看本机的主机名可以使用下面哪个命令在openeuler中使用的包管理器是在openeuler系统中要配置防火墙以允许ssh连接应…...
<AI 学习> 下载 Stable Diffusions via Windows OS
注意: 不能使用 网络路径 不再支持 HTTPS 登录,需要 Token 1. 获得合法的授权 Stability AI License — Stability AI 上面的链接打开,去申请 许可 2. 拥有 HuggingFace 账号 注册:https://huggingface.co/ 3. 配置 Tok…...
计算机图形学在游戏开发中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 引言 计算机图形学的基本概念…...
【CubeMX-HAL库】STM32H743II——SDRAM配置所遇问题
推荐的博客和视频: 1、【CubeMX-HAL库】STM32H743—FMC配置SDRAM_stm32h743 sdram 速度-CSDN博客 2、【【STM32CubeMX教程】STM32全外设原理、配置和常用HAL、LL库API使用详解】 3、在百度网盘里有STM32H743的例程:【通过网盘分享的文件:S…...
mac上使用docker搭建gitlab
在 Mac 上搭建 GitLab 可以使用 Docker 来简化安装过程 一、安装详细步骤 1. 安装 Docker 如果你尚未安装 Docker,可以通过以下步骤安装: 下载并安装 Docker Desktop for Mac.安装完成后,启动 Docker Desktop,确保 Docker 运行…...
二维数组操作
代码结构 main.c #include <stdio.h> #include <stdlib.h>#define LEN 100int main() {//通过指针引用多维数组# if 1//定义多维数组int a[3][5] {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};int row sizeof(a) /sizeof(a[0]);int colum sizeof(a[0]) / sizeof(a[0…...
uniapp设置tabBar高斯模糊并设置tabBar高度占位
1、设置tabBar高斯模糊 2、设置tabBar高度占位 (1)需要先在App.vue中获取一下 uni.getSystemInfoSync().windowBottom; //返回值是tabBar的高度(2)在app.vue中定义一个全局样式 3、在需要的页面底部,加上一个view&…...
上市公司代理成本数据大全(第一类和第二类代理成本均有)1991-2023年
一、计算方式: (1) 第一类代理成本 AC1:经营费用率,参考顶刊《管理世界》李文贵和余明桂(2015)老师的研究构建代理成本 AC2:管理费用率,参考C刊《经济管理》彭雅哲和汪昌云(2021) 老师的研究构建代理成本 AC3:资产周转…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
