【kafka系列】消费者

目录

获取消息

1. 消费者获取消息的流程逻辑分析

阶段一:消费者初始化

阶段二:分区分配与重平衡(Rebalance)

阶段三:消息拉取与处理

阶段四:偏移量提交

核心设计思想

2. 流程

关键点总结

常见参数

一、核心必填参数

二、消费者组与重平衡参数

三、消息拉取与处理参数

四、偏移量(Offset)提交参数

五、错误处理与容错参数

六、高级配置


获取消息

1. 消费者获取消息的流程逻辑分析

Kafka 消费者通过 消费者组(Consumer Group) 协作消费消息,核心流程分为 初始化、分区分配、消息拉取、偏移量提交 四个阶段:


阶段一:消费者初始化
  1. 订阅 Topic
    • 消费者通过 consumer.subscribe() 订阅一个或多个 Topic。
    • 若消费者属于同一消费者组,组内消费者会均分 Topic 的分区
  1. 加入消费者组
    • 消费者启动时向 Broker 发送 JoinGroup 请求,加入消费者组。
    • 若消费者是组内第一个成员,会被选举为 Leader 消费者,负责分区分配。

阶段二:分区分配与重平衡(Rebalance)
  1. 分区分配策略
    • Leader 消费者根据策略(如 RangeAssignorRoundRobinAssignor)分配分区。
    • 分配结果通过 SyncGroup 请求同步给所有消费者。
  1. 重平衡触发条件
    • 消费者加入或离开组。
    • Topic 的分区数量变化。
    • 消费者心跳超时(默认 session.timeout.ms=45s)。

阶段三:消息拉取与处理
  1. 拉取消息
    • 消费者向分区的 Leader Broker 发送 FetchRequest,从当前偏移量(Offset)拉取消息。
    • 关键配置:
      • max.poll.records:单次拉取最大消息数(默认 500)。
      • fetch.min.bytes:最小拉取数据量(默认 1B,优先吞吐量时可调大)。
  1. 处理消息
    • 用户通过 ConsumerRecords 处理消息,需在 max.poll.interval.ms(默认 5分钟)内完成,否则触发重平衡。

阶段四:偏移量提交
  1. 提交 Offset
    • 自动提交:由消费者线程周期性提交(enable.auto.commit=true,默认 5秒)。
    • 手动提交:用户调用 commitSync()commitAsync() 精确控制。
    • Offset 存储在 Kafka 内部 Topic __consumer_offsets 中。

核心设计思想
  • 负载均衡:通过消费者组实现分区并行消费。
  • 容错性:心跳机制检测消费者存活,重平衡保障分区重新分配。
  • 至少一次语义:Offset 提交后移,确保消息至少被消费一次。

2. 流程


关键点总结

  1. 重平衡机制:保障消费者组动态扩展和容错。
  2. Offset 管理:通过提交 Offset 实现消费进度持久化。
  3. 消息拉取优化:通过 fetch.min.bytesmax.poll.records 平衡吞吐与延迟。
  4. 超时控制session.timeout.msmax.poll.interval.ms 防止消费者僵死

常见参数

一、核心必填参数

参数名

默认值

说明

bootstrap.servers

Kafka 集群地址列表(逗号分隔,如 host1:9092,host2:9092

)。

group.id

消费者组 ID(同一组内的消费者共享分区负载)。

key.deserializer

Key 的反序列化类(如 org.apache.kafka.common.serialization.StringDeserializer

)。

value.deserializer

Value 的反序列化类(同上)。


二、消费者组与重平衡参数

参数名

默认值

说明

session.timeout.ms

45000

(45秒)

消费者与 Broker 的心跳超时时间,超时触发重平衡。

heartbeat.interval.ms

3000

(3秒)

消费者发送心跳的间隔时间(需小于 session.timeout.ms

的 1/3)。

max.poll.interval.ms

300000

(5分钟)

两次 poll()

调用的最大间隔时间,超时触发重平衡。

