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

Kafka 典型问题与排查以及相关优化

Kafka 是一个高吞吐量的分布式消息系统,但在实际应用中,用户经常会遇到一些性能问题和消息堆积的问题。本文将介绍 Kafka 中一些典型问题的原因和排查方法,帮助用户解决问题并优化 Kafka 集群的性能。

一、Topic 消息发送慢,并发性能低

问题描述:

某个或某几个 Topic 的消息并发发送性能低,具体表现为 Producer 的平均请求延迟大,平均生产吞吐量低。

可能原因:

  1. 网络带宽不足,导致 IO 等待时间长。
  2. 消息未压缩,导致网络流量超负荷。
  3. 消息未批量发送或批量阈值配置不当,导致发送速率慢。
  4. Topic 分区数量不足,导致 Broker 接收消息积压。
  5. Broker 磁盘性能低,导致磁盘同步慢。
  6. Broker 分区总量过多,导致碎片化,磁盘读写过载。

排查方法: 

1、确认网络带宽:

检查 Producer 的平均 IO 等待时间指标,判断 Producer 到 Broker 之间的网络带宽是否满足业务的流量要求。

在一个节点上作为服务器启动 iperf
iperf -s在另一个节点上作为客户端测试网络带宽
iperf -c 192.168.10.21

2、确认消息压缩:

检查 Producer 的平均压缩率指标,确保压缩率符合预期。

在 Producer 配置中启用消息压缩
compression.type=gzip

3、消息未批量发送或批量阈值配置不当

 检查 Producer 的批量发送配置 batch.sizelinger.ms

操作命令: 查看 Producer 配置文件或代码,确认 batch.sizelinger.ms 设置。

优化方法: 调整 Producer 配置,增大批量发送大小和延迟时间:

batch.size=32768
linger.ms=10

4、增加 Topic 分区:

使用 Kafka 提供的命令行工具查看 Topic 分区数量

kafka-topics.sh --describe --topic <your_topic> --zookeeper <zookeeper_host>:2181

优化方法增加 Topic 的分区数量以提高并发处理能力:

kafka-topics.sh --alter --topic <your_topic> --partitions 10 --zookeeper <zookeeper_host>:2181

5、检查磁盘 IO 使用率:

确认 Broker 磁盘 IO 使用率是否在安全范围内,若使用率较高则考虑扩容 Broker 或增加 Topic 分区数。

 使用 iostatdstat 命令查看磁盘 IO 使用率:

iostat -x 1 10
dstat -d 1

优化方法

  • 升级磁盘为 SSD,提高磁盘性能。
  • 优化磁盘配置,确保磁盘 IO 性能最佳。

6、检查分区总量:

查看集群的总分区数和单个 Broker 的分区数量,确保在规划的容量范围内。

使用 Kafka 提供的命令行工具查看集群分区情况: 

kafka-topics.sh --describe --zookeeper <zookeeper_host>:2181

优化方法

  • 水平扩展 Broker,增加 Broker 数量以分散分区负载。
  • 通过增加 Broker 节点来均衡分区分布,减少单个 Broker 的分区数量。

二、Topic 消息堆积

问题描述:
某个或某几个 Topic 的消息堆积持续增加,具体表现为 Group 消费延迟数量持续增加。

可能原因:

  1. Producer 生产消息流量增大。
  2. Consumer 由于业务变化导致消费延迟增加。
  3. Consumer 数量不足。
  4. Consumer 数量频繁变化,导致 Group 不断做再平衡(Rebalance)。
  5. Broker 未收到 Consumer 的消息确认消息。

排查方法:

确认生产量:

检查 Producer 的消息生产量指标,判断是否明显增加。

确认消费量:

检查 Consumer 的消息流量指标,判断是否明显下降

检查 Consumer 数量:

通过 Kafka Broker 提供的命令,确认 Topic 对应的 Consumer 数量与实际的 Consumer 数量是否一致。如果不一致,说明某些 Consumer 未正确连接到 Broker,需要排查 Consumer 是否正常运行。

kafka-consumer-groups.sh --describe --group your_consumer_group --bootstrap-server broker_host:9092

观察 Consumer 变化:

观察 Consumer 的数量是否频繁变化而触发再平衡。由于网络或其他原因,可能导致 Consumer 与 Broker 之间的连接不稳定,Consumer 能持续消费消息,但 Broker 始终认为消息未确认,导致消费位点不变。此时可能需要确认 Consumer 与 Broker 之间的网络稳定性,甚至重启 Consumer。

三、优化 Kafka 生产性能

优化方法:

1、增大 Producer 发送消息的批量大小(batch.size)和批量发送等待时间(linger.ms)。

batch.size=32768
linger.ms=10

2、启用压缩

使用压缩算法减少网络带宽占用。

