Kafka學習征途:不再依賴ZK的KRaft

de009e417f2ab515c7324cc78cb281b5.jpeg

【Kafka】|?總結/Edison Zhou

1新的KRaft架構

在Kafka 2.8之前,Kafka重度依賴于Zookeeper集群做元數據管理和集群的高可用(即所謂的共識服務)。

6921e12e0f09dd3c5378ccadd2d1f7d7.png

在Kafka 2.8之后,引入了基于Raft協議的KRaft模式,支持取消對Zookeeper的依賴。在此模式下,一部分Kafka Broker被指定為Controller,另一部分則為Broker。這些Controller的作用就是以前由Zookeeper提供的共識服務,并且所有的元數據都將存儲在Kafka主題中并在內部進行管理。

cc7a9cea0e5aea15cdde3eb7d64e1fba.png

總體而言,使用KRaft的好處如下:

  • Kafka不用再依賴外部框架,能夠做到獨立運行。類似于Redis的Sentinel,它的本質仍然是一個Kafka實例。

  • Controller管理集群時,不再需要從Zookeeper中先讀取數據,因此集群的性能得到一定的提升。

  • 由于不再依賴Zookeeper,Kafka集群擴展時不用再受到Zookeeper讀寫能力的限制。

  • Controller不再動態選舉,而是由配置文件規定。這樣可以有針對性的加強Controller節點的配置,而不是像以前一樣對隨機Controller節點的高負載束手無策。

2KRaft架構部署實戰

本次我們采用物理宿主機部署,本集群三個Kafka實例均在一臺主機上。

下載Kafka安裝包

ce710ce0a3ac5297d3d0c4a459e1f4a0.png

從Apache Kafka官方社區下載最新版3.2.0的安裝包(.tgz),然后將其拷貝到服務器上并解壓。

這里我使用一臺Linux主機,啟動三個Kafka實例,分別綁定9092,19092,29092端口來模擬三臺服務器的集群效果。

由于只有三個實例,因此它們既是Controller節點,也是Broker節點

修改KRaft必要配置

和基于Zookeeper的模式不同,KRaft模式下的配置需要進入Kraft目錄,找到server.properties文件:

cd config/kraft

依次修改每個服務器下的kraft目錄下的server.properties文件:

(1)kafka01

process.roles=broker,controller
node.id=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kakfa01:9092
log.dirs=/usr/local/modules/kakfa01/logs

(2)kafka02

process.roles=broker,controller
node.id=2
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:19092,CONTROLLER://:19093
advertised.listeners=PLAINTEXT://kakfa02:19092
log.dirs=/usr/local/modules/kakfa02/logs

(3)kafka03

process.roles=broker,controller
node.id=2
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:29092,CONTROLLER://:29093
advertised.listeners=PLAINTEXT://kakfa03:29092
log.dirs=/usr/local/modules/kakfa03/logs

初始化集群數據目錄

(1)生成存儲目錄唯一ID(UUID)

bin/kafka-storage.sh random-uuid
uTTIHcpoQSeiGlItgLau0A

(2)用這個唯一ID格式化Kafka存儲目錄

# kafka01
/usr/local/modules/kafka01/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka01/config/kraft/server.properties
# kafka02
/usr/local/modules/kafka02/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka02/config/kraft/server.properties
# kafka03
/usr/local/modules/kafka03/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka03/config/kraft/server.properties

(3)啟動Kafka KRaft集群節點服務

# kafka01
/usr/local/modules/kafka01/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka01/config/kraft/server.properties
# kakfa02
/usr/local/modules/kafka02/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka02/config/kraft/server.properties
# kafka03
/usr/local/modules/kafka03/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka03/config/kraft/server.properties

(4)驗證Kafka集群節點服務

# jps
1207 Kafka
2137 Jps
2013 Kafka
1614 Kafka

快速測試生產消費

(1)創建測試topic

kafka01/bin/kafka-topics.sh --create --bootstrap-server kafka01:9092,kafka02:19092,kafka03:29092 --replication-factor 2 --partitions 3 --topic test
Created topic test.

(2)模擬Producer

kafka01/bin/kafka-console-producer.sh --broker-list kafka01:9092,kafka02:19092,kafka03:29092 --topic test
>hello 
>world
>edison
>zhou

(3)模擬Consumer

kafka02/bin/kafka-console-consumer.sh --bootstrap-server kafka01:9092,kafka02:19092,kafka03:29092 --from-beginning --topic test
hello 
world
edison
zhou