partition.assignment.strategy

RangeAssignor

分区分配策略(如 RoundRobinAssignor

CooperativeStickyAssignor

)。


三、消息拉取与处理参数

参数名

默认值

说明

fetch.min.bytes

1

(1字节)

单次拉取的最小数据量(Broker 等待足够数据后返回,提升吞吐量)。

fetch.max.bytes

52428800

(50MB)

单次拉取的最大数据量(需小于 Broker 的 message.max.bytes

)。

max.poll.records

500

单次 poll()

返回的最大消息数(避免内存溢出)。

max.partition.fetch.bytes

1048576

(1MB)

单分区单次拉取的最大数据量。


四、偏移量(Offset)提交参数

参数名

默认值

说明

enable.auto.commit

true

是否自动提交 Offset(建议设为 false

,手动提交确保精确控制)。

auto.commit.interval.ms

5000

(5秒)

自动提交 Offset 的时间间隔(enable.auto.commit=true

时生效)。

auto.offset.reset

latest

无初始 Offset 时的策略:<br>- earliest

:从最早消息开始。<br>- latest

:从最新消息开始。


五、错误处理与容错参数

参数名

默认值

说明

isolation.level

read_uncommitted

事务消息隔离级别:<br>- read_committed

:仅读取已提交的事务消息。


六、高级配置

参数名

默认值

说明

client.id

客户端标识(用于监控和日志)。

connections.max.idle.ms

540000

(9分钟)

空闲连接超时时间(Broker 主动关闭超时连接)。

request.timeout.ms

30000

(30秒)

消费者等待 Broker 响应的超时时间。

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

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

相关文章

仿叮咚买菜鸿蒙原生APP

# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了&#xff0c;但有时候我们想要实现一些复杂的功能或者效果&#xff0c;在开发文档上查阅一些资料还是比较费时的&#xff0c;有可能还找不到我们想要的内容。而社会层面上分享…

Linux 进程控制(进程创建,进程等待)

目录 进程创建 fork函数初识 fork函数返回值 写时拷贝 fork常规用法 fork调用失败的原因 进程终止 进程退出场景 进程退出码 进程常见退出方法 exit函数 _exit函数 return退出 return、exit和_exit之间的区别与联系 进程异常退出 进程等待 进程等待的必要性 获…

ROS2下Rviz显示orbbec相机depth深度图

ROS2下Rviz显示orbbec相机depth深度图 视频讲解 ROS2下Rviz显示orbbec相机depth深度图 在《ROS2下编写orbbec相机C package并Rviz显示》的基础上&#xff0c;继续添加depth图像的获取及显示 rgb_publisher_ this->create_publisher<sensor_msgs::msg::Image>("…

算法——结合实例了解Minimax算法(极小化极大算法)

计算机科学中最有趣的事情之一就是编写一个人机博弈的程序。有大量的例子&#xff0c;最出名的是编写一个国际象棋的博弈机器。但不管是什么游戏&#xff0c;程序趋向于遵循一个被称为Minimax算法&#xff0c;伴随着各种各样的子算法在一块。本篇将简要介绍 minimax 算法&#…

场外个股期权下单后多久成交?场外个股期权对投资组合的影响

对普通老板们而言&#xff0c;它如同精密手术刀——用得好可精准优化投资组合&#xff0c;用不好则可能伤及本金。记住两个关键&#xff1a;一是永远用"亏得起的钱"参与&#xff0c;二是把合约条款当"药品说明书"逐字研读。 场外个股期权下单后多久成交&am…

SolidWorks C# How

目录 1.如何创建C#插件程序? 2.插件程序需要继承的类是什么? 3.如何创建C#.net WPF程序? 4.WPF界面程序参考 5.如何获取类的框图 6.如何安装XCAD.net的 nuget包 7.如何扩展命令到菜单栏和工具栏 8.如何添加自定义面板 9.如何对文档管理进行编程 10.XCAD 开发solid…

【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法

