Kafka的Topic分区数如何合理设置?

一、分区数设置原则

1. 并发能力基准

分区数决定最大消费者并行度,建议设置为消费者组内消费者数量的整数倍
例如:消费者组有4个实例 → 分区数设为4/8/12等
这里定义的目的是为了让消费者能均匀的分配到分区,避免打破负载均衡,触发rebalance。

2. 吞吐量指标

单个分区写入速度建议不超过10MB/s
消息TPS超过10万时,可按公式计算:
分区数 = 目标吞吐量 / 单个分区吞吐量
这里回答不一定准确,因为一般情况下需要考虑部署kafka机器的性能,需要压测出一个稳定数据,通过稳定数据去计算需要的分区数大小,比如TPS超过1万,每条消息10k,就意味着每秒100万k消息,100万k/单个分区稳定数据(比如10万k),这个时候就需要10个分区,然后搭配消费者负载均衡,设置12个分区。

3. 扩展性预留

建议初始设置时预留20-30%的扩展空间
最大分区数不宜超过200(避免元数据管理开销过大)

二、副本数设置原则

1. 可靠性基线

生产环境必须设置≥3副本(ISR最小副本数建议2)
保证可靠性,部分broker宕机可能导致数据丢失,使用ISR机制有备份情况。

2. 集群规模对应

推荐设置规则:

  • 开发环境:1-2副本
  • 生产环境:3副本(集群≥5节点时)
  • 金融级场景:5副本

3. 写入性能权衡

副本数每增加1,写入吞吐量下降约10%
高吞吐场景建议搭配acks=10配置使用
这里建议使用acks=1,至少保证一个副本有同步,除非是日志消息之类的,可以考虑ack=0,不然容灾能力会很差。

三、特殊场景优化