compression.type=gzip

3、增加分区数:

通过增加 Topic 的分区数,提高并发写入能力。

4、调整 Broker 配置

优化 Broker 的磁盘配置和 IO 设置,例如调整 log.segment.bytes 和 log.retention.hours。

四、优化 Kafka 消费性能

优化方法:

1、增大消费并发:

增加 Consumer 数量和分区数,提升并发消费能力。

2、优化消费逻辑:

确保 Consumer 的业务逻辑高效,减少单个消息处理时间。

3、平衡负载:

确保 Consumer Group 的每个 Consumer 都能均匀分配到分区。

五、Kafka 集群扩展与维护

扩展方法:

1、水平扩展 Broker:

增加 Broker 数量,均衡负载,提高集群容量。

(1)安装新Broker:

在新的服务器上安装Kafka,步骤与之前的安装步骤相同,确保Java已经安装。

(2)配置新 Broker:

编辑server.properties文件,设置新的broker.idlog.dirs,确保 zookeeper.connect指向现有的 Zookeeper集群。

broker.id=3  # 新的 Broker ID
listeners=PLAINTEXT://:9092
log.dirs=/data/kafka-logs
zookeeper.connect=192.168.10.20:2181,192.168.10.21:2181,192.168.10.22:2181
num.partitions=3
default.replication.factor=3

(3)启动新Broker

sudo su - kafka
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

 (4)重新分配分区:

使用Kafka自带的工具将现有分区重新分配到新 Broker 上。

生成当前分区副本分配:

kafka-reassign-partitions.sh --zookeeper 192.168.10.20:2181 --generate --topics-to-move-json-file topics.json --broker-list "0,1,2,3"

topics.json内容:

{"version": 1,"topics": [{"topic": "test-topic"}]
}

 执行分区重新分配:

kafka-reassign-partitions.sh --zookeeper 192.168.10.20:2181 --execute --reassignment-json-file reassignment.json

2、动态扩展 Topic:

根据流量需求动态调整 Topic 的分区数。

 增加 Topic 的分区数量

kafka-topics.sh --alter --topic test-topic --partitions 10 --zookeeper 192.168.10.20:2181

维护方法:

定期监控:

使用 Kafka 自带的工具或第三方监控工具(如 Prometheus + Grafana)定期监控集群状态。

检查集群状态: 

kafka-broker-api-versions.sh --bootstrap-server 192.168.10.20:9092

检查 Topic 信息: 

kafka-topics.sh --describe --topic test-topic --zookeeper 192.168.10.20:2181

定期优化:

定期检查并优化配置,清理过期数据,保持集群健康运行。

优化server.properties中的配置,根据实际使用情况调整参数,如调整日志段大小和保留时间:

log.segment.bytes=1073741824  # 1 GB
log.retention.hours=168       # 7 days

清理过期数据

kafka-delete-records.sh --bootstrap-server 192.168.10.20:9092 --offset-json-file offsets.json

相关文章:

Kafka 典型问题与排查以及相关优化

Kafka 是一个高吞吐量的分布式消息系统&#xff0c;但在实际应用中&#xff0c;用户经常会遇到一些性能问题和消息堆积的问题。本文将介绍 Kafka 中一些典型问题的原因和排查方法&#xff0c;帮助用户解决问题并优化 Kafka 集群的性能。 一、Topic 消息发送慢&#xff0c;并发性…...

C# 策略模式(Strategy Pattern)

策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。 // 策略接口 public interface IStrategy { void Execute(); } // 具体策略A public class ConcreteStrategyA : IStra…...

【初阶数据结构】1.算法复杂度

文章目录 1.数据结构前言1.1 数据结构1.2 算法1.3 如何学好数据结构和算法 2.算法效率2.1 复杂度的概念2.2 复杂度的重要性 3.时间复杂度3.1 大O的渐进表示法3.2 时间复杂度计算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例53.2.6 示例63.2.7 示例7 4.空间复杂…...

(图文详解)小程序AppID申请以及在Hbuilderx中运行

今天小编给大家带来了如何去申请APPID&#xff0c;如果你是小程序的开发者&#xff0c;就必须要这个id。 申请步骤 到小程序注册页面&#xff0c;注册一个小程序账号 微信公众平台 填完信息后提交注册 会在邮箱收到 链接激活账号 确认。邮箱打开链接后&#xff0c;会输入实…...

科技创新引领水利行业升级:深入分析智慧水利解决方案的核心价值,展望其在未来水资源管理中的重要地位与作用

目录 引言 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心价值 1. 精准监测与预警 2. 优化资源配置 3. 智能运维管理 4. 公众参与与决策支持 三、智慧水利在未来水资源管理中的重要地位与作用 1. 推动水利行业转型升级 2. 保障国家水安全 3. 促进生态文明建设…...

