Kafka4.0KRaft模式的“秒級(jí)啟動(dòng)”,是不是很爽?但真正的考驗(yàn)現(xiàn)在才開始!今天,咱們就來點(diǎn)硬核的:親手搭建一個(gè)三節(jié)點(diǎn)的、準(zhǔn)生產(chǎn)級(jí)的Kafka4.0KRaft集群!
準(zhǔn)備好了嗎?系好安全帶,發(fā)車!
準(zhǔn)備工作:三臺(tái)服務(wù)器
在生產(chǎn)環(huán)境中,高可用是基本要求。我們將搭建一個(gè)包含3個(gè)節(jié)點(diǎn)的集群,這樣即使掛掉一臺(tái),服務(wù)依然堅(jiān)挺。
服務(wù)器:3臺(tái)Linux服務(wù)器(虛擬機(jī)或物理機(jī)都行)kafka-1(IP:192.168.1.11)kafka-2(IP:192.168.1.12)kafka-3(IP:192.168.1.13)
軟件:OpenJDK11或更高版本
Kafka版本:當(dāng)然是最新的4.0.0!
運(yùn)維避坑指南#1:確保三臺(tái)服務(wù)器之間網(wǎng)絡(luò)互通,并且防火墻開放了Kafka需要的端口(默認(rèn)是9092和9093)。網(wǎng)絡(luò)問題是集群搭建中最常見的“攔路虎”!
第一步:下載并解壓Kafka
在所有三臺(tái)服務(wù)器上執(zhí)行以下操作:
#下載Kafka4.0.0wgethttps://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz#解壓tar-xzfkafka_2.13-4.0.0.tgzcdkafka_2.13-4.0.0
第二步:生成集群ID
KRaft模式需要一個(gè)唯一的集群ID。我們只需要在一臺(tái)服務(wù)器上生成它,然后所有節(jié)點(diǎn)共用。
#生成一個(gè)唯一的集群IDKAFKA_CLUSTER_ID="$(bin/kafka-storage.shrandom-uuid)"echo"你的集群ID是:$KAFKA_CLUSTER_ID"
記下這個(gè)ID,比如rQ8aQ9z1Tj-mN9yZ_wXb0w,我們馬上會(huì)用到。
第三步:配置server.properties(核心中的核心!)
這是最關(guān)鍵的一步!我們需要為每個(gè)節(jié)點(diǎn)創(chuàng)建獨(dú)立的配置文件。進(jìn)入config/kraft/目錄,這里有官方的模板。我們以kafka-1為例進(jìn)行修改:
#進(jìn)入配置目錄cdconfig/kraft/#復(fù)制一份模板進(jìn)行修改cpserver.propertiesserver-1.properties
打開server-1.properties,修改以下核心配置:
#【關(guān)鍵】節(jié)點(diǎn)角色:我們讓每個(gè)節(jié)點(diǎn)都既是broker也是controllerprocess.roles=broker,controller#【關(guān)鍵】節(jié)點(diǎn)ID,每個(gè)節(jié)點(diǎn)必須唯一!#kafka-1設(shè)置為1,kafka-2設(shè)置為2,以此類推node.id=1#【關(guān)鍵】Controller投票節(jié)點(diǎn)列表#把所有Controller節(jié)點(diǎn)的node.id和IP:端口都列出來controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093#【關(guān)鍵】監(jiān)聽器配置#broker監(jiān)聽來自客戶端的連接,controller監(jiān)聽內(nèi)部Raft協(xié)議的連接listeners=PLAINTEXT://:9092,CONTROLLER://:9093#【關(guān)鍵】廣播給客戶端的地址#必須是客戶端能訪問到的地址!advertised.listeners=PLAINTEXT://192.168.1.11:9092#日志存儲(chǔ)目錄,建議使用獨(dú)立的高性能磁盤log.dirs=/var/lib/kafka/data
運(yùn)維避坑指南#2:advertised.listeners是新手的噩夢(mèng)!如果你發(fā)現(xiàn)客戶端連接不上,99%是這里配錯(cuò)了。它必須是你的生產(chǎn)者/消費(fèi)者能訪問到的IP或域名。如果是云服務(wù)器,這里通常要配置成公網(wǎng)IP。
為kafka-2和kafka-3創(chuàng)建server-2.properties和server-3.properties,內(nèi)容大部分相同,只需修改兩處:
node.id分別改為2和3。
advertised.listeners的IP分別改為192.168.1.12和192.168.1.13。
第四步:格式化存儲(chǔ)目錄
在所有三臺(tái)服務(wù)器上,使用我們之前生成的集群ID來格式化存儲(chǔ)目錄。
在kafka-1上執(zhí)行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-1.properties
在kafka-2上執(zhí)行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-2.properties
在kafka-3上執(zhí)行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-3.properties
看到Formatting...的日志就表示成功了。
第五步:?jiǎn)?dòng)集群
萬事俱備,只欠東風(fēng)!在所有三臺(tái)服務(wù)器上啟動(dòng)Kafka服務(wù)。
在kafka-1上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-1.properties
在kafka-2上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-2.properties
在kafka-3上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-3.properties
-daemon參數(shù)讓它在后臺(tái)運(yùn)行。
第六步:驗(yàn)證集群
怎么知道我們的集群是不是成功了?創(chuàng)建一個(gè)Topic試試!
在任意一臺(tái)Kafka服務(wù)器上執(zhí)行:
#創(chuàng)建一個(gè)名為"hello-kraft"的Topic,3個(gè)分區(qū),3個(gè)副本bin/kafka-topics.sh--create\--topichello-kraft\--bootstrap-server192.168.1.11:9092\--partitions3\--replication-factor3#查看Topic詳情bin/kafka-topics.sh--describe\--topichello-kraft\--bootstrap-server192.168.1.11:9092
如果你能看到Topic的分區(qū)信息,并且Leader和Replicas分布在不同的節(jié)點(diǎn)上,那么恭喜你!你的第一個(gè)生產(chǎn)級(jí)Kafka4.0KRaft集群已經(jīng)成功上線!
驚喜不斷的三本都市超能爆款小說,高能反轉(zhuǎn)
主角隱忍逆襲,《貼身醫(yī)圣》堪稱經(jīng)典,真香警告
熬夜必看的五本都市超能新鮮小說