Kafka 系列(二)—— 基於 ZooKeeper 搭建 Kafka 高可用集羣

1、Zookeeper集羣搭建

爲保證集羣高可用,Zookeeper 集羣的節點數最好是奇數,最少有三個節點,因此這裏搭建一個三個節點的集羣。git

1.1 下載 & 解壓

下載對應版本 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

1.2 修改配置

拷貝三份 zookeeper 安裝包。分別進入安裝目錄的 conf 目錄,拷貝配置樣本 zoo_sample.cfgzoo.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 相比,只有 dataLogDirdataLogDir 不一樣:服務器

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 相比,也只有 dataLogDirdataLogDir 不一樣: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

1.3 標識節點

分別在三個節點的數據存儲目錄下新建 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.4 啓動集羣

分別啓動三個節點:

# 啓動節點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

1.5 集羣驗證

使用 jps 查看進程,而且使用 zkServer.sh status 查看集羣各個節點狀態。如圖三個節點進程均啓動成功,而且兩個節點爲 follower 節點,一個節點爲 leader 節點。

2、Kafka集羣搭建

2.1 下載解壓

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 的版本號。

2.2 拷貝配置文件

進入解壓目錄的 config 目錄下 ,拷貝三份配置文件:

# cp server.properties server-1.properties
# cp server.properties server-2.properties
# cp server.properties server-3.properties

2.3 修改配置

分別修改三份配置文件中的部分配置,以下:

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 進行配置的。

2.4 啓動集羣

分別指定不一樣配置文件,啓動三個 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

2.5 建立測試主題

建立測試主題:

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 開源項目大數據入門指南

相關文章
相關標籤/搜索