可以看到,已經可以正常的生產和消費數據。

End總結

本文總結了Kafka KRaft模式的基本概念和優點,介紹了Kafka KRaft模式的部署過程。基于KRaft模式,我們不再需要依賴Zookeeper進行元數據管理和共識服務,在技術選型時不再需要引入額外的組件,對于Kafka來說,實在是個好消息。

至此,Kafka學習征途系列已經有了11篇推文,目前已經走到了結尾,總結這個系列既是我對自己學習的總結,也是系統地梳理所學知識,相信它對我有幫助,也一定對你有所幫助

參考資料

深度感謝以下參考教程!

極客時間,胡夕《Kafka核心技術與實戰》

B站,尚硅谷《Kafka 3.x入門到精通教程》

81dfcfe5ea68fcfe4f249157e6651242.gif

年終總結:Edison的2021年終總結

數字化轉型:我在傳統企業做數字化轉型

C#刷題:C#刷劍指Offer算法題系列文章目錄

.NET面試:.NET開發面試知識體系

.NET大會:2020年中國.NET開發者大會PDF資料

47e5c3ae7ae39620a8c689bc7d7c508b.png

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

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

相關文章

探索java世界中的日志奧秘

java日志簡單介紹 對于一個應用程序來說日志記錄是必不可少的一部分。線上問題追蹤,基于日志的業務邏輯統計分析等都離不日志。JAVA領域存在多種日志框架,目前常用的日志框架包括Log4j,Log4j 2,Commons Logging,Slf4j&…

nginx的負載均衡集群

針對域名:vim /usr/local/nginx/conf/vhosts/lb.conf //自定義名稱upstream xrc { //別名server 192.168.0.1:80 weight2; //包含的主機server,負載均衡里面的機器server 192.168.0.2:80 weight1; //權重weight}server {li…

英語名言警句100句

1、寧為百夫長,勝作一書生。——楊炯 Better be a centurion than a scholar. 2、我是閑暇為所有中最的。——蘇格拉底 I am the most leisure of all. 3、立志不堅,終不濟事。——朱熹 If you are not determined, you will not help. 4、人學始知道&am…

RabbitMQ細說之開篇

前言關于消息中間件的應用場景,小伙伴們應該都耳熟能詳了吧,比如經常提到的削峰填谷、分布式事務、異步業務處理、大數據分析等等,分布式消息隊列成為其中比較關鍵的橋梁,也就意味著小伙伴們得掌握相關技能;當下相對比…

【Java】五種常見排序之-----------冒泡排序