# 需要严格顺序的场景
num.partitions=1
- 将主题分区数强制设置为1,所有消息按写入顺序严格排列
- 牺牲横向扩展能力,保证全局消息顺序一致性
- 适用于金融交易、订单状态变更等强顺序需求场景
unclean.leader.election.enable=false
- 禁止非ISR副本(低于高水位线,也就是未完全同步Leader)参与Leader选举(默认值)
- 当所有ISR副本失效时,宁可停止服务也不选举不同步副本
- 避免数据丢失但会降低可用性,需配合 min.insync.replicas 使用
保序# 高可用要求场景
default.replication.factor=3
- 设置默认副本数为3(需集群至少有3个Broker)
- 每个分区会在不同Broker上保存3个副本
- 最多可容忍2个Broker同时故障而不丢失数据
min.insync.replicas=2
指定‌对于每个分区,至少有多少个副本需要与领导者副本(Leader Replica)保持同步,才能认为该分区是可用的‌。
- 定义最小同步副本数要求(需 ≤ replication.factor)
- 生产者设置 acks=all 时,需要至少2个副本确认写入才算成功
- 在数据安全性与写入延迟之间取得平衡(1<min<replication.factor

四、配置验证方法

# 分区性能压测(使用kafka-producer-perf-test)
bin/kafka-producer-perf-test.sh --topic test-topic \
--num-records 1000000 --record-size 1000 \
--throughput -1 --producer-props bootstrap.servers=localhost:9092
  1. bin/kafka-producer-perf-test.sh Kafka 自带的性能测试工具脚本路径,用于模拟生产者发送消息
  2. –topic test-topic 指定要测试的 Kafka 主题名称(需要提前创建好)
  3. –num-records 1000000 设置总共要发送 1,000,000 条测试记录
  4. –record-size 1000 每条记录的大小设置为 1000 字节(约 1KB)
  5. –throughput -1 设置吞吐量为无限制(-1 表示以最大速度发送),若设为正数则表示每秒发送的记录数
  6. –producer-props bootstrap.servers=localhost:9092 指定生产者配置:
  • bootstrap.servers :Kafka 集群地址(本地单节点)
  • 可追加其他生产者参数如 acks=1 , compression.type=snappy 等

建议通过监控以下指标持续优化:

一、检测分区 Leader 的 ISR 变化频率

# 实时查看 ISR 变化(需开启 JMX 监控)
bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=ReplicaManager,name=IsrShrinksPerSec
bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=ReplicaManager,name=IsrExpandsPerSec# 查看历史 ISR 变更记录
bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic test-topic --describe | grep "Isr"
IsrShrinksPerSec
  • 含义:每秒ISR(In-Sync Replicas)集合收缩的次数
  • 表示副本从ISR中被移除的速率,可能由以下原因触发:
    • 副本同步延迟超过 replica.lag.time.max.ms (默认30秒)
    • 磁盘故障或网络问题导致副本离线
IsrExpandsPerSec
  • 含义:每秒ISR集合扩展的次数
  • 表示副本重新加入ISR的速率,常见恢复场景:
    • 副本追赶上Leader的消息进度
    • 网络恢复后副本重新上线
安全建议(生产环境必做)
# 启用 SSL 和认证的配置示例
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.ssl=true \
-Dcom.sun.management.jmxremote.registry.ssl=true \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/etc/kafka/jmx.password"
如何开启关闭JMX
开启JMX监控脚本 (enable_jmx.sh)
#!/bin/bash
# 设置JMX端口和认证参数
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"# 设置JMX远程访问IP限制(默认本地)
export JMX_HOSTNAME="-Djava.rmi.server.hostname=localhost"# 启动Kafka服务(后台运行)
nohup /path/to/kafka/bin/kafka-server-start.sh /path/to/kafka/config/server.properties > /dev/null 2>&1 &

逐行解释:

  1. #!/bin/bash:指定使用bash解释器执行脚本
  2. export KAFKA_JMX_OPTS...:设置JMX参数
    • -Dcom.sun.management.jmxremote:启用JMX远程监控
    • -Dcom.sun.management.jmxremote.port=9999:指定JMX端口
    • authenticate=false:禁用认证(生产环境建议开启)
    • ssl=false:禁用SSL加密(生产环境建议开启)
  3. export JMX_HOSTNAME...:设置JMX服务绑定IP
  4. nohup ... &:后台运行Kafka服务并忽略挂起信号
关闭JMX监控脚本 (disable_jmx.sh)
#!/bin/bash
# 查找Kafka进程ID
PID=$(jps -l | grep kafka.Kafka | awk '{print $1}')# 停止Kafka服务
if [ -n "$PID" ]; thenkill -9 $PIDecho "Kafka stopped successfully"
elseecho "Kafka is not running"
fi# 清除JMX环境变量
unset KAFKA_JMX_OPTS
unset JMX_HOSTNAME

逐行解释:

  1. PID=$(jps -l...):通过jps命令查找Kafka进程ID
  2. if [ -n "$PID" ]...:判断进程是否存在
  3. kill -9 $PID:强制终止Kafka进程
  4. unset...:清除JMX相关环境变量

注意事项:

  1. 端口号9999可根据实际情况修改,需确保防火墙开放
  2. 生产环境建议启用认证和SSL加密(需配置相关证书)
  3. 脚本中的kafka路径需替换为实际安装路径
  4. JMX关闭本质是停止Kafka服务,重启时不带JMX参数即关闭监控

二、检测生产/消费 p99 延迟

# 生产者延迟监控(需 JMX)
bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.producer:type=producer-metrics,client-id=*# 消费者延迟监控
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group [消费者组名] --describe | awk '{print $1,$2,$6}'

三、检测分区消息堆积量

# 查看所有消费者组堆积量
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list | xargs -I {} bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group {} --describe# 查看指定分区堆积量
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test-topic --time -1
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test-topic --time -2

监控建议:

  1. 建议将上述命令集成到 Prometheus + Grafana 监控体系
  2. 关键指标告警阈值设置:
    • ISR 变更频率 > 5次/分钟 触发告警
    • p99 延迟 > 500ms 触发告警
    • 消息堆积量持续增长超过 10万条 触发告警
  3. 推荐使用 Kafka Eagle 可视化工具进行实时监控

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

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

相关文章

章越科技赋能消防训练体征监测与安全保障,从传统模式到智能跃迁的实践探索

引言&#xff1a;智能化转型浪潮下&#xff0c;消防训练的“破局”之需 2021年《“十四五”国家消防工作规划》的出台&#xff0c;标志着我国消防救援体系正式迈入“全灾种、大应急”的全新阶段。面对地震、洪涝、危化品泄漏等复杂救援场景&#xff0c;消防员不仅需要更强的体…

【数据库原理及安全实验】实验五 数据库备份与恢复

指导书原文 数据库的备份与恢复SSMS 【实验目的】 1) 熟悉并掌握利用界面操作进行数据库备份和恢复的原理和操作。 【实验原理】 1) 数据库的恢复包括大容量日志恢复模式和简单恢复模式。其中大容量日志恢复模式&#xff0c;简单地说就是要对大容量操作进行最小日志记录&a…

