kafka Partition(分區)詳解

一、什么是 Partition

  • Partition(分區) 是 Kafka Topic(主題) 的最小并行單位。

  • 一個 Topic 可以包含多個 Partition,每個 Partition 底層對應一個有序、不可變的消息隊列,消息只會順序追加。

  • Partition 內部消息都有一個唯一的偏移量(offset),消費者依靠 offset 來消費。

👉 關系:

Topic = Partition1 + Partition2 + ... + PartitionN


二、分區的作用

  1. 提高吞吐量(并行度)

    • 單個 Partition 只能由一個 Consumer 實例順序消費。

    • 增加 Partition 數量,可以讓更多消費者并行消費,提高消費能力。

    • 同樣,生產者發送時可以并行寫入多個 Partition,提升寫入吞吐量。

  2. 數據存儲與擴展性

    • Partition 分布在不同的 Broker 上,數據可以水平擴展,突破單機存儲瓶頸。

  3. 容錯與副本機制的基礎

    • 每個 Partition 都有 Leader 和 Follower 副本。

    • Leader 負責讀寫,Follower 同步 Leader 數據,用于故障切換。


三、分區的工作機制

  1. 生產者寫入

    • 生產者寫消息時,需要決定寫入哪個 Partition。

    • Kafka 提供三種分區策略:

      • 輪詢(Round-robin):平均分配到各個 Partition。

      • 按 key 哈希(Key Hash):相同的 key 會被分配到同一個 Partition(保證消息順序)。

      • 自定義分區器:可以自己實現 Partitioner 接口來決定分區邏輯。

  2. 消費者消費

    • 一個消費者組中的每個 Partition 同一時刻只能被一個消費者消費。

    • Kafka 會自動做負載均衡,把 Partition 分配給組內消費者。

  3. 副本機制

    • 每個 Partition 有一個 Leader 和若干 Follower。

    • Producer 和 Consumer 只和 Leader 交互。

    • Follower 定期從 Leader 同步數據,保證數據可靠性。


四、分區數的選擇

分區數是 Topic 創建時的關鍵參數,影響系統性能和架構:

  • 分區數過少

    • 無法充分利用集群并行能力,吞吐量有限。

  • 分區數過多

    • 元數據管理開銷變大(Zookeeper / KRaft 需要維護更多狀態)。

    • Rebalance 時間變長。

    • 消費者切換代價增加。

👉 一般經驗:

  • 分區數 = 生產者吞吐量 / 單分區最大處理能力。

  • 或者分區數 = 消費者并行度。

  • Kafka 官方推薦:不要輕易創建上千分區,根據硬件能力做評估。


五、如何指定 Partition

生產者寫入消息時,可以指定 Partition:

ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", key, value);

規則:

  • 如果指定了 partition 參數,則直接寫入該 Partition。

  • 如果指定了 key(但沒有指定 partition),Kafka 根據 key 的哈希值選擇 Partition。

  • 如果都沒指定,則輪詢選擇 Partition。


六、分區與順序性

  • Kafka 只保證 同一個 Partition 內的消息有序

  • 不同 Partition 之間的消息是無序的。

  • 如果業務要求消息嚴格有序,則必須讓相關消息寫入 同一個 Partition(通常通過 key 實現)。


七、實戰:管理 Partition

1. 創建 Topic 時指定分區數

bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --topic test-topic \ --partitions 4 \ --replication-factor 2

2. 查看 Topic 分區信息

bin/kafka-topics.sh --describe \ --bootstrap-server localhost:9092 \ --topic test-topic

輸出示例:

Topic: test-topic PartitionCount: 4 ReplicationFactor: 2 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2 Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3 Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1 Partition: 3 Leader: 1 Replicas: 1,2 Isr: 1,2

3. 增加分區數

bin/kafka-topics.sh --alter \ --bootstrap-server localhost:9092 \ --topic test-topic \ --partitions 6

?? 注意:增加分區數不會自動對現有消息做遷移,只影響新消息。


八、總結

  • Partition 是 Kafka 的核心并行單元

  • 作用:提升吞吐量、擴展存儲、實現高可用。

  • 分區內有序,跨分區無序

  • 分區數要合理規劃,過少浪費性能,過多增加負擔。

  • 生產者可通過 key 控制分區,保證某些業務的順序性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95649.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中創中間件適配HGDB

文章目錄環境文檔用途詳細信息環境 系統平臺&#xff1a;Microsoft Windows (64-bit) 10 版本&#xff1a;5.6.5 文檔用途 本文章主要介紹中創中間件簡單適配HGDB。 詳細信息 一、數據源配置 1.數據庫準備 &#xff08;1&#xff09;安裝HGDB并創建一個名為myhgdb的數據…

服務器內存和普通計算機內存在技術方面有什么區別?

服務器內存和普通計算機內存在技術上的區別&#xff0c;主要體現在為滿足不同工作場景和要求而采用的設計和特性上。下面這個表格匯總了它們的主要技術差異&#xff0c;方便你快速了解&#xff1a; ?技術特性??服務器內存??普通計算機內存??錯誤校驗 (ECC)??支持ECC(…

哪款AI生成PPT工具對職場新人最友好?操作門檻最低的是哪個?

一句話生成專業PPT&#xff0c;職場新人也能輕松做出高質量演示文稿現代職場節奏快&#xff0c;PPT制作已成為必備技能。然而&#xff0c;職場新人常面臨兩大挑戰&#xff1a;缺乏設計經驗&#xff0c;以及需要在有限時間內完成高質量演示。傳統PPT制作耗時費力&#xff0c;需梳…

1.注解的力量:Spring Boot如何用注解重構IoC容器

文章目錄1.1 IoC容器&#xff1a;Spring的智能管家1.2 注解驅動&#xff1a;給管家下指令1.2.1 SpringBootApplication&#xff1a;總管家的聘書1.2.2 組件注解&#xff1a;員工的身份標識1.2.3 Autowired&#xff1a;依賴注入的三種方式1.2.4 Bean注解&#xff1a;手動招聘特殊…

【算法】92.翻轉鏈表Ⅱ--通俗講解

一、題目是啥?一句話說清 給你一個鏈表和兩個整數 left 和 right,反轉從第 left 個節點到第 right 個節點的子鏈表,并返回反轉后的鏈表。其他部分保持不變。 示例: 輸入:head = [1,2,3,4,5], left = 2, right = 4 輸出:[1,4,3,2,5](反轉了從第2到第4個節點) 二、解題…

Nature子刊:新發現!深層腦網絡中發現強迫癥癥狀的神經生物標志物

強迫癥&#xff08;OCD&#xff09;是一種令人困擾的精神疾病&#xff0c;患者常常被強迫思維和強迫行為所困擾。例如&#xff0c;有些人會反復洗手&#xff0c;無法控制自己的清潔沖動&#xff1b;還有些人會不斷檢查門窗是否關好&#xff0c;即便他們已經確認過無數次。這些行…

Onlyoffice集成與AI交互操作指引(Iframe版)

Onlyoffice集成與AI交互操作指引&#xff08;Iframe版&#xff09; 本文檔系統介紹了軟件系統集成OnlyOffice實現在線編輯與AI輔助功能的方案。主要內容包括&#xff1a;后端需提供文檔配置信息并實現Callback接口以處理文檔保存&#xff1b;前端通過Vue集成編輯器&#xff0c…

TypeScript 中 keyof、typeof 和 instanceof

在 TypeScript 開發中&#xff0c;keyof、typeof 和 instanceof 是核心的類型操作符和操作符&#xff0c;專門用于提升類型安全、代碼可讀性和維護性。1. keyof 操作符定義和用途&#xff1a;keyof 是一個類型操作符&#xff0c;用于獲取對象類型的所有鍵&#xff08;屬性名&am…

分布式專題——1.1 Redis單機、主從、哨兵、集群部署

1 Redis 部署 下面演示在 Linux 環境下部署 Redis7。 1.1 單機部署 1.1.1 檢查安裝 gcc 環境Redis 是由 C 語言編寫的&#xff0c;它的運行需要 C 環境&#xff0c;因此我們需要先安裝 gcc&#xff1b; # 關閉防?墻 systemctl stop firewalld.service # 查看防火墻狀態 firewa…

