KRaft模式

目錄標題

    • Kraft模式
      • **1. 什么是Kraft模式?**
      • **2. 為什么引入Kraft模式?**
      • **3. 核心優勢**
      • **4. 架構與工作原理**
      • **5. 部署與配置要點**
      • **6. 適用場景與最佳實踐**
      • **總結**
      • KIP-833: Mark KRaft as Production Ready
      • 除了Kraft模式,Kafka還有以下常用模式:
    • 啟用 Kafka KRaft 模式
      • 1. 配置 `server.properties` 文件
      • 2. 初始化集群元數據
      • 3. 啟動 Kafka 服務
      • 生產環境注意事項

Kraft模式

Kafka Kraft模式(KRaft)是Apache Kafka自2.8版本引入的核心功能,旨在通過移除對ZooKeeper的依賴,簡化集群架構并提升性能。以下是其核心內容的總結:

1. 什么是Kraft模式?

Kraft模式(Kafka Raft元數據模式)是Kafka內置的分布式共識協議,基于Raft算法實現集群元數據(如主題、分區、副本狀態等)的自主管理。它替代了傳統ZooKeeper模式,使Kafka集群無需外部協調服務即可運行。

2. 為什么引入Kraft模式?

  • 簡化架構:消除對ZooKeeper集群的依賴,減少運維復雜度。
  • 提升擴展性:通過Raft協議實現元數據的高效同步,支持百萬級分區(遠超ZooKeeper的數萬限制)。
  • 增強可靠性:控制器故障恢復時間縮短至毫秒級,且元數據變更通過Raft協議保證強一致性。
  • 統一管理:將元數據管理與Kafka自身深度整合,統一安全模型和配置管理。

3. 核心優勢

  • 部署與管理更簡單:僅需維護Kafka節點,無需額外部署ZooKeeper。
  • 性能優化:元數據存儲本地化,減少跨系統通信延遲。
  • 高可用性:通過Raft協議的多數派選舉機制,確保集群在部分節點故障時仍正常運行。
  • 快速恢復:控制器故障后,新控制器可直接從內存加載元數據,無需從外部存儲恢復。

4. 架構與工作原理

  • 控制器節點
    • 集群中指定部分節點(如3個)作為控制器候選,通過Raft協議選舉產生主控制器(Active Controller),其余為備用(Standby)。
    • 控制器節點通過controller.quorum.voters配置定義,格式為id@host:port
  • 元數據存儲
    • 元數據通過名為__cluster_metadata的主題存儲,支持日志壓縮和快照,確保數據持久化。
  • Broker通信
    • Broker通過心跳機制與控制器保持會話,主動拉取元數據更新,而非被動接收廣播。

