目錄
- 1.1、概述
- 1.2、系統環境
- 1.3、ZooKeeper的作用
- 1.4、部署流程
- 1.4.1、下載安裝包
- 1.4.2、解壓文件
- 1.4.3、創建日志目錄
- 1.4.4、配置Kafka
- 1.4.5、啟動Kafka服務
- 1.4.6、啟動成功驗證
- 1.5、創建Topic測試
- 1.6、消息生產與消費測試
- 1.6.1、啟動生產者
- 1.6.2、啟動消費者
1.1、概述
????????Kafka的搭建模式包括單節點單Broker部署、單節點多Broker部署、集群部署(多節點多Broker),分別適用于不同的場景和需求,從簡單的單節點測試環境到復雜的多節點高可用生產環境。在實際部署時,應根據系統的可用性要求、數據量、并發負載等因素選擇合適的部署模式。
- 單節點單Broker部署
????????在這種部署方式中,Kafka的所有服務都運行在單個節點上,包括單個Kafka Broker。這種部署方式適用于開發或測試環境,但在生產環境中可能不是最佳選擇,因為它不具備高可用性和負載均衡的能力。 - 單節點多Broker部署
????????這種部署方式在單個節點上運行多個Kafka Broker實例。每個Broker實例有不同的配置文件,通常使用不同的端口號和日志目錄。這種方式在單臺物理機或虛擬機上提供了更好的資源利用,但仍然不具備高可用性,因為所有服務仍然依賴于單個節點的穩定性。 - 集群部署(多節點多Broker)
????????在集群部署中,Kafka Broker分布在多個物理或虛擬節點上。每個Broker實例通常都有自己的配置文件,并連接到一個共同的ZooKeeper集群,以協調和同步集群內的信息。集群部署方式提供了高可用性、容錯能力和水平擴展性,是生產環境中的首選部署方式。
1.2、系統環境
????????Kafka強依賴ZooKeeper,如果想要使用Kafka,就必須安裝ZooKeeper,ZooKeeper的安裝教程請參考Zookeeper單機版安裝部署這篇博文。Kafka中的消費偏置信息、kafka集群、topic信息會被存儲在ZooKeeper中。有人可能會說我在使用Kafka的時候就沒有安裝ZooKeeper,那是因為Kafka內置了一個ZooKeeper,一般我們不使用它。具體系統環境如下:
環境名稱 | 版本號 |
---|---|
操作系統 | CentOS Linux release 8.4.2105 |
JDK | 17.0.7 |
ZooKeeper | 3.8.4 |
Kafka | 3.7.2 |
1.3、ZooKeeper的作用
????????Zookeeper在Kafka中扮演著關鍵的角色,它提供了分布式協調和配置管理服務,對于Kafka集群的正常運行和高可用性至關重要。Zookeeper在Kafka中的作用主要包括:
- Leader選舉
????????Zookeeper負責管理Kafka集群中的Broker選舉出Leader的過程。當集群中某個Broker作為Leader發生故障時,Zookeeper會協調其他Broker選舉新的Leader,以保證Kafka集群的穩定運行。 - 配置管理
????????Zookeeper存儲了Kafka集群的關鍵元數據,包括主題配置信息、分區信息等。當這些配置需要更新時,Zookeeper確保所有Broker都可以獲取到最新的配置信息。 - 同步
????????Zookeeper在Kafka的分布式環境中保證數據的一致性。它管理Kafka集群中的所有Broker,確保它們的狀態同步。 - 節點管理
????????Zookeeper跟蹤Kafka集群中每個節點的狀態和信息。這包括節點加入或離開集群的情況,以及節點的健康狀況。 - 注冊并監控Broker,調整負載均衡
????????Kafka的每個Broker在啟動時,都會在Zookeeper中注冊,告訴Zookeeper其Broker ID。當節點失效時,Zookeeper會刪除該節點,從而監控整個集群Broker的變化,并能夠及時調整負載均衡。 - 協調生產者和消費者的訂閱關系
????????Zookeeper幫助Kafka在無狀態的條件下建立起生產者和消費者的訂閱關系,實現生產者和消費者的負載均衡。 - 偏移量管理
????????在Kafka中,Zookeeper用于提交偏移量。這樣,即使節點在任何情況下失敗了,它也可以從之前提交的偏移量中恢復。 - 其他活動
????????Zookeeper還執行其他活動,如leader檢測、分布式同步、配置管理、識別新節點何時離開或連接、集群、節點實時狀態等。
1.4、部署流程
????????本文將在操作系統為CentOS Linux release 8.4.2105、Java環境為JDK17.0.7、ZooKeeper為3.8.4版本的服務器上部署Kafka3.7.2版本,部署架構如下圖所示。具體流程如下:
1.4.1、下載安裝包
????????用戶可以自行在Apache Kafka官網 ,選擇最新穩定版本進行下載。在國內,從官網的下載速度較慢,可以從博主提供的資源地址下載:資源下載,也可以選擇國內鏡像站下載,比如阿里鏡像站:阿里鏡像 。官網下載和阿里鏡像下載如下:
????????下載文件一般為一個.tar.gz或.zip格式的壓縮包,例如 kafka_2.13-4.0.0.tgz。下載后將安裝包保存在服務器上的自定義目錄下即可,比如:/usr/local/Kafka。
1.4.2、解壓文件
????????對于.tar.gz文件,可以使用以下命令進行文件解壓。命令如下:
tar -xvzf kafka_2.13-3.7.2.tgz
????????解壓后,將會生成一個名為 kafka_2.13-3.7.2的目錄,該目錄即為Kafka的安裝目錄。為了方便配置,可以重命名 Kafka 安裝目錄。解壓后的目錄結構如下:
1.4.3、創建日志目錄
????????根據Kafka的配置要求,需要創建一個目錄用于存放日志。命令如下:
mkdir /data/kafka/logs
1.4.4、配置Kafka
????????進入kafka_2.13-3.7.2/config目錄,使用文本編輯器(如 vi、nano 或 emacs)打開server.properties文件并進行如下配置:# 數據存儲路徑 log.dirs=/data/kafka/logs # 監聽地址 listeners=PLAINTEXT://:9092 # ZooKeeper 地址 zookeeper.connect=localhost:2181。最終配置文件如下:
1.4.5、啟動Kafka服務
????????啟動服務時先要啟動ZooKeeper,再啟動Kafka;關閉服務時先要關閉Kafka,在關閉ZooKeeper。啟動Kafka時,先進入 kafka_2.13-3.7.2/bin 目錄,執行 ./kafka-server-start.sh ../config/server.properties 命令啟動 Kafka服務,啟動成功后的效果如下:
1.4.6、啟動成功驗證
????????出現上述界面后,但是并不能保證Kafka已經啟動成功,輸入jps查看進程,如果可以看到Kafka進程,表示啟動成功。具體如下:
1.5、創建Topic測試
????????創建Topic時,先進入 kafka_2.13-3.7.2/bin 目錄,執行 ./kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1 命令創建一個名為test-topic的主題,創建成功后的效果如下:
????????也可以通過./kafka-topics.sh --list --bootstrap-server localhost:9092命令查看所有的主題列表,具體如下所示:
1.6、消息生產與消費測試
1.6.1、啟動生產者
????????啟動生產者時,先進入 kafka_2.13-3.7.2/bin 目錄,執行 ./kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092命令后就可以向名為test-topic的主題中生產消息,效果如下:
1.6.2、啟動消費者
????????啟動消費者時,先進入 kafka_2.13-3.7.2/bin 目錄,執行 ./kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092命令后就可以消費名為test-topic的主題中的消息,效果如下: