当前位置: 首页 > 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 自动不补全所需要的库...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...