2025年滲透測試面試題總結-54(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。1、SQL注入的防護方法有哪些&#xff1f; 2、永恒之藍的漏洞原理是什么&#xff1f;怎么做到的&#xff1f; 3、命令…

安卓學習 之 按鈕點擊事件

今天學習安卓應用中的按鈕點擊事件&#xff1a;總結下來在安卓應用中的Button注冊點擊事件的方法主要是以下4種方法&#xff0c;稍后會逐個介紹&#xff1a; 第一種方法&#xff1a;自定義內部類的方法 第二種方法&#xff1a;匿名內部類的方法 第三種方法&#xff1a;當前Acti…

鴻蒙NEXT主題設置指南:應用級與頁面級主題定制詳解

在鴻蒙應用開發中&#xff0c;靈活的主題設置能力是實現個性化用戶體驗的關鍵技術&#xff0c;HarmonyOS NEXT提供了強大而靈活的主題設置功能&#xff0c;讓開發者能夠輕松實現應用級和頁面級的主題定制。在當今追求個性化的時代&#xff0c;用戶希望應用能夠根據自己的喜好呈…

全球汽車氮化鎵技術市場規模將于2031年增長至180.5億美元,2025-2031年復合增長率達94.3%,由Infineon和Navitas驅動

全球汽車氮化鎵技術市場規模將于2031年增長至180.5億美元&#xff0c;2025-2031年復合增長率達94.3%&#xff0c;由Infineon和Navitas驅動汽車氮化鎵技術正從一個有前景的細分市場加速進入主流電力電子領域。根據QYResearch&#xff08;恒州博智&#xff09;的《全球汽車GaN技術…

xftp斷網后提示錯誤如何繼續下載?

問題&#xff1a;xftp斷網后提示錯誤如何繼續下載&#xff1f;解決方法&#xff1a;斷網后&#xff0c;先連接上網&#xff0c;然后繼續雙擊右側的那兩個要傳輸的文件&#xff0c;然后會彈出一個覆蓋還是繼續下載&#xff08;如下圖&#xff09;的選擇框&#xff0c;選擇繼續下…

Day22_【機器學習—集成學習(4)—Boosting—GBDT算法】

提升樹 &#xff08;Boosting Decision Tree &#xff09;每一個弱學習器通過擬合殘差來構建強學習器梯度提升樹 &#xff08;Gradient Boosting Decision Tree&#xff09;每一個弱學習器通過擬合負梯度來構建強學習器一、提升樹殘差數學公式為&#xff1a;殘差真實值?預測值…

前綴和、子矩陣的和;差分、差分矩陣

一、前綴和數組要稍微注意前綴和數組從1開始#include <iostream>using namespace std;const int N 100010;int n, m; int a[N], s[N];int main() {scanf("%d%d", &n, &m);for (int i 1; i < n; i ) scanf("%d", &a[i]);for (int i…

啟用BBR擁塞控制算法

目錄 &#x1f4cb; 先決條件 &#x1f527; 啟用步驟 &#x1f4dd; 額外檢查與說明 ?? 注意事項 BBR&#xff08;Bottleneck Bandwidth and Round-trip time&#xff09;是谷歌開發的一種TCP擁塞控制算法&#xff0c;它能有效提升網絡傳輸速度和性能&#xff0c;尤其在…

Python:AI開發第一語言的全面剖析

文章目錄引言1. Python的歷史與AI開發的契合1.1 Python的誕生與設計哲學1.2 Python與AI發展的歷史交匯2. 語言特性如何支持AI開發2.1 動態類型與交互式編程2.2 簡潔優雅的語法2.3 高級數據結構的原生支持2.4 函數式編程特性2.5 強大的元編程能力3. 豐富的AI生態系統和庫支持3.1…

Nikto 漏洞掃描工具使用指南

目錄 ? 核心功能一覽 &#x1f680; 基本使用方法 1. 掃描單個目標 2. 指定端口掃描 3. 掃描 HTTPS 目標 使用 -ssl 參數主要有兩個核心原因 ?? 高級使用技巧 1. 使用代理掃描 2. 保存掃描結果 3. 使用特定插件 4.交互命令 ? 核心功能一覽 Nikto 是一款開源的 W…

FunASR的Java實現Paraformer實時語音識別 | 一款無需聯網的本地實時字幕軟件

0. 開發背景 我們在看直播時&#xff0c;沒有視頻字幕&#xff0c;可能看慣了視頻字幕&#xff0c;來到直播中缺少字幕會感覺不習慣&#xff0c;特別是對于聽力障礙的人群&#xff0c;只能依賴于字幕&#xff0c;那么這個軟件可以解決直播&#xff0c;在線會議等場景中無字幕的…