【實戰】kafka3.X kraft模式集群搭建

文章目錄

前言

相信很多同學都用過Kafka2.0吧,其中需要zookepper集群來做元數據管理和集群選舉,大大增加了運維成本,而且也很是影響Kafka性能。言歸正傳今天我們就分享一期Kafka3.x Kraft模式集群搭建,簡直不要太爽。

kafka2.0與3.x對比

在這里插入圖片描述

上圖中黑色代表broker(消息代理服務),褐色/藍色代表Controller(集群控制器服務)

左圖(kafka2.0):一個集群所有節點都是broker角色,kafka從三個broker中選舉出來一個Controller控制器,控制器將集群元數據信息(比如主題分類、消費進度等)保存到zookeeper,用于集群各節點之間分布式交互。

右圖(kafka3.0):假設一個集群有四個broker,指定三個作為Conreoller角色(藍色),從三個Controller中選舉出來一個Controller作為主控制器(褐色),其他的2個備用。zookeeper不再被需要!相關的元數據信息以kafka日志的形式存在(即:以消息隊列消息的形式存在)。
controller通信端口:9093, 作用與zk的2181端口類似 。

這樣做的好處有以下幾個:

  1. Kafka 不再依賴外部框架,而是能夠獨立運行;
  2. controller 管理集群時,不再需要從 zookeeper 中先讀取數據,集群性能上升;
  3. 由于不依賴 zookeeper,集群擴展時不再受到 zookeeper 讀寫能力限制;

在搭建kafka3.0集群之前, 我們需要先做好kafka實例角色規劃。(三個broker, 需要通過主動配置指定三個作為Controller, Controller需要奇數個, 這一點和zk是一樣的)

主機名稱ip角色node.id
senfel-test192.168.112.10broker,controller1
senfel-test2192.168.112.130broker,controller2
senfel-test3192.168.112.129broker,controller3

準備工作

JDK安裝

kafka3.x不再支持JDK8,依然可用,建議安裝JDK11或JDK17。
新建kafka持久化日志數據mkdir -p /data/kafka;并保證安裝kafka的用戶具有該目錄的讀寫權限。
各個機器節點執行:

安裝jdk(kafka3.x不再支持JDK8,目前暫時還可以用,建議安裝JDK11或JDK17, 這里安裝jdk11)
下載安裝jdk省略

kafka安裝

下載kafka
在這里插入圖片描述

cd /
mkdir tools
cd tools
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
tar -xf kafka_2.12-3.5.2.tgz
chown -R kafka:kafka kafka_2.12-3.5.2*
mkdir -p /data/kafka
chown -R kafka:kafka /data/kafka

服務器增加hosts

vim /etc/hosts,各個節點,添加如下內容:
192.168.112.10 data-vm1
192.168.112.130 data-vm2
192.168.112.129 data-vm3

修改Kraft協議配置文件

在kafka3.x版本中,使用Kraft協議代替zookeeper進行集群的Controller選舉,所以要針對它進行配置。
vim /tools/kafka_2.12-3.5.2/config/kraft/server.properties

具體配置參數如下:

# data-vm1節點
node.id=1
process.roles=broker,controller
listeners=PLAINTEXT://data-vm1:9092,CONTROLLER://data-vm1:9093
advertised.listeners=PLAINTEXT://:9092
controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
log.dirs=/data/kafka/
num.partitions=3
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
# data-vm2節點
node.id=2
process.roles=broker,controller
listeners=PLAINTEXT://data-vm2:9092,CONTROLLER://data-vm2:9093
advertised.listeners=PLAINTEXT://:9092
controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
log.dirs=/data/kafka/
num.partitions=3
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
# data-vm3節點
node.id=3
process.roles=broker,controller
listeners=PLAINTEXT://data-vm3:9092,CONTROLLER://data-vm3:9093
advertised.listeners=PLAINTEXT://:9092
controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
log.dirs=/data/kafka/
num.partitions=3
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3