每天一篇Go语言干货&#xff0c;从核心到百万并发实战&#xff0c;快来关注魔法小匠&#xff0c;一起探索Go语言的无限可能&#xff01; 在 Go 语言中&#xff0c;Goroutine 是一种轻量级的并发执行单元&#xff0c;它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型&#xff08;14B、32B&#xff09;全过程与测试结果。 NPU&#xff1a;910B3 (65GB) * 8 &#xff08;910B 有三个版本 910B1、2、3&#xff09; 模型&#xff1a;DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

桥接模式 Bridge Pattern

桥接模式Abstraction 和 Implementor 的理解 在图书馆看到一本 通过电商项目真正实战《贯穿设计模式》。拿起来翻到了 桥接模式&#xff0c;感觉味道不对&#xff0c;和我印象中不一样。 感谢这位同学提供的源码 贯穿设计模式-适配器模式桥接模式_-CSDN博客GitHub - WeiXiao…

gitee SSH 公钥设置教程

Gitee 提供了基于 SSH 协议的 Git 服务,在使用 SSH 协议访问仓库仓库之前,需要先配置好账户 SSH 公钥。 1、生成秘钥 Windows 用户建议使用 Windows PowerShell 或者 Git Bash,在 命令提示符 下无 cat 和 ls 命令。 ssh-keygen -t ed25519 -C "Gitee SSH Key"中间…

jenkins war Windows安装

Windows安装Jenkins 需求1.下载jenkins.war2.编写快速运行脚本3.启动Jenkins4.Jenkins使用 需求 1.支持在Windows下便捷运行Jenkins&#xff1b; 2.支持自定义启动参数&#xff1b; 3.有快速运行的脚步样板。 1.下载jenkins.war Jenkins下载地址&#xff1a;https://get.j…

string类详解(上)

文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …

[数据结构]红黑树,详细图解插入

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入&#xff08;步骤&#xff09; 1.为什么新插入的节点必须给红色&#xff1f; 2、插入红色节点后&#xff0c;判定红黑树性质是否被破坏 五、插入出现连续红节点情况分析图解&#xff08;看…

java练习(28)

ps&#xff1a;练习来自力扣 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 // 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.va…

Java并发编程6--重排序

重排序是指 编译 器和 处 理器 为 了 优 化程序性能而 对 指令序列 进 行重新排序的一种手段。 1.数据依赖性 如果两个操作 访问 同一个 变 量&#xff0c;且 这 两个操作中有一个 为 写操作&#xff0c;此 时这 两个操作之 间就存在数据 依赖性。 数据依赖的类型 上面 3 种情…

ElasticSearch映射分词

目录 弃用Type why 映射 查询 mapping of index 创建 index with mapping 添加 field with mapping 数据迁移 1.新建 一个 index with correct mapping 2.数据迁移 reindex data into that index 分词 POST _analyze 自定义词库 ik分词器 circuit_breaking_excep…

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…

deepseek多列数据对比,联想到excel的高级筛选功能

目录 1 业务背景 ​2 deepseek提示词输入 ​3 联想分析 4 EXCEL高级搜索 1 业务背景 系统上线的时候经常会遇到一个问题&#xff0c;系统导入的数据和线下的EXCEL数据是否一致&#xff0c;如果不一致&#xff0c;如何快速找到差异值&#xff0c;原来脑海第一反应就是使用公…

俄罗斯方块游戏完整代码示例

以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能&#xff0c;并且代码整合在单个文件中&#xff0c;无需任何外部依赖&#xff0c;可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先&#xff0c;确保你已经安装了…

java后端开发day16--字符串(二)

&#xff08;以下内容全部来自上述课程&#xff09; 1.StringBuilder 因为StringBuilder是Java已经写好的类。 java在底层对他进行了一些特殊处理。 打印对象不是地址值而是属性值。 1.概述 StringBuilder可以看成是一个容器&#xff0c;创建之后里面的内容是可变的。 作用…