Linux 基础IO(上)--文件与文件描述符fd

前言&#xff1a; 在生活里&#xff0c;我们常和各种文件打交道&#xff0c;像用 Word 写文档、用播放器看视频&#xff0c;这些操作背后都离不开文件的输入输出&#xff08;I/O&#xff09;。在 Linux 系统中&#xff0c;文件 I/O 操作更是复杂且关键。 接下来我们将深入探讨…

快速了解Go+rpc

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 文章目录 rpc基础概念GO的rpc应用简单编写json编写rpc rpc基础概念 电商系统…

基于大模型的膀胱肿瘤全周期诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型预测膀胱肿瘤的原理与技术基础 2.1 大模型介绍 2.2 预测原理 2.3 技术支撑 三、术前风险预测与准备方案 3.1 肿瘤分期与恶性程度预测 3.2 患者身体状况评估 3.3 术前准备工作 …

2025年4月个人工作生活总结

本文为 2025年4月工作生活总结。 研发编码 一个项目的临时记录 自2月份领导让我牵头负责一个项目起&#xff0c;在本月算是有较多时间投入——但也是与之前的相比。 月初&#xff0c;清明节前一晚上&#xff0c;因某事务被叫上参加临时紧急远程会议&#xff0c;几方领导都在…

Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考

一、引言 在高考升学的重要阶段,志愿填报成为考生和家长关注的核心问题。准确、全面且具有权威性的大学专业排名数据,是考生做出科学志愿决策的关键依据。软科网作为专业的大学排名信息发布平台,其发布的计算机科学与技术专业排名数据,因具有较高的公信力和参考价值,备受…

自学S32k144(18)————芯片锁死问题及成功解锁流程

1.锁死原因 温度过高flash异常操作静电等电压异常问题。。。。 本人出现情况&#xff1a;之前开发板不知什么原因&#xff0c;发生短路&#xff0c;重新置换芯片后&#xff0c;发现芯片在S32DS中无法正常烧录 判断可能是由于焊接时温度过高导致锁死。需解锁芯片。 2.解决方法…

ISIS的由于L1产生的一系列问题

如果有些名词不清晰可以查看之前文章 L1访问其他区域使用缺省路由会引发次优路径问题&#xff0c;但次优路径leak路由又会引发路由环路问题&#xff0c;下面将会从去缺省路由到路由环路一一解决 Level 1的缺省路由 L1访问其他区域使用缺省路由 --> 引发次优路径 --> 引…

C++继承(下)

目录 一、继承与友元 二、继承与静态成员 三、菱形继承及菱形虚拟继承 1. 继承的方式 2. 菱形继承的问题 3. 菱形虚拟继承 4. 虚拟继承解决数据冗余和二义性的原理 4.1 普通菱形继承的内存布局 4.2 虚拟继承的内存布局 四、继承的总结和反思 1. 多继承的复杂性 2.…