node.id:這將作為集群中的節點 ID,唯一標識,按照我們事先規劃好的(上文),在不同的服務器上這個值不同。其實就是kafka2.0中的broker.id,只是在3.0版本中kafka實例不再只擔任broker角色,也有可能是controller角色,所以改名叫做node節點。
process.roles:一個節點可以充當broker或controller或兩者兼而有之。按照我們事先規劃好的(上文),在不同的服務器上這個值不同。多個角色用逗號分開。
listeners: broker將使用9092端口,而kraft controller控制器將使用9093端口。
advertised.listeners: 這里指定kafka通過代理暴漏的地址,如果都是局域網使用,就配置PLAINTEXT://:9092即可。
controller.quorum.voters:這個配置用于指定controller主控選舉的投票節點,所有process.roles包含controller角色的規劃節點都要參與,即:zimug1、zimug2、zimug3。其配置格式為:node.id1@host1:9093,node.id2@host2:9093
log.dirs:kafka 將存儲數據的日志目錄,在準備工作中創建好的目錄。
num_partitions: 分區,一般根據broker數量進行確定
offset.topic.replication.factor: 副本數,一般根據broker數量進行確定

所有kafka節點都要按照上文中的節點規劃進行配置,完成config/kraft/server.properties配置文件的修改。

格式化存儲目錄

生成一個唯一的集群ID(在一臺kafka服務器上執行一次即可),這一個步驟是在安裝kafka2.0版本的時候不存在的。

sudo /tools/kafka_2.12-3.5.2/bin/kafka-storage.sh random-uuid
MsBU_ZELT2G0E0oPFX6Gxw

使用生成的集群ID+配置文件格式化存儲目錄log.dirs,
所以這一步確認配置及路徑確實存在,
并且kafka用戶有訪問權限(檢查準備工作是否做對)
主機服務器執行命令:
sudo /tools/kafka_2.12-3.5.2/bin/kafka-storage.sh format
-t MsBU_ZELT2G0E0oPFX6Gxw
-c /tools/kafka_2.12-3.5.2/config/kraft/server.properties

在這里插入圖片描述

格式化操作完成之后,log.dirs?目錄下多出一個Meta.properties文件?,存儲了當前的kafka節點的id(node.id),當前節點屬于哪個集群(cluster.id)
[root@senfel-test tools]# cd /data/kafka/
[root@senfel-test kafka]# ll
總用量 8
-rw-r–r–. 1 root root 249 6月 4 15:46 bootstrap.checkpoint
-rw-r–r–. 1 root root 86 6月 4 15:46 meta.properties
[root@senfel-test kafka]# cat meta.properties

#Tue Jun 04 15:46:15 CST 2024
cluster.id=MsBU_ZELT2G0E0oPFX6Gxw
version=1
node.id=1
[root@senfel-test kafka]#

senfel-test2:
sudo /tools/kafka_2.12-3.5.2/bin/kafka-storage.sh format
-t MsBU_ZELT2G0E0oPFX6Gxw
-c /tools/kafka_2.12-3.5.2/config/kraft/server.properties
[root@senfel-test2 tools]# cd /data/kafka/
[root@senfel-test2 kafka]# ll
總用量 8
-rw-r–r–. 1 root root 249 6月 4 15:49 bootstrap.checkpoint
-rw-r–r–. 1 root root 86 6月 4 15:49 meta.properties
[root@senfel-test2 kafka]# cat meta.properties

#Tue Jun 04 15:49:55 CST 2024
cluster.id=N2TANgN1TDyZLAbpN36IxA
version=1
node.id=2
[root@senfel-test2 kafka]#

senfel-test3
sudo /tools/kafka_2.12-3.5.2/bin/kafka-storage.sh format
-t MsBU_ZELT2G0E0oPFX6Gxw
-c /tools/kafka_2.12-3.5.2/config/kraft/server.properties
[root@senfel-test3 /]# cd /data/kafka/
[root@senfel-test3 kafka]# ll
總用量 8
-rw-r–r–. 1 root root 249 6月 4 15:52 bootstrap.checkpoint
-rw-r–r–. 1 root root 86 6月 4 15:52 meta.properties
[root@senfel-test3 kafka]# cat meta.properties

