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.pswp.cn/bicheng/79099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79099.shtml
英文地址,請注明出處:http://en.pswp.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…