環境準備
我使用的是centos-6.7版本的3個虛擬機,主機名為hadoop01、hadoop02、hadoop03。這3臺虛擬機既是zookeeper集群,又是kafka集群(但在生產環境中,這兩個集群通常會部署在不同的機架上)。我將使用hadoop用戶來搭建集群(在生產環境中,root用戶通常不被允許隨意使用)。關于虛擬機的安裝,可以參考以下兩篇文章:在Windows中安裝一臺Linux虛擬機,以及通過已有的虛擬機克隆四臺虛擬機。Zookeeper集群參考zookeeper-3.4.10的安裝配置。Kafka安裝包的下載地址為:https://www.php.cn/link/90797bef9ef6175e04f3c9383568f9e4。
- 將Kafka安裝包上傳到服務器并解壓
[hadoop@hadoop01 ~]$ tar -zxvf /opt/soft/kafka_2.11-0.10.2.1.tgz -C /opt/apps/
- 進入Kafka的config目錄下,修改server.properties文件
[hadoop@hadoop01 ~]$ cd /opt/apps/kafka_2.11-0.10.2.1/config/ [hadoop@hadoop01 config]$ vim server.properties broker.id=1 host.name=192.168.42.101 log.dirs=/opt/data/kafka zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181
說明:
只需修改上述列出的4個配置,其余保持默認。host.name這個配置在原文件中不存在,需要手動添加,建議使用IP地址而不是主機名。這個配置在Kafka單節點或偽分布式集群中不需要設置。broker.id在每個節點上必須唯一,我設置hadoop01的broker.id=1,hadoop02的broker.id=2,hadoop03的broker.id=3。log.dirs指定Kafka數據的存儲位置,默認的tmp目錄會定期清空,因此需要修改,并且在啟動Kafka集群前需要創建指定的目錄。zookeeper.connect如果不指定,將使用Kafka自帶的Zookeeper。
- 分發安裝包
[hadoop@hadoop01 apps]$ scp -r kafka_2.11-0.10.2.1 hadoop03:`pwd`
-
分別修改hadoop02和hadoop03的broker.id和host.name
-
在每個節點下創建log.dirs指定的目錄
-
啟動Zookeeper服務
[hadoop@hadoop01 ~]$ zkServer.sh start [hadoop@hadoop02 ~]$ zkServer.sh start [hadoop@hadoop03 ~]$ zkServer.sh start
- 在3個節點上都啟動Kafka
[hadoop@hadoop01 kafka_2.11-0.10.2.1]$ bin/kafka-server-start.sh -daemon config/server.properties [hadoop@hadoop02 kafka_2.11-0.10.2.1]$ bin/kafka-server-start.sh -daemon config/server.properties [hadoop@hadoop03 kafka_2.11-0.10.2.1]$ bin/kafka-server-start.sh -daemon config/server.properties # -daemon選項的意思是后臺啟動服務
- 驗證Kafka服務是否啟動
- 測試Kafka集群
(1) 在任意節點上創建”test01″這個topic
[hadoop@hadoop01 kafka_2.11-0.10.2.1]$ bin/kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 1 --partitions 1 --topic test01
(2) 在hadoop01上開啟kafka–console-producer,向test01這個topic中寫入數據
[hadoop@hadoop01 kafka_2.11-0.10.2.1]$ bin/kafka-console-producer.sh --broker-list hadoop01:9092,hadoop02:9092,hadoop03:9092 --topic test01
(3) 在另一臺節點上開啟kafka-console-consumer,將hadoop01節點接收到的數據打印出來
[hadoop@hadoop02 kafka_2.11-0.10.2.1]$ bin/kafka-console-consumer.sh --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --topic test01 --from-beginning
Kafka集群搭建成功!