#Tue Jun 04 15:52:11 CST 2024
cluster.id=KI0RD9FcQnaXNXeq49Gjuw
version=1
node.id=3
[root@senfel-test3 kafka]#

啟動集群

有防火墻記得放行:
[root@senfel-test bin]# vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9092 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9093 -j ACCEPT

[root@senfel-test bin]# systemctl restart iptables

啟動命令:
/tools/kafka_2.12-3.5.2/bin/kafka-server-start.sh
/tools/kafka_2.12-3.5.2/config/kraft/server.properties

后臺運行:
nohup /tools/kafka_2.12-3.5.2/bin/kafka-server-start.sh
/tools/kafka_2.12-3.5.2/config/kraft/server.properties 2>&1 &

腳本:
vim kafka-start.sh

#!/bin/bash
kafkaServers='data-vm1 data-vm2 data-vm3'
#啟動所有的kafka
for kafka in $kafkaServers
dossh -T $kafka <<EOFnohup /tools/kafka_2.12-3.5.2/bin/kafka-server-start.sh /tools/kafka_2.12-3.5.2/config/kraft/server.properties 1>/dev/null 2>&1 &
EOF
echo 從節點 $kafka 啟動kafka3.0...[ done ]
sleep 5
done

chmod +x kafka-start.sh
sh kafka-start.sh

停止集群

一鍵停止kafka集群各節點的腳本,與啟動腳本的使用方式及原理是一樣的。
停止命令:
sudo /tools/kafka_2.12-3.5.2/bin/kafka-server-stop.sh

執行腳本:

#!/bin/bash
kafkaServers='data-vm1 data-vm2 data-vm3'
#停止所有的kafka
for kafka in $kafkaServers
dossh -T $kafka <<EOFcd /tools/kafka_2.12-3.5.2bin/kafka-server-stop.sh
EOF
echo 從節點 $kafka 停止kafka...[ done ]
sleep 5
done

測試Kafka集群

創建topic

