爲保證集羣高可用,Zookeeper 集羣的節點數最好是奇數,最少有三個節點,因此這裏搭建一個三個節點的集羣。git
下載對應版本 Zookeeper,這裏我下載的版本 3.4.14
。官方下載地址:https://archive.apache.org/dist/zookeeper/github
# 下載 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz # 解壓 tar -zxvf zookeeper-3.4.14.tar.gz
拷貝三份 zookeeper 安裝包。分別進入安裝目錄的 conf
目錄,拷貝配置樣本 zoo_sample.cfg
爲 zoo.cfg
並進行修改,修改後三份配置文件內容分別以下:shell
zookeeper01 配置:apache
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/01 dataLogDir=/usr/local/zookeeper-cluster/log/01 clientPort=2181 # server.1 這個1是服務器的標識,能夠是任意有效數字,標識這是第幾個服務器節點,這個標識要寫到dataDir目錄下面myid文件裏 # 指名集羣間通信端口和選舉端口 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
若是是多臺服務器,則集羣中每一個節點通信端口和選舉端口可相同,IP 地址修改成每一個節點所在主機 IP 便可。bootstrap
zookeeper02 配置,與 zookeeper01 相比,只有 dataLogDir
和 dataLogDir
不一樣:服務器
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/02 dataLogDir=/usr/local/zookeeper-cluster/log/02 clientPort=2182 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
zookeeper03 配置,與 zookeeper01,02 相比,也只有 dataLogDir
和 dataLogDir
不一樣:session
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/03 dataLogDir=/usr/local/zookeeper-cluster/log/03 clientPort=2183 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
配置參數說明:app
- tickTime:用於計算的基礎時間單元。好比 session 超時:N*tickTime;
- initLimit:用於集羣,容許從節點鏈接並同步到 master 節點的初始化鏈接時間,以 tickTime 的倍數來表示;
- syncLimit:用於集羣, master 主節點與從節點之間發送消息,請求和應答時間長度(心跳機制);
- dataDir:數據存儲位置;
- dataLogDir:日誌目錄;
- clientPort:用於客戶端鏈接的端口,默認 2181
分別在三個節點的數據存儲目錄下新建 myid
文件,並寫入對應的節點標識。Zookeeper 集羣經過 myid
文件識別集羣節點,並經過上文配置的節點通訊端口和選舉端口來進行節點通訊,選舉出 leader 節點。oop
建立存儲目錄:測試
# dataDir mkdir -vp /usr/local/zookeeper-cluster/data/01 # dataDir mkdir -vp /usr/local/zookeeper-cluster/data/02 # dataDir mkdir -vp /usr/local/zookeeper-cluster/data/03
建立並寫入節點標識到 myid
文件:
#server1 echo "1" > /usr/local/zookeeper-cluster/data/01/myid #server2 echo "2" > /usr/local/zookeeper-cluster/data/02/myid #server3 echo "3" > /usr/local/zookeeper-cluster/data/03/myid
分別啓動三個節點:
# 啓動節點1 /usr/app/zookeeper-cluster/zookeeper01/bin/zkServer.sh start # 啓動節點2 /usr/app/zookeeper-cluster/zookeeper02/bin/zkServer.sh start # 啓動節點3 /usr/app/zookeeper-cluster/zookeeper03/bin/zkServer.sh start
使用 jps 查看進程,而且使用 zkServer.sh status
查看集羣各個節點狀態。如圖三個節點進程均啓動成功,而且兩個節點爲 follower 節點,一個節點爲 leader 節點。
Kafka 安裝包官方下載地址:http://kafka.apache.org/downloads ,本用例下載的版本爲 2.2.0
,下載命令:
# 下載 wget https://www-eu.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz # 解壓 tar -xzf kafka_2.12-2.2.0.tgz
這裏 j 解釋一下 kafka 安裝包的命名規則:以
kafka_2.12-2.2.0.tgz
爲例,前面的 2.12 表明 Scala 的版本號(Kafka 採用 Scala 語言進行開發),後面的 2.2.0 則表明 Kafka 的版本號。
進入解壓目錄的 config
目錄下 ,拷貝三份配置文件:
# cp server.properties server-1.properties # cp server.properties server-2.properties # cp server.properties server-3.properties
分別修改三份配置文件中的部分配置,以下:
server-1.properties:
# The id of the broker. 集羣中每一個節點的惟一標識 broker.id=0 # 監聽地址 listeners=PLAINTEXT://hadoop001:9092 # 數據的存儲位置 log.dirs=/usr/local/kafka-logs/00 # Zookeeper鏈接地址 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
server-2.properties:
broker.id=1 listeners=PLAINTEXT://hadoop001:9093 log.dirs=/usr/local/kafka-logs/01 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
server-3.properties:
broker.id=2 listeners=PLAINTEXT://hadoop001:9094 log.dirs=/usr/local/kafka-logs/02 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
這裏須要說明的是 log.dirs
指的是數據日誌的存儲位置,確切的說,就是分區數據的存儲位置,而不是程序運行日誌的位置。程序運行日誌的位置是經過同一目錄下的 log4j.properties
進行配置的。
分別指定不一樣配置文件,啓動三個 Kafka 節點。啓動後可使用 jps 查看進程,此時應該有三個 zookeeper 進程和三個 kafka 進程。
bin/kafka-server-start.sh config/server-1.properties bin/kafka-server-start.sh config/server-2.properties bin/kafka-server-start.sh config/server-3.properties
建立測試主題:
bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 \ --replication-factor 3 \ --partitions 1 --topic my-replicated-topic
建立後可使用如下命令查看建立的主題信息:
bin/kafka-topics.sh --describe --bootstrap-server hadoop001:9092 --topic my-replicated-topic
能夠看到分區 0 的有 0,1,2 三個副本,且三個副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 爲首領副本,此時表明集羣已經搭建成功。
更多大數據系列文章能夠參見 GitHub 開源項目: 大數據入門指南