從零搭建生產級 Kafka 4.0 集群 \uD83D\uDEE0?:KRaft 模式部署與避坑指南

【從零搭建生產級 Kafka 4.0 集群 \uD83D\uDEE0?:KRaft 模式部署與避坑指南】從零搭建生產級 Kafka 4.0 集群 \uD83D\uDEE0?:KRaft 模式部署與避坑指南

文章圖片

從零搭建生產級 Kafka 4.0 集群 \uD83D\uDEE0?:KRaft 模式部署與避坑指南

Kafka 4.0 KRaft 模式的“秒級啟動” , 是不是很爽?但真正的考驗現在才開始!今天 , 咱們就來點硬核的:親手搭建一個三節點的、準生產級的 Kafka 4.0 KRaft 集群!
準備好了嗎?系好安全帶 , 發車!



準備工作:三臺服務器在生產環境中 , 高可用是基本要求 。 我們將搭建一個包含 3 個節點的集群 , 這樣即使掛掉一臺 , 服務依然堅挺 。
  • 服務器:3 臺 Linux 服務器(虛擬機或物理機都行)kafka-1 (IP: 192.168.1.11)kafka-2 (IP: 192.168.1.12)kafka-3 (IP: 192.168.1.13)
  • 軟件:OpenJDK 11 或更高版本
  • Kafka 版本:當然是最新的 4.0.0!
運維避坑指南 #1 : 確保三臺服務器之間網絡互通 , 并且防火墻開放了 Kafka 需要的端口(默認是 9092 和 9093) 。 網絡問題是集群搭建中最常見的“攔路虎”!
第一步:下載并解壓 Kafka在 所有三臺服務器上 執行以下操作:
# 下載 Kafka 4.0.0wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz# 解壓tar -xzf kafka_2.13-4.0.0.tgzcd kafka_2.13-4.0.0第二步:生成集群 IDKRaft 模式需要一個唯一的集群 ID 。 我們 只需要在一臺服務器上 生成它 , 然后所有節點共用 。
# 生成一個唯一的集群 IDKAFKA_CLUSTER_ID=\"$(bin/kafka-storage.sh random-uuid)\"echo \"你的集群 ID 是: $KAFKA_CLUSTER_ID\"記下這個 ID , 比如 rQ8aQ9z1Tj-mN9yZ_wXb0w , 我們馬上會用到 。
第三步:配置server.properties(核心中的核心!)

這是最關鍵的一步!我們需要為 每個節點 創建獨立的配置文件 。 進入 config/kraft/ 目錄 , 這里有官方的模板 。 我們以 kafka-1 為例進行修改:
# 進入配置目錄cd config/kraft/# 復制一份模板進行修改cp server.properties server-1.properties打開 server-1.properties , 修改以下核心配置:
# 【關鍵】節點角色:我們讓每個節點都既是 broker 也是 controllerprocess.roles=brokercontroller# 【關鍵】節點 ID , 每個節點必須唯一!# kafka-1 設置為 1 kafka-2 設置為 2 以此類推node.id=1# 【關鍵】Controller 投票節點列表# 把所有 Controller 節點的 node.id 和 IP:端口 都列出來controller.quorum.voters=1@192.168.1.11:90932@192.168.1.12:90933@192.168.1.13:9093# 【關鍵】監聽器配置# broker 監聽來自客戶端的連接 , controller 監聽內部 Raft 協議的連接listeners=PLAINTEXT://:9092CONTROLLER://:9093# 【關鍵】廣播給客戶端的地址# 必須是客戶端能訪問到的地址!advertised.listeners=PLAINTEXT://192.168.1.11:9092# 日志存儲目錄 , 建議使用獨立的高性能磁盤log.dirs=/var/lib/kafka/data
運維避坑指南 #2 : advertised.listeners 是新手的噩夢!如果你發現客戶端連接不上 , 99% 是這里配錯了 。 它必須是你的生產者/消費者能訪問到的 IP 或域名 。 如果是云服務器 , 這里通常要配置成公網 IP 。
為 kafka-2 和 kafka-3 創建 server-2.properties 和 server-3.properties , 內容大部分相同 , 只需修改兩處:
  • node.id 分別改為 2 和 3 。
  • advertised.listeners 的 IP 分別改為 192.168.1.12 和 192.168.1.13 。
第四步:格式化存儲目錄在 所有三臺服務器上 , 使用我們之前生成的集群 ID 來格式化存儲目錄 。
在 kafka-1 上執行:
bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-1.properties在 kafka-2 上執行:
bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-2.properties在 kafka-3 上執行:
bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-3.properties看到 Formatting ... 的日志就表示成功了 。



第五步:啟動集群萬事俱備 , 只欠東風!在 所有三臺服務器上 啟動 Kafka 服務 。
在 kafka-1 上:
bin/kafka-server-start.sh -daemon config/kraft/server-1.properties在 kafka-2 上:
bin/kafka-server-start.sh -daemon config/kraft/server-2.properties在 kafka-3 上:
bin/kafka-server-start.sh -daemon config/kraft/server-3.properties-daemon 參數讓它在后臺運行 。
第六步:驗證集群怎么知道我們的集群是不是成功了?創建一個 Topic 試試!
在 任意一臺 Kafka 服務器上執行:
# 創建一個名為 \"hello-kraft\" 的 Topic , 3個分區 , 3個副本bin/kafka-topics.sh --create \\--topic hello-kraft \\--bootstrap-server 192.168.1.11:9092 \\--partitions 3 \\--replication-factor 3# 查看 Topic 詳情bin/kafka-topics.sh --describe \\--topic hello-kraft \\--bootstrap-server 192.168.1.11:9092如果你能看到 Topic 的分區信息 , 并且 Leader 和 Replicas 分布在不同的節點上 , 那么恭喜你! 你的第一個生產級 Kafka 4.0 KRaft 集群已經成功上線!

    推薦閱讀