[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-topics.sh
–create
–topic senfel-test-topic
–bootstrap-server data-vm1:9092

Created topic senfel-test-topic.

查看topic列表

[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-topics.sh
–list
–bootstrap-server data-vm1:9092

senfel-test-topic
[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-topics.sh --list --bootstrap-server data-vm2:9092
senfel-test-topic
[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-topics.sh --list --bootstrap-server data-vm3:9092
senfel-test-topic
[root@senfel-test2 logs]#

查看消息詳情

[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-topics.sh
–describe
–topic senfel-test-topic
–bootstrap-server data-vm1:9092

Topic: senfel-test-topic TopicId: h2Cz-yq2RYeMY3ylHuk3iw PartitionCount: 3 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: senfel-test-topic Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: senfel-test-topic Partition: 1 Leader: 2 Replicas: 2 Isr: 2
Topic: senfel-test-topic Partition: 2 Leader: 3 Replicas: 3 Isr: 3

生產消息

[root@senfel-test2 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-console-producer.sh
–topic senfel-test-topic
–bootstrap-server data-vm1:9092

消費消息

[root@senfel-test3 logs]# /tools/kafka_2.12-3.5.2/bin/kafka-console-consumer.sh
–topic senfel-test-topic
–from-beginning
–bootstrap-server data-vm2:9092
–group my-group
在這里插入圖片描述

查看消費者組

#檢查消費者postition
[root@senfel-test kafka]# sudo /tools/kafka_2.12-3.5.2/bin/kafka-consumer-groups.sh
–bootstrap-server data-vm2:9092
–describe
–all-groups

sudo /tools/kafka_2.12-3.5.2/bin/kafka-consumer-groups.sh
–bootstrap-server data-vm2:9092
–describe
–group my-group-new

GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-group senfel-test-topic 0 2 2 0 console-consumer-490ae3b3-e944-49be-a6e7-c4bae3696a0f /192.168.112.129 console-consumer
my-group senfel-test-topic 1 4 4 0 console-consumer-490ae3b3-e944-49be-a6e7-c4bae3696a0f /192.168.112.129 console-consumer
my-group senfel-test-topic 2 0 0 0 console-consumer-490ae3b3-e944-49be-a6e7-c4bae3696a0f /192.168.112.129 console-consumer
[root@senfel-test kafka]#

查看消費者組列表

[root@senfel-test kafka]# /tools/kafka_2.12-3.5.2/bin/kafka-consumer-groups.sh
–bootstrap-server data-vm1:9092
–list

my-group

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

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

相關文章

二叉樹的鏡像--c++【做題記錄】

【問題描述】 給定擴展二叉樹的前序序列&#xff0c;構建二叉樹。 求這課二叉樹的鏡像&#xff0c;并輸出其前序遍歷序列。 【輸入形式】 輸入擴展二叉樹的前序序列。 【輸出形式】 輸出鏡像二叉樹的前序遍歷序列。 【樣例輸入】 ab##cd##e## 【樣例輸出】 鏡像后二叉樹的前序遍…

功能問題:如何防止接口重復請求?

大家好&#xff0c;我是大澈&#xff01; 本文約 1400 字&#xff0c;整篇閱讀約需 3 分鐘。 防止接口重復請求在軟件開發中非常重要&#xff0c;重復請求必然會導致服務器資源的浪費。 因為每次請求都需要服務器進行處理&#xff0c;如果請求是重復的&#xff0c;那么服務…

乘船過河(ship)

合肥市第33屆信息學競賽&#xff08;2016年&#xff09; 題目描述 Description 卡卡西和小朋友們要乘船過河了&#xff0c;港口有很多條船可以租到&#xff0c;并且之間沒有區別&#xff0c;每條船的出租費用也是一樣的。但是一條船最多只能乘坐兩個人&#xff0c;且乘客的總…

STM32 IIC 使用 HAL 庫操作eeprom

在STM32上通過I2C接口&#xff08;注意&#xff1a;在標準STM32庫中&#xff0c;I2C接口通常被寫為"I2C"而不是"IIC"&#xff09;與EEPROM芯片通信時&#xff0c;你需要遵循I2C通信協議&#xff0c;并使用STM32的HAL庫或標準外設庫&#xff08;如果適用&am…

tomcat配置請求的最大參數個數和請求數據大小

maxParameterCount"10000" maxPostSize"10485760" maxParameterCount&#xff1a;單個請求最大請求參數個數&#xff1b; maxPostSize&#xff1a;單個請求最大數據大小&#xff0c;1048576010M&#xff1b;

基本算法——位運算

a^b 原題鏈接&#xff1a;登錄—專業IT筆試面試備考平臺_牛客網 題目描述 運行代碼 #include<iostream> using namespace std; long long a,b,c,t1; int main() {cin>>a>>b>>c;for(;b;b/2){if(b&1)tt*a%c;aa*a%c;}cout<<t%c; } 代碼思路…

汽車軟件 OTA技術解析

汽車軟件 OTA 技術概述 在當今汽車行業中,軟件定義汽車的概念逐漸深入人心。隨著汽車智能化和網聯化的發展,汽車軟件的重要性日益凸顯。而汽車軟件 OTA(Over-the-Air)技術作為一種重要的軟件升級和維護方式,正逐漸成為汽車行業的熱點話題。 汽車軟件 OTA 技術是指通過無線…

邏輯回歸及python實現

概述 logistic回歸是一種廣義線性回歸&#xff08;generalized linear model&#xff09;&#xff0c;因此與多重線性回歸分析有很多相同之處。它們的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求參數&#xff0c;其區別在于他們的因變量不同&#x…

App Inventor 2 復制屏幕功能,界面設計更便捷,避免誤刪組件

“復制屏幕”功能全新上線&#xff0c;中文網獨有&#xff08;MIT沒有此功能&#xff09;&#xff0c;可以復制屏幕中的普通組件、圖片、附件、拓展、代碼塊。更多升級詳情可查看發布日志。 下面演示一下屏幕的復制效果&#xff1a; 1、Screen1屏幕上有若干組件、及一個SQLit…

美業SaaS系統源碼分享-收銀管理的主要功能

美業SaaS系統 連鎖多門店美業收銀系統源碼 多門店管理 / 會員管理 / 預約管理 / 排班管理 / 商品管理 / 活動促銷 PC管理后臺、手機APP、iPad APP、微信小程序 ? 博弈美業-收銀管理功能 1、同時支持支付寶和微信支付&#xff0c;具有簡單便捷安全等優點&#xff0c;并且符…

MySQL之查詢性能優化(八)

查詢性能優化 MySQL查詢優化器的局限性 MySQL的萬能"嵌套循環"并不是對每種查詢都是最優的。不過還好&#xff0c;MySQL查詢優化器只對少部分查詢不適用&#xff0c;而且我們往往可以通過改寫查詢讓MySQL高效地完成工作。還有一個好消息&#xff0c;MySQL5.6版本正…

Java開發注意事項

注意&#xff1a;測試類中使用Autowired注解注入Bean&#xff0c;不要使用RequiredArgsConstructor注解注入Bean 正確示范: import org.springframework.boot.test.context.SpringBootTest; import org.springframework.beans.factory.annotation.Autowired;SpringBootTest c…

Ffmpeg安裝和簡單使用

Ffmpeg安裝 下載并解壓 進入官網 (https://ffmpeg.org/download.html)&#xff0c;選擇 Window 然后再打開的頁面中下滑找到 release builds&#xff0c;點擊 zip 文件下載 環境變量配置 下載好之后解壓&#xff0c;找到 bin 文件夾&#xff0c;里面有3個 .exe 文件 然后復制…

中國互聯網第一人的故事__許榕生的不平凡的經歷

中國互聯網第一人的故事&#xff3f;&#xff3f;許榕生的不平凡的經歷 目錄 零 高考之際談高考成功者 一 幸運的高考考生 二 抓住時機考研上岸 三 當年連接互聯網的經過 四 互聯網進入中國的緣由 五 互聯網一誕生就顯神威 六 互聯網強國之路&#xff0c;我們在路上 零…

優思學院|六西格瑪黑帶官方的報考條件是什么?

經常有人私信問我六西格瑪黑帶證書要如何取得&#xff0c;要學歷證明嗎&#xff1f;要帶項目嗎&#xff1f;要注冊嗎&#xff1f; 首先&#xff0c;直接一點說&#xff0c;和任何學科一樣&#xff0c;取得六西格瑪證書的方法主要是通過上課學習和考試。然而&#xff0c;關于六…

fastapi實例

quick start 安裝 pip install fastapi# ASGI服務器&#xff0c;生成環境可以使用uvicorn pip install uvicorn代碼 from fastapi import FastAPI import uvicorn# 創建一個app實例 app FastAPI()# 編寫一個路徑操作裝飾器 app.get("/") # 編寫一個路徑操作函數 …

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 內部數據讀取方法詳細介紹】

請閱讀【ARM Cache 及 MMU/MPU 系列文章專欄導讀】 及【嵌入式開發學習必備專欄】 文章目錄 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 數據讀取代碼實現Direct access to internal memory 在ARMv8架構中,緩存(Cache)是用來加速數據訪…

Apple開發者macOS描述文件創建

1.選擇Profiles然后點擊加號創建 2.選擇類型為macOS App Development然后點擊繼續 3.選擇描述類型與App ID 然后點擊繼續 4.選擇證書然后點擊繼續 5.選擇設備,然后點擊繼續 6.輸入描述文件后,點擊生成 生成成功,點擊下載描述文件 下載完成會自動打開描述文件

評判基金的重要指標(一):最大回撤率

評判基金的重要指標&#xff08;一&#xff09;&#xff1a;最大回撤率 財富奇跡創造者2023-06-14 08:00山西 問&#xff1a;如果要投資一只基金&#xff0c;如何衡量自己可能面對的風險呢&#xff1f; 答&#xff1a;衡量一個策略的風險控制能力&#xff0c;“最大回撤”是…

Facechain系列: 通過代碼進行推理

進行推理時&#xff0c;需要編輯run_inference.py中的代碼。為了避免人物肖像的版權問題&#xff0c;文章中使用的圖片不是由FaceChain實際生成的圖片&#xff0c;特此說明。 1. 以下代碼適用于Linux系統&#xff0c;如果希望在Windows系統中運行&#xff0c; folder_path f…