5. 部署與配置要點

  • 關鍵配置
    • process.roles:定義節點角色(controllerbroker或混合模式)。
    • node.id:唯一標識節點,需與controller.quorum.voters中的ID一致。
    • listeners:配置控制器通信端口(如CONTROLLER://host:9093)。
  • 初始化集群
    使用kafka-storage initialize命令生成元數據,需指定配置文件和引導服務器。
  • 生產建議
    • 控制器節點數建議為3或5(奇數),確保多數派存活。
    • 避免混合模式(同時作為控制器和Broker),推薦隔離部署以提升穩定性。

6. 適用場景與最佳實踐

  • 適用場景
    • 大規模集群(百萬級分區)。
    • 對延遲敏感的實時數據處理。
    • 需要簡化運維的邊緣計算或小型部署。
  • 最佳實踐
    • 遷移前充分測試,優先新建KRaft集群。
    • 監控控制器狀態和Raft日志同步情況。
    • 定期備份元數據存儲目錄。

總結

Kraft模式是Kafka架構的重大演進,通過自管理的Raft協議顯著提升了集群的可擴展性、可靠性和運維效率。隨著Kafka版本的迭代(如3.3+),KRaft已成為生產環境的首選模式,尤其適合需要高性能、低延遲的分布式消息系統場景。

KIP-833: Mark KRaft as Production Ready

在這里插入圖片描述
在這里插入圖片描述

KIP-833: Mark KRaft as Production Ready

除了Kraft模式,Kafka還有以下常用模式:

  • ZooKeeper模式:這是Kafka在KRaft出現之前長期使用的模式。Kafka依賴ZooKeeper來管理元數據,比如集群成員信息、主題(Topic)配置、分區(Partition)分配等。ZooKeeper為Kafka提供了分布式協調服務,幫助Kafka處理諸如選舉領導者(Leader)副本、監控Broker狀態等任務。但隨著Kafka集群規模擴大,ZooKeeper可能成為性能瓶頸,并且其復雜的配置和維護也增加了管理難度。
  • 消息消費模式
    • 發布訂閱模式(Publish/Subscribe):一對多的關系,消費者消費完消息后,消息不會立即被刪除,而是會存儲一段時間,該模式下的消息會被所有訂閱該主題的消費者消費。比如在實時數據分析場景中,多個數據分析應用可以同時訂閱同一個主題的業務數據,進行各自維度的分析 。此模式下又分為推模式(queue直接將消息推給消費者,可能出現消費者處理不過來的情況)和拉模式(消費者主動去拉取queue中的消息,可按自身消費能力拉取,但需持續維護拉取任務)。
    • 點對點模式(Point-to-Point,P2P):一對一的關系,消費者主動拉取數據,消息確認被消費后,消息隊列會刪除該消息,一條消息只會被一個消費者消費。在Kafka中,同一消費者組里面的消費者,消費消息類似點對點模式,不過消費完消息后消息不會被刪除。
  • 數據可靠性模式(基于生產者角度,通過acks參數設置)
    • acks = 0:生產者無需等待來自Broker的確認就繼續發送下一批消息,傳輸效率最高,但可靠性最低,可能丟數據,不會重復發送,因為這種模式下重試機制會失效。
    • acks = 1(默認):生產者在ISR(In-Sync Replicas,副本同步隊列 )中的Leader已成功收到數據并得到確認后,才發送下一條消息。如果Leader宕機,可能會丟失數據。
    • acks = -1或all:生產者需要等待ISR中的所有Follower都確認接收到數據后,才算一次發送完成,可靠性最高,但不能完全保證數據不丟失(如ISR中只剩Leader時,就類似acks = 1的情況),且開啟失敗重試可能導致消息重復發送。
  • 消費者消費語義模式
    • at most once(最多一次):保證每一條消息commit成功之后,再進行消費處理。設置自動提交為false,接收到消息之后,首先commit,然后再進行消費。特點是不會重復發送,但可能丟失消息。
    • at least once(至少一次):保證每一條消息處理成功之后,再進行commit。設置自動提交為false,消息處理成功之后,手動進行commit。特點是會重復發送,但消息不會丟失。
    • exactly once(恰好一次):發送端數據發送成功,并且成功的消息只發送一次(重復的數據被服務器拒絕),消費端結合冪等性實現。例如,Kafka 0.11.0.0 及以后版本通過生產者冪等性和事務機制來實現Exactly - once語義,確保消息在生產和消費過程中都只被處理一次。

啟用 Kafka KRaft 模式

啟用 Kafka KRaft 模式需按以下標準流程操作:

1. 配置 server.properties 文件

  • 核心配置項
    • process.roles:定義節點角色,取值:
      • controller,broker:節點同時作為控制器和代理(測試場景)。
      • controller:僅作為控制器(生產環境推薦多節點)。
      • broker:僅作為代理。
    • node.id:為節點設置唯一 ID,集群內所有節點(控制器、代理)的 node.id 不可重復。
    • controller.quorum.voters:以 {id}@{host}:{port} 格式定義控制器仲裁列表,例如 1@host1:9093,2@host2:9093,3@host3:9093,其中 id 需與節點的 node.id 一致。
    • 其他基礎配置:如 listeners(監聽地址)、inter.broker.listener.name(代理間通信協議)、log.dirs(日志存儲路徑)等。

2. 初始化集群元數據

使用 kafka-storage 工具初始化 KRaft 集群元數據:

# 命令格式
bin/kafka-storage initialize \-bootstrap-server localhost:9093 \-cluster-id <自動生成,首次可不填> \-configuration config/kraft/server.properties
  • 執行后會生成集群元數據,存儲在 log.dirs 配置的目錄中。

3. 啟動 Kafka 服務

bin/kafka-server-start.sh config/kraft/server.properties

生產環境注意事項

  • 控制器節點數量:至少 3 個控制器節點,確保仲裁機制正常(遵循多數原則)。
  • 網絡與端口:控制器間通過 controller.quorum.voters 配置的端口通信,需開放對應端口。
  • 遷移場景:若從 ZooKeeper 模式遷移,需參考官方遷移文檔逐步操作,避免數據丟失。

完整流程參考 Apache Kafka 官方文檔:KRaft Documentation。

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

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

相關文章

單片機電路中常見的英文術語及縮寫

以下是單片機電路中常見的英文術語及縮寫的解釋及其作用說明&#xff0c;按功能分類整理&#xff0c;便于理解&#xff1a; 一、核心術語 MCU (Microcontroller Unit) ? 中文&#xff1a;微控制器單元 ? 作用&#xff1a;單片機的核心芯片&#xff0c;集成CPU、存儲器、外設接…

常見框架漏洞之一:Thinkphp5x

ThinkPHP是為了簡化企業級應?開發和敏捷WEB應?開發?誕?的&#xff0c;是?個快速、兼容?且簡單的輕量級國產PHP開發框架&#xff0c;誕?于2006年初&#xff0c;原名FCS&#xff0c;2007年元旦正式更名為 ThinkPHP&#xff0c;遵循Apache2開源協議發布&#xff0c;從Stru…

2025年優化算法:龍卷風優化算法(Tornado optimizer with Coriolis force,TOC)

龍卷風優化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是發表在中科院二區期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能優化算法 01.引言 當自然界的狂暴之力&#xff0c;化身數字世界的智慧引擎&…

面試中如何回答性能優化的問題

性能問題和Bug不同,后者的分析和解決思路更清晰,很多時候從應用日志(文中的應用指分布式服務下的單個節點)即可直接找到問題根源,而性能問題,其排查思路更為復雜一些。 對應用進行性能優化,是一個系統性的工程,對工程師的技術廣度和技術深度都有所要求。一個簡單的應用…

CMake 函數和宏

CMake 函數 CMake 函數定義語法如下, 其中 name 為函數名, <arg1> 為參數名, <commands> 為函數體. 函數定義后, 可以通過 name 調用函數. 函數名允許字母數字下劃線, 不區分大小寫. function(name [<arg1> ...])<commands> endfunction()如下的樣例…

【QA】Qt有哪些迭代器模式的應用?

在 Qt/C 中&#xff0c;迭代器模式的設計主要分為 標準 C 風格 和 Qt 框架特有風格&#xff0c;以下結合代碼詳細說明兩種實現方式的關鍵設計及其應用場景&#xff1a; 一、Qt 框架中的迭代器模式設計 Qt 提供了兩種迭代器風格&#xff1a;Java 風格&#xff08;顯式迭代器&am…

Mysql表的簡單操作

&#x1f3dd;?專欄&#xff1a;Mysql_貓咪-9527的博客-CSDN博客 &#x1f305;主頁&#xff1a;貓咪-9527-CSDN博客 “欲窮千里目&#xff0c;更上一層樓。會當凌絕頂&#xff0c;一覽眾山小。” 目錄 3.1 創建表 3.2 查看表結構 3.3 修改表 1. 添加字段 2. 修改字段 3…

【云馨AI-大模型】自動化部署Dify 1.1.2,無需科學上網,Linux環境輕松實現,附Docker離線安裝等

Dify介紹 官網&#xff1a;https://dify.ai/zh生成式 AI 應用創新引擎開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力&#xff0c;輕松構建和運營生成式 AI 原生應用。 Dify安裝腳本 目錄創建 mkdir -p /data/yunxinai &&a…

WordPress上傳圖片時顯示“未提供數據”錯誤

在WordPress中上傳圖片時顯示“未提供數據”的錯誤&#xff0c;通常是由多種原因引起的&#xff0c;以下是一些常見的問題及其解決方法&#xff1a; 1. 文件權限問題 WordPress需要正確的文件和目錄權限才能正常上傳圖片。如果權限設置不正確&#xff0c;可能會導致無法上傳圖…

python3面試題20個(python web篇)

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 1.python asyncio的原理?2.對Flask藍圖(Blueprint)的理解?3.Flask 和 Django 路由映射的區別?4.什么是wsgi,uwsgi,uWSGI?5.Django、Flask、Tornado的對比?6.CORS 和 CSRF的區別?7.Session,Cookie,JWT的理解8.簡…

RedisTemplate和RedissonClient適用的場景有什么不同

在 Spring Boot 項目中&#xff0c;RedisTemplate 和 RedissonClient 分別針對不同的使用場景設計&#xff0c;以下是它們的核心區別和適用場景分析&#xff1a; 一、RedisTemplate&#xff08;Spring Data Redis&#xff09; 定位 Spring 官方提供的 Redis 操作工具&#xf…

人臉表情識別系統分享(基于深度學習+OpenCV+PyQt5)

最近終于把畢業大論文忙完了&#xff0c;眾所周知碩士大論文需要有三個工作點&#xff0c;表情識別領域的第三個工作點一般是做一個表情識別系統出來&#xff0c;如下圖所示。 這里分享一下這個表情識別系統&#xff1a; 采用 深度學習OpenCVPyQt5 構建&#xff0c;主要功能包…

GitHub供應鏈攻擊事件:Coinbase遭襲,218個倉庫暴露,CI/CD密鑰泄露

此次供應鏈攻擊涉及GitHub Action "tj-actions/changed-files"&#xff0c;最初是針對Coinbase的一個開源項目的高度定向攻擊&#xff0c;隨后演變為范圍更廣的威脅。 攻擊過程與影響 Palo Alto Networks Unit 42在一份報告中指出&#xff1a;“攻擊載荷主要針對其…

Redis 核心源碼解析:從設計哲學到企業級應用實踐

一、Redis 的核心設計哲學 Redis 的成功源于其 「用內存換時間」 的核心理念&#xff0c;圍繞以下三個核心原則構建&#xff1a; 極簡主義&#xff1a;單線程模型避免鎖競爭&#xff0c;代碼保持高度內聚。 性能至上&#xff1a;所有數據常駐內存&#xff0c;網絡層采用事件驅…

GZCTF平臺搭建及題目上傳

前言 我用手里的Ubuntu虛擬機搭建的&#xff0c;大家根據自己的實際情況來吧 安裝及部署 首先&#xff0c;你的虛擬機需要有Docker和Docker-Compose&#xff0c;前者可以看我之前的文章&#xff0c;另外一個可以輸入下面的命令安裝&#xff0c;注意先獲取管理員權限&#xff…

Pycharm社區版創建Flask項目詳解

一、創建工程項目 二、配置工程目錄 新建的空項目下創建目錄。 1、新建app.py文件 2、app.py代碼如下&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主頁:return: Index.html"&qu…

CentOS 7 64位安裝Docker

以下是在已有的 CentOS 7 64 位虛擬機上安裝 Docker 并配置華為鏡像源的詳細步驟&#xff1a; 1. 備份原有 Yum 源&#xff08;可選&#xff0c;建議操作&#xff09; # 備份原有倉庫文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…

運動仿真——phased.Platform

在雷達仿真過程中&#xff0c;運動仿真的必要性&#xff0c;以及運動仿真可以實現哪些功能&#xff0c;在matlab對應的user guide中已經講的很清楚了&#xff0c;這里不再贅述。 本文主要介紹phased.Platform的一些“坑”&#xff0c;和典型的用法。 第一坑&#xff1a;系統對…

緩存刪除三級補償方案:延遲隊列+消息隊列+定時任務兜底

問題背景: 在 Cache-Aside 模式中&#xff0c;更新數據庫后刪除緩存失敗會導致數據不一致。本文提供工業級三級補償方案&#xff0c;實現最終一致性保障。 整體架構: 更新操作觸發 → 一級延遲隊列 → 二級消息隊列 → 三級定時任務方案實現: 一、第一級補償&#xff1a;延遲隊…

從零開始實現 C++ TinyWebServer 數據庫連接池 SqlConnectPool詳解

文章目錄 數據庫連接池是什么&#xff1f;Web Server 中為什么需要數據庫連接池&#xff1f;SqlConnectPool 成員變量實現 Init() 函數實現 ClosePool() 函數SqlConnectRAII 類SqlConnectPool 代碼SqlConnectPool 測試 從零開始實現 C TinyWebServer 項目總覽 項目源碼 數據庫連…