【漫话机器学习系列】233.激活阈(Threshold Activation)

深度学习入门&#xff1a;了解“阈值激活函数”&#xff08;Threshold Activation Function&#xff09; 激活函数是神经网络中至关重要的一环。今天&#xff0c;我们通过一幅简单直观的手绘图&#xff0c;一起理解最早期也最基础的激活函数之一 —— 阈值激活函数&#xff08;…

(4)python中jupyter lab使用python虚拟环境

1. 先了解IPython和IPyKernel简介 IPython 是一个功能强大的交互式 Python 解释器和开发环境。它提供了一种增强的 Python Shell,使得用户能够以交互的方式探索、分析和可视化数据。IPython 的名称来源于 "Interactive Python",体现了其交互式的特性。 IPyKernel 是…

nginx 配置要领

你提出的问题非常好&#xff01;确实在配置 WebSocket 代理时&#xff0c;proxy_pass 的 URL 处理需要特别注意。以下是关键解释和修正建议&#xff1a; 1. 原配置的问题分析 location /ws/ {proxy_pass http://fastapi-container:8000; # 会保留 /ws/ 前缀传递给后端 }这种配…

【AI】DeepSeek 流程图 / 时序图制作,Word 排版错乱问题,文字转直观图形

一&#xff1a;动态流程图 / 时序图制作&#xff08;DeepSeek Draw.IO&#xff09; 工具准备 DeepSeek&#xff08;AI 生成代码&#xff09;&#xff1a;官网&#xff08;免费&#xff09;Draw.IO&#xff08;可视化渲染&#xff09;&#xff1a;官网&#xff08;免费&#…

4. python3基本数据类型

Python3 中有六个标准的数据类型&#xff1a; Number&#xff08;数字&#xff09; String&#xff08;字符串&#xff09; List&#xff08;列表&#xff09; Tuple&#xff08;元组&#xff09; Set&#xff08;集合&#xff09; Dictionary&#xff08;字典&#xff09; Pyt…

WPF之TextBox控件详解

文章目录 1. TextBox概述2. 基本属性与功能3. 输入控制详解3.1 MaxLength3.2 AcceptsReturn3.3 AcceptsTab3.4 CharacterCasing3.5 IsUndoEnabled3.6 自定义输入限制 4. 文本选择与操作4.1 选择属性4.2 选择方法4.3 文本操作4.4 选择事件4.5 实现自定义文本处理功能 5. 滚动支持…

1.4 点云数据获取方式——结构光相机

图1-4-1结构光相机 结构光相机作为获取三维点云数据的关键设备,其工作原理基于主动式测量技术。通过投射已知图案,如条纹、点阵、格雷码等,至物体表面,这些图案会因物体表面的高度变化而发生变形。与此同时,利用相机从特定

【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法

【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法 一、双通道CNN简介 在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;凭借其强大的特征提取能力&#xff0c;已成为图像识别、自然语言处理等任务的核心技术。传统单通道CNN在处理单一模态…

2025上海车展 | 移远通信推出自研NG-eCall QuecOpen方案,助力汽车安全新标准加速落地

4月29日&#xff0c;在2025上海国际汽车工业展览会期间&#xff0c;全球领先的物联网和车联网整体解决方案供应商移远通信宣布&#xff0c;正式发布自主研发的NG-eCall&#xff08;下一代紧急呼叫系统&#xff09;QuecOpen解决方案。 该方案凭借高度集成的软硬件协同设计&…

leetcode76

目录 803ms超时。。。。越改越超时。。。 一些纠缠 代码分析&#xff1a; 代码问题&#xff1a; 改进建议&#xff1a; 示例代码&#xff1a; The error message you’re seeing indicates that there is a reference binding to a null pointer in your code. This typ…