Kafka叢集環境依賴於Zookeeper環境。因此我們的環境搭建實際分為兩部分。Zookeeper環境搭建和Kafka環境搭建。

Zookeeper 3.4.8叢集搭建

部署安裝包

下載

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

解壓

tar -xvzf zookeeper-3.4.8.tar.gz -C ~/

配置Zookeeper

按照理解,應該只需制定Zookeeper叢集的節點資訊即可。老套路,拷貝配置檔案模版

cp conf/zoo_sample.cfg conf/zoo.cfg

配置叢集資訊

vim conf/zoo.cfg

修改內容如下

server.14=master:2888:3888
server.15=slave15:2888:3888
server.16=slave16:2888:3888

拷貝到其他節點

scp -r zookeeper-3.4.8/ slave15:~/
scp -r zookeeper-3.4.8/ slave16:~/

啟動Zookeeper

在叢集的每個節點上執行

bin/zkServer.sh start

通過檢視日誌發現啟動失敗,異常資訊:

Caused by: java.lang.IllegalArgumentException: /home/dps-hadoop/zookeeper-3.4.8/data/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:341) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:119) … 2 more

缺少myid標識檔案,即一個給節點標識的檔案。解決方案,在每個建立該檔案並寫入該節點標識即可。例如,主節點上:

echo 14 > /home/dps-hadoop/zookeeper-3.4.8/data/myid

注意,這裡的myid編號,要跟zoo.cfg裡配置的server.${myid}匹配,否則會報錯:

java.lang.RuntimeException: My id xx not in the peer list

Kafka叢集搭建

下載安裝包

wget http://mirrors.cnnic.cn/apache/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz

解壓

tar -xvf kafka_2.11-0.9.0.1.tgz -C ~/

配置Kafka

按照理解,應該需要配置zookeeper的地址即可。修改server.properties配置檔案

vim config/server.properties

修改內容如下

broker.id=14
log.dirs=/home/dps-hadoop/logs/kafka-logs
zookeeper.connect=master:2181,slave15:2181,slave16:2181

拷貝到其他節點,在其他節點上對應修改broker.id即可。

scp -r kafka_2.11-0.9.0.1/ slave15:~/
scp -r kafka_2.11-0.9.0.1/ slave16:~/

啟動Kafka

在每個節點上執行

bin/kafka-server-start.sh -daemon config/server.properties

驗證安裝

建立一個topic

bin/kafka-topics.sh --create --zookeeper master:2181,slave15:2181,slave16:2181 --replication-factor 3 --partitions 1 --topic dps-kafka-test-topic

檢視叢集狀態

bin/kafka-topics.sh --describe --zookeeper master:2181,slave15:2181,slave16:2181 --topic dps-kafka-test-topic

可見,此時15節點被選為Leadertopic有三個備份分別在我叢集的3個節點上。

生產訊息

bin/kafka-console-producer.sh --broker-list master:9092,slave15:9092,slave16:9092 --topic dps-kafka-test-topic
...
message one
;
message tow
^C

消費訊息

bin/kafka-console-consumer.sh --zookeeper master:2181,slave15:2181,slave16:2181 --from-beginning --topic dps-kafka-test-topic

一切ok。高可用的測試,這裡就不做了。可參考官方文件。