ExcelVBA运用Excel的【条件格式】(三)

ExcelVBA运用Excel的【条件格式】&#xff08;三&#xff09;前面知识点回顾1. 访问 FormatConditions 集合 Range.FormatConditions2. 添加条件格式 FormatConditions.Add 方法语法表达式。添加 (类型、 运算符、 Expression1、 Expression2)其中 TextOperator:***&am…...

coco数据集格式计算mAP的python脚本

目录 背景说明COCOeval 计算mAPtxt文件转换为coco json 格式自定义数据集标注 背景说明 在完成YOLOv5模型移植&#xff0c;运行在板端后&#xff0c;通常需要衡量板端运行的mAP。 一般需要两个步骤 步骤一&#xff1a;在板端批量运行得到目标检测结果&#xff0c;可保存为yol…...

Linux学习——Linux中无法使用ifconfg命令

Linux学习——Linux中无法使用ifconfg命令&#xff1f; &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅…...

二分查找3

1. 有序数组中的单一元素&#xff08;540&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 二分查找解题关键就在于去找到数组的二段性&#xff0c;这里数组的二段性是从单个数字a开始出现然后分隔出来的&#xff0c;如果mid落入左半部分那么当mid为偶数时nums[mid1]…...

从零开始学习嵌入式----C语言框架梳理与后期规划

目录 一、环境搭建. 二、见解 三、C语言框架梳理 四、嵌入式学习规划流程图&#xff08;学习顺序可能有变&#xff09; 一、环境搭建. C语言是一门编程语言&#xff0c;在学习的时候要准备好环境。我个人比较喜欢用VS,具体怎么安装请百度。学习C语言的时候&#xff0c;切忌…...

ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验

摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗&#xff1f; 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑&#xff0c;并提供完整的项目代码和电路图&#xff0c;即使是 Ardu…...

传知代码-图神经网络长对话理解(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 情感识别是人类对话理解的关键任务。随着多模态数据的概念&#xff0c;如语言、声音和面部表情&#xff0c;任务变得更加具有挑战性。作为典型解决方案&#xff0c;利用全局和局部上下文信息来预测对话中每…...

部署前端项目

常见部署方式有&#xff1a;静态托管服务、服务器部署 1. 静态托管服务 使用平台部署代码&#xff0c;比如 GitHub。 | 创建一个仓库&#xff0c;仓库名一般是 yourGithubName.github.io。 | 将打包后的静态文件文件上传到仓库。 | 在“Settings”&#xff08;选项&#xff0…...

使用POI实现Excel文件的读取(超详细)

目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 ​编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…...

Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因

Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因 一、背景二、查找数据丢失流程三、数据丢失原因四、解决方法一、背景 反馈mysql数据库中某张表的数据没有同步到hive中,现在需要排查定位下原因数据丢失一般常见需求排查的方向: 数据是否采集到hdfs上采集…...

爆破器材期刊

《爆破器材》简介   《爆破器材》自1958年创刊以来&#xff0c;深受广大读者喜爱&#xff0c;是中国兵工学会主办的中央级技术刊物&#xff0c;在国内外公开发行&#xff0c;近几年已发行到10个国家和地区。《爆破器材》杂志被美国著名检索机构《化学文摘》&#xff08;CA&a…...

Nginx Websocket 协议配置支持

前后分离的 Web 架构应用&#xff0c;在开发环境启动是可以直接连接支持 websocket 协议&#xff0c;因为没有中间件做转发处理。 当我们对前端进行编译后&#xff0c;通过 nginx 反向代理访问时&#xff0c;需要在nginx 配置文件中增加一些特定的头信息&#xff0c;让服务端识…...

【生成式对抗网络】GANs在数据生成、艺术创作,以及在增强现实和虚拟现实中的应用

一、GANs在数据生成中的应用 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;在数据生成领域具有显著的应用价值。GANs通过生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;两个相互竞争的神经网络&#x…...

大模型面试(三)

这次是某家公司的一个电话面试&#xff0c;问的过程还比较简单直接。 问&#xff1a;我们在大模型开源项目的应用上遇到了什么困难&#xff1f; 这个。。有两个困难&#xff0c;一个是RAG的优化&#xff0c;一开始RAG是比较慢的&#xff0c;而且召回率不高&#xff1b; 后来…...

pycharm中快捷键汇总

Pycarm指令汇总 Ctrl鼠标 单击&#xff0c;能直接查看其用法 Ctrl/ 快速注释 CtrlC 在pycharm的terminal中可以停止运行, 其他的地方可以复制。 CtrlV 粘贴 CtrlA 全选 CtrlP 查看&#xff08;&#xff09;中需要填写什么参数 Altenter 自动不补全所需要的库...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...