冒泡排序: 原理: 將關鍵字較小的值不斷地上浮,將關鍵字值較大的不斷下沉;時間復雜度:O(n^2)空間復雜度:最優(即已經排好序)為0,平均空間復雜度為O(1);核心代碼:for(int i…

混戰的低代碼江湖,如何區分「李逵」和「李鬼」?

作者:APICloud 創始人劉鑫 這兩年,無論是資本層面,還是企業IT部門的關注,“低代碼”都是絕對的熱點。互聯網圈也似在一夜之間冒出了各種各樣的低代碼公司。 到底什么是低代碼?低代碼是新技術么?低代碼開發能…

關于捕獲鍵盤信息的processDialogkey方法2--具體應用

自定義控件里的keydown方法無法捕獲所有的按鍵消息的處理方法1(自定義控件里的keydown方法無法獲取的鍵值如上下左右鍵等) 處理辦法具體如下: 1、首先在自定義控件UserControl1中重寫ProcessDialogKey方法 自定義控件UserControl1中重寫Proce…

指針

指針 題目一: 計算兩數的和與差 本題要求實現一個計算輸入的兩數的和與差的簡單函數。 函數接口定義: void sum_diff( float op1, float op2, float psum, float pdiff ); 其中op1和op2是輸入的兩個實數,psum和pdiff是計算得出的和與差。 裁判…

【MapGIS精品教程】006:MapGIS根據經緯度計算各比例尺圖幅編號

己知某點的經緯度或圖幅西南圖廓點的經緯度,計算該點所在圖幅號。 例題一:某點的經度為11433′45″,緯度為3922′30″,計算所在1:250000圖幅的編號。 文章目錄 1. 公式計算編號的方法2. 軟件計算編號的方法1. 公式計算編號的方法 求解過程: 第一步,利用下列公式計算其所…

寫出一個緩存系統的偽代碼001

/*** 寫出一個緩存系統的偽代碼*/ public class CacheDemo {private Map<String, Object> map new HashMap<String, Object>();public static void main(String[] args) {// TODO Auto-generated method stub} public synchronized Object getData(String key)…

分析完百年飛機空難數據,我發現了這幾條“保命”小秘訣

來 源&#xff5c;Giao數據 數 據 | YaJie 文 章 | 張子豪,YaJie 本文爬取了飛機失事網1908-2020年空難相關數據&#xff0c;包括空難發生次數、機組和乘客的死亡人數與死亡率、不同季節的空難發生次數、空難相關文本的關鍵詞、空難高發地、空難高發航空公司、空難高發機型以…

用 QuestPDF操作生成PDF更快更高效!

QuestPDFQuestPDF是一個開源的工具庫&#xff0c;可以在.NET或者.Net Core中生成pdf文檔它提供了一個布局引擎&#xff0c;設計時考慮到了完整的分頁支持以及靈活性要求&#xff01;比市面上常見的Aspose和iTextSharp好用太多了&#xff01;GitHub地址安裝Install-Package Ques…

ASP.NET vs MVC vs WebForms

許多ASP.NET開發人員開始接觸MVC認為MVC與ASP.NET完全沒有關系&#xff0c;是一個全新的Web開發&#xff0c;事實上ASP.NET是創建WEB應用的框架而MVC是能夠用更好的方法來組織并管理代碼的一種更高級架構體系&#xff0c;所以可以稱之為ASP.NET MVC。 我們可將原來的ASP.NET稱為…

產品經理有哪些類型?

不知道大家是如何給產品經理這個職業進行分類&#xff0c; 按負責的產品&#xff1f;按等級&#xff1f;按工作年限&#xff1f;按工作方向等&#xff1f; 一、按工作內容分 1. 功能設計產品經理 最常見的了&#xff0c;負責的工作就是設計出功能來。從 APP 的界面&#xff0…

在Blazor 中自定義權限驗證

Blazor是什么Blazor 是微軟在 .NET 里推出的一個 WEB 客戶端 UI 交互的框架&#xff0c;使用 Blazor 你可以代替 JavaScript 來實現自己的頁面交互邏輯&#xff0c;可以很大程度上進行 C# 代碼的復用&#xff0c;Blazor 對于 .NET 開發人員來說是一個不錯的選擇。需求背景其實我…

看出每個應用程序最高可用內存是多少

int maxMemory (int) (Runtime.getRuntime().maxMemory() / 1024); Log.d("TAG", "Max memory is " maxMemory "KB"); 轉載于:https://www.cnblogs.com/coderwjq/p/6501639.html

中文分詞之HMM模型詳解

文章轉載自: http://yanyiwu.com/work/2014/04/07/hmm-segment-xiangjie.html HMM(Hidden Markov Model): 隱式馬爾科夫模型。 HMM模型可以應用在很多領域&#xff0c;所以它的模型參數描述一般都比較抽象&#xff0c;以下篇幅針對HMM的模型參數介紹直接使用它在中文分詞中的實…

【ArcGIS微課1000例】0035:地圖面狀符號設計教程

地圖符號是表示地圖內容的基本手段,它由形狀不同、大小不一、色彩有別的圖形和文字組成。 地圖符號是地圖的語言,是一種圖形語言。它與文字語言相比較,最大的特點是形象直觀,一目了然。 本文講解ArcGIS中面狀符號設計方法。 文章目錄 一、新建符號樣式二、面狀符號設計1. 斜…

MySQL奪命15問,你能堅持到第幾問?

前言 MySQL在面試中經常被問到&#xff0c;本文總結了面試中的經典問題。 1. 數據庫三大范式是什么&#xff1f; 第一范式&#xff1a;每個列都不可以再拆分。 第二范式&#xff1a;在第一范式的基礎上&#xff0c;非主鍵列完全依賴于主鍵&#xff0c;而不能是依賴于主鍵的一部…

ios元素定位

原文地址http://www.cnblogs.com/meitian/p/7373460.html 第一種&#xff1a;通過Appium1.6的Inspector來查看 具體安裝方式前面的隨筆已經介紹了&#xff1a;http://www.cnblogs.com/meitian/p/7360017.html可以通過定位找到元素xpath或name個人不推薦用這個方法&#xff0c;實…