目录

    • 什么是消费者组?
    • 消费者组如何工作?
    • 位移(Offset)
    • 消费者组的核心机制:重平衡(Rebalance)
      • 触发条件
      • 重平衡影响

在消息队列(如 Kafka)的世界里,消费者组是实现高效消息消费、负载均衡和高可用的核心机制。它并非单个消费者,而是由多个消费者组成的协同群体,能共同处理主题中的消息,既避免重复消费,又能应对流量波动。

什么是消费者组?

消费者组是指共同订阅同一个主题(Topic) 的多个消费者的集合。每个消费者组都有一个唯一的标识(Group ID),组内的消费者通过协作分工,共同消费主题中的消息。
其核心特点包括:

  1. 组内消费者共享消费进度,由消息队列的协调器(Coordinator) 统一管理。
  2. 主题中的每个分区(Partition) 只能被同一消费者组内的一个消费者消费(避免重复消费)。
  3. 消费者组之间相互独立,不同组可以同时消费同一主题的消息(实现多场景消费)。

理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数。

Kafka 仅仅使用 Consumer Group 这一种机制,却同时实现了传统消息引擎系统的两大模型:如果所有实例都属于同一个 Group,那么它实现的就是消息队列模型;如果所有实例分别属于不同的 Group,那么它实现的就是发布 / 订阅模型。

消费者组如何工作?

消费者组的运行逻辑围绕 “分区分配” 和 “消费进度同步” 展开,具体流程如下:

  1. 加入组:新消费者启动时,会向协调器发送 “加入组” 请求,协调器收集组内所有消费者信息。
  2. 分配分区:协调器选择一个消费者作为 “领导者(Leader)”,由其制定分区分配方案(如按范围分配、轮询分配等),确保每个分区只分配给组内一个消费者。
  3. 消费消息:消费者按分配到的分区消费消息,并定期向协调器提交消费偏移量(Offset)(记录已消费到的位置)。
  4. 重平衡(Rebalance):当组内消费者数量变化(新增 / 下线)、主题分区数量变化时,协调器会触发重平衡,重新分配分区,保证消费继续。

位移(Offset)

消费者在消费的过程中需要记录自己消费了多少数据,即消费位置信息。在 Kafka 中,这个位置信息有个专门的术语:位移(Offset)。

在新版本的 Consumer Group 中,Kafka 社区重新设计了 Consumer Group 的位移管理方式,采用了将位移保存在 Kafka 内部主题的方法。这个内部主题就是让人既爱又恨的 __consumer_offsets。

将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。可以这么说,__consumer_offsets 的主要作用是保存 Kafka 消费者的位移信息。

消费者组的核心机制:重平衡(Rebalance)

Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,所有 Consumer 实例共同参与,在协调者组件的帮助下,完成订阅主题分区的分配。但是,在整个过程中,所有实例都不能消费任何消息,因此它对 Consumer 的 TPS 影响很大。

触发条件

重平衡是消费者组应对变化的关键机制,但也可能带来问题,需要重点理解:

  • 触发条件:
    • 消费者组内新增或移除消费者(如节点宕机、新实例启动)。
    • 订阅主题的分区数发生变更。Kafka 当前只能允许增加一个主题的分区数。当分区数增加时,就会触发订阅该主题的所有 Group 开启 Rebalance。
    • 订阅主题数发生变更。Consumer Group 可以使用正则表达式的方式订阅主题,比如 consumer.subscribe(Pattern.compile(“t.*c”)) 就表明该 Group 订阅所有以字母 t 开头、字母 c 结尾的主题。在 Consumer Group 的运行过程中,你新创建了一个满足这样条件的主题,那么该 Group 就会发生 Rebalance。

假设目前某个 Consumer Group 下有两个 Consumer,比如 A 和 B,当第三个成员 C 加入时,Kafka 会触发 Rebalance,并根据默认的分配策略重新为 A、B 和 C 分配分区,如下图所示
在这里插入图片描述

重平衡影响

重平衡期间,所有消费者会暂停消费,等待 Rebalance 完成。导致消息处理延迟。
频繁重平衡会严重影响消费效率,需尽量避免。

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

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

相关文章

Mysql-UDF提权

UDF(User Defined Function) 是用户自定义函数,是 MySQL 支持的一种机制,可以通过 C语言写动态链接库(.so / .dll),然后让 MySQL 调用这些函数,调用方式与一般系统自带的函数相同&am…

车规级CANFD芯片在汽车车身控制方案中的应用解析

摘要:随着汽车电子技术的不断发展,汽车车身控制系统对信息传输的效率、可靠性及抗干扰能力等要求日益提高。车规级CANFD芯片作为一种先进的通信芯片,凭借其高速率、高可靠性以及强大的抗干扰能力,成为汽车车身控制系统中的关键组件…

docker desktop 访问 https://registry-1.docker.io/v2/ 报错问题解决

