当前位置: 首页 > article >正文

kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)

在这里插入图片描述


本章主要介绍kafka consumer的配置参数及性能调优的点,其kafka的从零开始的安装到生产者,消费者的详解介绍、源码及分析及原理解析请到博主kafka专栏 。

1.消费者Consumer配置参数

配置参数默认值含义
bootstrap.servers无(必填Kafka 集群的初始连接地址列表,格式为 host:port
key.deserializer无(必填Key 的反序列化类(如 org.apache.kafka.common.serialization.StringDeserializer)。
value.deserializer无(必填Value 的反序列化类。
group.id无(必填消费者所属的消费者组 ID。
client.id 空字符串客户端标识符,用于日志和监控。
client.dns.lookupdefaultDNS 解析方式:default(同时查 A 和 AAAA 记录),use_all_dns_ips(轮询所有 IP),resolve_canonical_bootstrap_servers_only(仅解析规范域名)。
group.instance.idnull消费者实例的唯一 ID(静态成员配置,减少再平衡)。
partition.assignment.strategyRangeAssignor分区分配策略,可选 RangeAssignorRoundRobinAssignorStickyAssignor 或自定义类。
request.timeout.ms30000(ms)配置Consumer等待请求响应的最长时间。
metadata.timeout.age.ms30000(ms)配置元数据的过期时间,如果元数据集在此限定时间内没有进行更新,则会被强制更新,即使没有任何分区的变化或新的borker加入。
session.timeout.ms45000(45秒)消费者与 Broker 的心跳超时时间,超时则视为离线触发再平衡。
heartbeat.interval.ms3000(3秒)消费者发送心跳的间隔时间(需小于 session.timeout.ms 的 1/3)。
max.poll.interval.ms300000(5分钟)两次 poll() 调用的最大间隔时间,超时则消费者被踢出组。
fetch.min.bytes1Broker 返回给消费者的最小数据量(字节),不足时等待 fetch.max.wait.ms
fetch.max.bytes52428800(50MB)单次拉取请求的最大数据量。
fetch.max.wait.ms500(0.5秒)Broker 等待满足 fetch.min.bytes 的最长时间。
max.partition.fetch.bytes1048576(1MB)每个分区返回的最大数据量。
max.poll.records500单次 poll() 返回的最大消息数。
auto.offset.resetlatest无偏移量或偏移量无效时的策略:earliest(最早)、latest(最新)、none(抛出异常)。
enable.auto.committrue是否自动提交偏移量(建议手动提交以避免数据丢失)。
auto.commit.interval.ms5000(5秒)自动提交偏移量的间隔时间(仅当 enable.auto.commit=true 生效)。
isolation.levelread_uncommitted消息读取隔离级别:read_committed(仅读已提交的事务消息);read_uncommitted(消费到HW处的位置)。
request.timeout.ms30000(30秒)请求 Broker 的超时时间(需大于 max.block.ms)。
retry.backoff.ms100失败重试前的等待时间。
reconnect.backoff.ms50断线重连的等待时间。
reconnect.backoff.max.ms1000断线重连的最大等待时间。
connections.max.idle.ms540000(9分钟)空闲连接关闭的超时时间。
security.protocolPLAINTEXT安全协议:PLAINTEXTSSLSASL_PLAINTEXTSASL_SSL
sasl.mechanismGSSAPISASL 机制,如 PLAIN、SCRAM-SHA-256 等。
ssl.keystore.locationnullSSL 密钥库路径(客户端双向认证时需配置)。
ssl.truststore.locationnullSSL 信任库路径。
interceptor.classes空列表消费者拦截器类列表(需实现 ConsumerInterceptor)。
allow.auto.create.topicstrue是否允许自动创建不存在的主题(可能导致意外主题生成)。
exclude.internal.topicstrue是否排除内部主题(如 __consumer_offsets)。
receive.buff.bytes65535(B)设置Socket接收消息缓冲区(SO_RECBUF)的大小,如果为1,则使用操作系统的默认是。
send.buff.bytes131072(B)设置Socket发送消息缓冲区(SO_RECBUF)的大小,如果为1,则使用操作系统的默认是。
metadata.max.age.ms300000(5分钟)强制刷新元数据的间隔时间。

2.性能优化

2.1.参数调优

  1. 调整拉取参数
  • max.poll.records 控制单次poll()拉取的最大消息数,默认500。若处理耗时较长,需减少此值以避免超时触发Rebalance。
  • max.poll.interval.ms 设置消费者处理消息的最大时间窗口。若处理逻辑复杂,需增大此值(默认300秒),防止因超时导致消费者被踢出组。
  • fetch.min.bytes & fetch.max.wait.ms 前者控制Broker返回数据的最小字节,后者为最长等待时间。适当增大可减少网络交互,提升吞吐量。
  1. 心跳与会话配置
  • session.timeout.ms 消费者与Broker的心跳超时时间(默认10秒),需确保业务处理时间加网络延迟小于此值10。
  • heartbeat.interval.ms 心跳发送间隔(默认3秒),建议设为session.timeout.ms的三分之一,避免频繁Rebalance
  1. 位移提交策略
  • 关闭自动提交enable.auto.commit=false),改为手动异步提交(commitAsync()),避免阻塞主线程并减少重复消费风险。
  • 若需更高可靠性,可结合同步提交(commitSync()),但需权衡吞吐量。

2.2.并行化与多线程优化

  1. 增加消费者实例

    同一消费者组内增加消费者数量,以匹配分区数,实现并行消费。注意分区数需大于等于消费者数量,否则部分消费者闲置。

    示例:若主题有10个分区,可启动10个消费者实例,每个处理1个分区。

  2. 解耦消费与处理逻辑

    使用多线程池分离消息拉取与处理: 主线程负责poll()拉取消息,工作线程池处理消息。需确保分区内消息顺序性(如按Key分发任务)。

    工具支持: 考虑使用 Kafka Parallel Consumer,支持按分区、Key或无序并发处理,同时维护顺序性。

  3. 异步处理与批量提交

    对拉取的消息异步处理,避免阻塞poll()循环。例如,将消息存入队列后立即开启下一轮拉取。

2.3.资源管理与配置优化

  1. 网络与IO优化
  • fetch.max.bytes 调大Broker返回数据的最大限制(默认50MB),提升单次拉取效率。

  • max.partition.fetch.bytes 调整单个分区的最大拉取字节数(默认1MB),避免频繁小批量请求。

  1. JVM与内存配置
  • 增大堆内存,避免频繁GC影响吞吐量。监控GC日志,优化垃圾回收策略。

  • 使用零拷贝技术(如sendfile)减少数据复制开销。

  1. 分区与负载均衡
  • 合理设计主题分区数,避免过多分区导致元数据管理开销。通常建议分区数为Broker数量的整数倍。

  • 选择合适的分区分配策略(如Range、RoundRobin或StickyAssignor),提升负载均衡性。

  1. 数据压缩与批处理
  • 启用消息压缩(如Snappy或GZIP),减少网络传输数据量。

  • 生产者端批量发送消息(linger.ms & batch.size),消费者端批量处理,减少IO次数。

  1. 顺序消费与并发平衡
  • 对需顺序消费的场景,按Key哈希到同一分区,保证分区内顺序;分区间可并行处理。

  • 使用单分区多线程消费时,需自行管理位移,确保线程安全。

相关文章:

kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)

本章主要介绍kafka consumer的配置参数及性能调优的点,其kafka的从零开始的安装到生产者,消费者的详解介绍、源码及分析及原理解析请到博主kafka专栏 。 1.消费者Consumer配置参数 配置参数默认值含义bootstrap.servers无(必填)…...

yarn、pnpm、npm

非常好,这样从“问题驱动 → 工具诞生 → 优化演进”的角度来讲,更清晰易懂。下面我按时间线和动机,把 npm → yarn → pnpm 的演变脉络讲清楚。 🧩 一、npm 为什么一开始不够好? 早期(npm v4 及之前&…...

JVM——Truffle:语言实现框架

引入 在编程语言的实现领域,传统的编译器和解释器设计往往面临着复杂性和性能优化的双重挑战。尤其是对于动态语言,解释器的效率问题一直是一个难以突破的瓶颈。而 Truffle 框架的出现,为这一难题提供了全新的解决方案。Truffle 是一个高性能…...

C++ STL vector容器详解:从原理到实践

引言 亲爱的小伙伴们,今天我要和大家分享一个C编程中的"神器"——vector容器!作为STL(标准模板库)中最常用的容器之一,vector就像是一个"超级数组",既有数组的高效随机访问特性&#…...

视频压制(Video Encoding/Compression)

视频压制(Video Encoding/Compression) 视频压制是指通过特定的算法和技术,将原始视频文件转换为更小体积或更适合传播的格式的过程。其核心目的是在尽量保持画质的前提下,减少视频的文件大小,或适配不同播放设备、网络环境的需求…...

【论文笔记】Transcoders Find Interpretable LLM Feature Circuits

Abstract 机制可解释性(mechanistic interpretability)的核心目标是路径分析(circuit analysis):在模型中找出与特定行为或能力对应的稀疏子图。 然而,MLP 子层使得在基于 Transformer 的语言模型中进行细粒度的路径分析变得困难。具体而言,…...

音视频融合中的语音分离技术实现

音视频融合中的语音分离技术实现 一、任务概述 语音分离是音频信号处理的核心任务,旨在从混合音频中分离出目标语音。音视频融合技术通过结合视觉信息(如嘴唇运动)显著提升分离效果。本方案将实现一个基于深度学习的音视频融合语音分离系统。 二、系统架构 #mermaid-svg-3…...

每天总结一个html标签——a标签

文章目录 一、定义与使用说明二、支持的属性三、支持的事件四、默认样式五、常见用法1. 文本链接2. 图片链接3. 导航栏 在前端开发中,a标签(锚点标签)是最常用的HTML标签之一,主要用于创建超链接,实现页面间的跳转或下…...

在Babylon.js中创建3D文字:简单而强大的方法

引言 在3D场景中添加文字是许多WebGL项目的常见需求。Babylon.js提供了多种创建3D文字的方法,其中使用TextBlock结合平面网格是一种简单而高效的方式。本文将介绍如何使用Babylon.js的GUI系统在3D空间中创建美观的文字效果。 方法概述 Babylon.js的GUI系统允许我…...

CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)

一、什么是 CSS 渐变? 渐变是网页设计中常用的视觉效果,指两种或多种颜色之间的平滑过渡。CSS 提供了强大的渐变功能,无需依赖图片即可创建复杂的色彩过渡效果,主要分为线性渐变和径向渐变两大类。 二、线性渐变(Line…...

初识Docker:容器化技术的入门指南

初识Docker:容器化技术的入门指南 一、Docker是什么:容器化技术的核心概念二、Docker的核心优势2.1 环境一致性2.2 高效部署与快速迭代2.3 资源利用率高 三、Docker的安装与基本使用3.1 安装Docker3.2 Docker基本概念3.3 第一个Docker容器体验 四、Docke…...

android binder(1)基本原理

一、IPC 进程间通信(IPC,Inter-Process Communication)机制,用于解决不同进程间的数据交互问题。 不同进程之间用户地址空间的变量和函数是不能相互访问的,但是不同进程的内核地址空间是相同和共享的,我们可…...

行业分析---小米汽车2025第一季度财报

1 背景 最近几年是新能源汽车的淘汰赛,前短时间比亚迪再次开始了降价,导致一片上市车企的股价大跌,足见车圈现在的敏感度。因此笔者会一直跟踪新势力车企的财报状况,对之前财报分析感兴趣的读者朋友可以参考以下博客:…...

边缘计算网关支撑医院供暖系统高效运维的本地化计算与边缘决策

一、项目背景 医院作为人员密集的特殊场所,对供暖系统的稳定性和高效性有着极高的要求。其供暖换热站传统的人工现场监控方式存在诸多弊端,如人员值守成本高、数据记录不及时不准确、故障发现和处理滞后、能耗难以有效监测和控制等,难以满足…...

GO环境配置

Go 语言环境安装指南(Windows 版) 以下是在 Windows 系统上安装 Go 语言环境的完整步骤: ​​准备工作​​ 操作系统要求:Windows 7 或更高版本(推荐 Windows 10/11)系统架构:64位&#xff08…...

`docker run`、`docker start`、`docker exec` 区别

🧠 先给你一句话理解: docker run ≈ docker create docker start docker exec(第一次) ✅ 三者的区别一览表 命令作用类比真实生活常用场景docker run创建 启动 执行命令(一次性)你买了一台新电脑&am…...

简单了解string类的特性及使用(C++)

string的特性 string类不属于STL,它属于标准库 但由于它具有数据结构的特性,所以从归类的角度,可以将string类归类到容器里面去 在C标准库中,std::string 是一个特化的类型,实际上是 std::basic_string 的别名。std…...

FastAPI+Pyomo实现线性回归解决饮食问题

之前在 FastAPI介绍-CSDN博客 中介绍过FastAPI,在 Pyomo中线性规划接口的使用-CSDN博客 中使用Pyomo解决饮食问题,这里将两者组合,即FastAPI在服务器端启动,通过Pyomo实现线性回归;客户端通过浏览器获取饮食的最优解。…...

16.FreeRTOS

目录 第1章 FreeRTOS 实时操作系统 1.1 认识实时操作系统 1.1.1 裸机的概念 1.1.2 操作系统的概念 1.2 操作系统的分类 1.3 常见的操作系统 1.4 认识实时操作系统 1.4.1 可剥夺型内核与不可剥夺型内核 1.4.2 嵌入式操作系统的作用 1.4.3 嵌入式操作系统的发展 1.4.4…...

Redis最佳实践——购物车优化详解

Redis在电商购物车高并发读写场景下的优化实践 一、购物车业务场景分析 典型操作特征 读/写比例 ≈ 8:2高峰QPS可达10万单用户最大商品数500操作类型:增删改查、全选/反选、数量修改 技术挑战 高并发下的数据一致性海量数据存储与快速访问实时价格计算与库存校验分…...

【计算机网络】传输层UDP协议

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹: 【计算机网络】应用层协议Http——构建Http服务服务器 🔖流水不争,争的是滔滔不…...

安全漏洞修复导致SpringBoot2.7与Springfox不兼容

项目基于 springboot2.5.2 实现的&#xff0c;用 springfox-swagger2 生成与前端对接的 API 文档&#xff1b;pom.xml 中依赖如下 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&l…...

从法律层面剖析危化品证书:两证一证背后的安全逻辑

《安全生产法》第 24 条明确规定&#xff0c;危化品单位主要负责人和安全管理人员 “必须考核合格方可上岗”。这并非仅仅是行政要求&#xff0c;而是通过法律来筑牢安全防线。在某危化品仓库爆炸事故中&#xff0c;由于负责人未持证&#xff0c;导致事故责任升级&#xff0c;企…...

C语言——获取变量所在地址(uint8和uint32的区别)

前言&#xff1a; 1.使用uint8 *的原因 在C语言中&#xff0c;获取或操作一个4字节地址&#xff08;指针&#xff09;时使用uint8_t*&#xff08;即unsigned char*&#xff09;而不是uint32_t*&#xff0c;主要基于以下关键原因&#xff1a; 1.1. 避免违反严格别名规则&…...

2 Studying《Effective STL》

目录 0 引言 1 容器 1. 慎重选择容器类型 3. 确保容器中的对象副本正确且高效 4. 调用empty()而不是检查size()是否为0 5. 区间成员函数优先于与之对应的单元素成员函数 7. 如果容器中包含了通过new创建的指针&#xff0c;切记析构前将指针delete掉 9. 慎重选择删除元素…...

深入理解复数加法与乘法:MATLAB演示

在学习复数的过程中&#xff0c;复数加法与乘法是两个非常基础且重要的概念。复数的加法和乘法操作与我们常见的实数运算有所不同&#xff0c;它们不仅涉及到数值的大小&#xff0c;还有方向和相位的变化。在这篇博客中&#xff0c;我们将通过MATLAB演示来帮助大家更好地理解复…...

【设计模式-3.6】结构型——桥接模式

说明&#xff1a;本文介绍结构型设计模式之一的桥接模式 定义 桥接模式&#xff08;Bridge Pattern&#xff09;又叫作桥梁模式、接口&#xff08;Interface&#xff09;模式或柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;指将抽象部分与具体实现部分分离&a…...

【前端】性能优化篇

长期更新&#xff0c;建议关注收藏点赞。 目录 性能优化具体指标监控工具/系统解决方案htmlcssjsvuereact包体积静态资源图片优化白屏首屏加载速度缓存优化网络优化web worker动画 面试题汇总怎么实现无限加载&#xff0c;如果有一亿条数据怎么优化 性能优化 本文仅是列出常见…...

【redis实战篇】第六天

摘要&#xff1a; 本文介绍了基于Redis的秒杀系统优化方案&#xff0c;主要包含两部分&#xff1a;1&#xff09;通过Lua脚本校验用户秒杀资格&#xff0c;结合Java异步处理订单提升性能&#xff1b;2&#xff09;使用Redis Stream实现消息队列处理订单。方案采用Lua脚本保证库…...

力扣题解654:最大二叉树

一、题目内容 题目要求根据一个不重复的整数数组 nums 构建最大二叉树。最大二叉树的构建规则如下&#xff1a; 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回由 nums 构…...