1. 概述
FineDataLink 支援使用 Kafka 作為資料同步的中間軟體,暫存來源資料庫中的資料,便於目標資料庫寫入資料,實現實時資料同步。
本文介紹 Kafka KRaft 模式的部署方案,以便後續配置管道任務
注:此範例為 Linux 系統下部署 Kafka;Kafka 建議安裝在 Linux 系統中(Kafka 也支援安裝在 Windows 中,但效能會受到限制,僅做示範使用,不建議用於生產環境 )。
注:目前産品不支援 Kafka 叢集。
2. KRaft 模式與 ZooKeeper 模式說明
在 Kafka 2.8 之前,Kafka 重度依賴 ZooKeeper 叢集做元資料管理、Controller 的選舉等(統稱為共識服務);當 ZooKeeper 叢集效能發生抖動時,Kafka 的效能也會受到很大的影響。如下圖所示:
注1:Kafka ZooKeeper 模式的部署方案請參見:部署Kafka:ZooKeeper模式
注2:Kafka KRaft 模式、ZooKeeper 模式的詳細介紹可自行百度。
在 Kafka 2.8 之後,引入了基於 Raft 協定的 KRaft 模式,支援取消對 ZooKeeper 的依賴。在 2022 年 10 月 Kafka 發佈 3.3.1 版本之後,將名為 KRaft 的新元資料管理方案標記為生產環境可用。
在此模式下,一部分 Kafka Broker 被指定為 Controller ,另一部分則為 Broker 。這些 Controller 的作用就是以前由 ZooKeeper 提供的共識服務,並且所有的元資料都將儲存在 Kafka 主題中並在內部進行管理。
KRaft 模式相比 ZooKeeper 模式的主要優勢如下:
維運簡化:只需部署 Kafka,不再依賴 ZooKeeper。
橫向擴展能力提升:Kafka 叢集能支援的 Partition 數量是衡量其橫向擴展能力的重要指標。此前這個值受 ZooKeeper 與 Controller 之間傳遞元資料的限制,只能到十萬量級,而 KRaft 模式不需要這種傳遞, 因此可以提升到百萬量級。
元資料傳播提效:元資料透過 Kafka 的 Topic 管理,並利用 Topic 的生產消費傳播,整合性更好的同時也提升了一些底層實現的效能。
3. 前提條件
1)Kafka 運作需要 Java 環境,因此需要確定伺服器中已經指定了可使用的 Java 環境(指定 JAVA_HOME環境變數)。注1:jdk版本不能低於 1.8。
注2:若 kafka 和 FineDataLink 部署在同一個伺服器上,可以使用同一個 JAVA 環境,操作步驟如下:
在 etc/profile 檔案中配置 Java環境,增加如下內容:
注:下面程式碼中%FineDataLink%更換為實際 FineDataLink 安裝路徑。
export JAVA_HOME=%FineDataLink%/jdk/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
並執行source /etc/profile儲存,使修改立即生效。
2)Kafka 效能可參考官方文檔: Apache Kafka
4. 操作步驟
4.1 下載安裝包
點選下載安裝包:Kafka 安裝包
注:Kafka KRaft 模式在生產環境使用限制:Kafka 3.3.1 之後的版本
4.2 解壓安裝包
1)上傳 kafka 安裝包。本文範例中,將安裝包上傳到/opt/kafka下。如下圖所示:
2)使用命令 tar zxvf kafka安裝包檔案名稱.tgz 解壓安裝包,例如如下圖所示:
注:(請勿直接在windows環境下解壓後,進行檔案上傳,這樣會造成檔案被修改,常見報錯:/bin/bash^M: 壞的解譯器: 沒有那個檔案或目錄)
4.3 修改 Kafka 儲存資料的目錄
注:使用者也可忽略本節內容,使用預設資料儲存位置。
Kafka 在使用時需要儲存資料到指定資料夾,因此需要建立資料夾用來存放暫存在 Kafka 中的資料。
範例在 /data 目錄下建立:kafka-logs,如下圖所示:
注:建議資料夾建立在伺服器中磁碟空間相對大的位置,資料夾位置可自行設定。
開啟/opt/kafka/kafka_2.13-3.5.1/config/kraft目錄下的 server.properties 檔案(/opt/kafka/kafka_2.13-3.5.1為 kafka 安裝目錄),找到 log.dirs=,修改資料儲存位置,把等於號後邊的值更換為建立好的給 Kafka 儲存資料的目錄,修改之後儲存。如下圖所示:
注:此處路徑為範例,使用者可根據實際情況設定儲存資料目錄位置。
4.4 修改 listeners
如果 kafka 和 FDL 不在同一個伺服器,則需要修改 server.properties 檔案的 listeners。詳情請參見:增加配置
若 kafka 和 FDL 在同一個伺服器,忽略本節內容。
注:Kafka 配置中無需指定 topic,FineDataLink 會自動建立,每張表對應一個topic。
4.5 格式化 kafka 資料儲存目錄
1)生成儲存目錄唯一ID
進入 kafka 安裝目錄的 bin 目錄下,執行下面語句生成儲存目錄唯一ID。
./kafka-storage.sh random-uuid
2)格式化儲存目錄
QRgd035ZQEqI9RPltqK7cg 為上一步生成的儲存目錄唯一ID;/opt/kafka/kafka_2.13-3.5.1 為 kafka 安裝目錄。使用者根據實際情況修改。
./kafka-storage.sh format -t QRgd035ZQEqI9RPltqK7cg -c /opt/kafka/kafka_2.13-3.5.1/config/kraft/server.properties
4.6 啟動 kafka
1)進入 Kafka 安裝目錄的 bin 目錄下,執行下面語句啟動 Kafka:
./kafka-server-start.sh -daemon ../config/kraft/server.properties
2)使用ps -ef|grep kafka語句查看 Kafka 是否啟動成功。
5. 後續步驟
安裝部署好 Kafka 後,即可在 FinedataLink 中配置传输队列
6. 維運命令
/opt/kafka/kafka_2.13-3.5.1為 kafka 安裝目錄,使用者根據實際情況修改語句。
1)可使用cat /opt/kafka/kafka_2.13-3.5.1/logs/server.log語句,查看 Kafka 服務日誌,服務日誌記錄了 Kafka 服務組件的啟動、關閉、狀態變化等資訊。
2)可使用cat /opt/kafka/kafka_2.13-3.5.1/logs/controller.log語句,查看 Kafka 控制器日誌,控制器日誌記錄了 Kafka 控制器的運作狀態和處理交易的資訊,如選舉新控制器、分配複本等。