win11 docker desktop 配置国内镜像加速器 1、win11管理员运行powershell notepad "$env:APPDATA\Docker\config.json"2、配置以下内容保存 {"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn&qu…

LLaMA-Factory微调教程1:LLaMA-Factory安装及使用

文章目录 环境搭建 LLaMA-Factory 安装教程 模型大小选择 环境搭建 Windows系统 RTX 4060 Ti(16G显存) python 3.10 cuda=12.6 cudnn torch== 2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio== 2.7.1+cu126 PS C:\Users\18098> nvidia-smi Tue Jul 22 01:52:19 2025 +…

Oracle数据库索引性能机制深度解析:从数据结构到企业实践的系统性知识体系

一、数据检索的根本问题与索引产生的必然性 1.1、数据检索的本质挑战 在理解Oracle索引的性能优势之前,必须回到数据检索的根本问题。当面对海量数据时,传统的线性搜索(Sequential Search)面临着不可调和的性能瓶颈。这种瓶颈源于…

c#面向对象程序设计

一、面向对象与面向过程的核心区别(概念铺垫)代码背景开篇对比了两种编程范式:面向过程(PP):按步骤分解问题(如 “输入长→输入宽→计算面积”);面向对象(OOP…

Kylin V10 4070安装nvidia驱动+CUDA+docker安装

目录 1.系统版本信息 2.安装nvidia驱动 3.CUDA安装 4.docker离线安装 1.系统版本信息 查看一下系统版本,命令为: cat /etc/kylin-release2.安装nvidia驱动 编辑/usr/lib/modprobe.d/dist-blacklist.conf文件 blacklist nvidiafb加#号注释掉 添加…

首家!数巅AskBI通过中国信通院数据分析智能体专项测试

近日,在中国信息通信研究院组织的数据分析智能体(Data Agent)专项测试中,数巅生成式分析智能体AskBI顺利完成专项测试的全部内容。《数据智能体技术要求》标准及测试简介中国信通院云计算与大数据研究所依托中国通信标准化协会大数…

一些Avalonia与WPF内容的对应关系和不同用法

UIElement、FrameworkElement和ControlWPFAvaloniaUIElementControlFrameworkElementControlControlTemplatedControl在 WPF 中,通过继承 Control 类来创建新的模板控件,而在 Avalonia 中,从 TemplatedControl 继承。在 WPF 中,通…

【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能

模拟react中的hooks方法,实现自定义的hooks来封装我们需要重复使用的组件,来优化代码。这种hooks也是利用了react的原生hooks来实现我们需要的特定业务,可以返回任何我们需要的值,也可以不返回值,作为一个副作用方法使…

Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录

1. 迁移动机与技术选型1.1 CSR 架构的局限性 基于 Vue 3 和 Vite 构建的客户端渲染 (CSR) 单页应用 (SPA) 提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化 (SEO):初始 HTML 响应仅包含一个根 div 元素,实际内容由 J…

FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验

在信息爆炸的时代,企业如何让知识“活起来”?传统文档库和搜索框早已无法满足需求。FastGPT——基于RAG技术的开源知识库系统,正重新定义企业级知识管理! 一、FastGPT是什么? FastGPT是企业构建专属知识库的智能核心…

人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用

一、Maxwell模型及其在拟合肌腱特性中的应用Maxwell模型是经典的粘弹性力学模型之一,由弹簧(弹性元件)和阻尼器(粘性元件)串联组成。其在生物力学领域的应用主要聚焦于材料的动态响应(如应力松弛和蠕变&…

「iOS」——KVC

源码学习iOS底层学习:KVC 底层原理一、核心 API 与功能特性**常用方法**KVC 设值 底层原理KVC 取值 底层原理自定义KVC设值取值**特性:无隐私访问****原理**四、多元应用场景1. **动态数据处理**(1)字典转模型(2&#…

【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系

在 Lucene 中,“叶子段”(LeafReaderContext)和 “segment”(物理段)在 Lucene 语境下,LeafReaderContext ≈ segment 的运行时只读视图。概念 所在层次 含义 是否一一对应 segment 物理存储层 Lucene 索引…

Python进阶第三方库之Matplotlib

应用Matplotlib的基本功能实现图形显示 应用Matplotlib实现多图显示 应用Matplotlib实现不同画图种类 1、什么是Matplotlib是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib可视化是在整个数据挖掘的关键辅助工具,可以…

【深度解析】从AWS re_Invent 2025看云原生技术发展趋势

2025 年 6 月 28 日 在科技浪潮持续翻涌的当下,云原生技术已然成为推动企业数字化转型与创新发展的关键力量。而 AWS re:Invent 作为云计算领域一年一度的盛会,向来是展示前沿技术、洞察行业趋势的重要舞台。在今年的 AWS re:Invent 2025 大会上&#xf…

高亮标题里的某个关键字正则表达式

使用v-html渲染&#xff0c;写一个高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>这里传入的name带了文件拓展名&#xff0c;所以先把名称从文件名里提取出来// 高亮标题颜色highlightKeywords(name, ke…

视频编解码中colorspace,color_range,color_trc,color_primaries,是做什么用的,是谁来指定的

在视频编解码中&#xff0c;colorspace&#xff08;色彩空间&#xff09;、color_range&#xff08;色域范围&#xff09;、color_trc&#xff08;传输特性&#xff09;、color_primaries&#xff08;原色&#xff09;是一组色彩相关元数据&#xff0c;它们共同决定了视频的颜色…

【QT】 Qt背景介绍与概述

文章目录&#x1f4dd;Qt背景介绍&#x1f320; 什么是Qt&#x1f309;Qt的发展史&#x1f320; Qt⽀持的平台&#x1f309; Qt版本&#x1f309; Qt的优点&#x1f309; Qt的应⽤场景&#x1f320; Qt的成功案例&#x1f320; Qt的发展前景及就业分析&#x1f6a9;总结&#x…