Zookeeper3.4.14(單叢集)、Kafka_2.12-2.2.2(叢集)安裝

琅天溪發表於2020-10-13

        最近消失了一段時間,去辦理北航的非全研究生入學,迴歸校園生活感覺還不錯,好了不說廢話,記錄下Zookeeper3.4.14(單叢集)、Kafka_2.12-2.2.2(叢集)安裝。

一、單機環境搭建

1.1 下載

下載對應版本 Zookeeper,這裡我下載的版本 3.4.14 。官方下載地址:https://archive.apache.org/dist/zookeeper/

wget方式直接

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper3.4.14.tar.gz

windows下載 上傳到伺服器

直接瀏覽器輸入連結

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper3.4.14.tar.gz

1.2 解壓

tar -zxvf zookeeper-3.4.14.tar.gz

1.3 配置環境變數

vim /etc/profile
新增環境變數

export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH

使得配置的環境變數生效
source /etc/profile

1.4 修改配置

進入安裝目錄的 conf/ 目錄下,拷貝配置樣本並進行修改:
cp zoo_sample.cfg zoo.cfg
指定資料儲存目錄和日誌檔案目錄(目錄不用預先建立,程式會自動建立),修改後完整配置如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/module/zookeeper-3.4.14/data
dataLogDir=/opt/module/zookeeper-3.4.14/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

配置引數說明:

  • tickTime:用於計算的基礎時間單元。比如 session 超時:N*tickTime;
  • initLimit:用於叢集,允許從節點連線並同步到 master 節點的初始化連線時間,以 tickTime 的倍數來表示;
  • syncLimit:用於叢集, master 主節點與從節點之間傳送訊息,請求和應答時間長度(心跳機制);
  • dataDir:資料儲存位置;
  • dataLogDir:日誌目錄;
  • clientPort:用於客戶端連線的埠,預設 2181

1.5 啟動

由於已經配置過環境變數,直接使用下面命令啟動即可:
zkServer.sh start

1.6 驗證

使用 JPS 驗證程式是否已經啟動,出現 QuorumPeerMain 則代表啟動成功。

二、叢集環境搭建

為保證叢集高可用,Zookeeper 叢集的節點數最好是奇數,最少有三個節點,所以這裡演示搭建一個三
個節點的叢集。這裡我使用三臺主機進行搭建,主機名分別為 hadoop101,hadoop102,
hadoop103。
2.1 修改配置

解壓一份 zookeeper 安裝包命名zookeeper-cluster,修改其配置檔案 zoo.cfg ,內容如下。之後使用 xsync 命令(這個命令最後邊介紹)將安裝包分發
到三臺伺服器上:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/module/zookeeper-cluster/data/
dataLogDir=/opt/module/zookeeper-cluster/log/
clientPort=2181
# server.1 這個1是伺服器的標識,可以是任意有效數字,標識這是第幾個伺服器節點,這個標識要寫到dataDir目錄下面myid檔案裡
# 指名叢集間通訊埠和選舉埠
server.1=hadoop101:2287:3387
server.2=hadoop102:2287:3387
server.3=hadoop103:2287:3387

修改/etc/profile

#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-cluster
export PATH=$ZOOKEEPER_HOME/bin:$PATH

2.2 標識節點
分別在三臺主機的 dataDir 目錄下新建 myid 檔案,並寫入對應的節點標識。Zookeeper 叢集通過
myid 檔案識別叢集節點,並通過上文配置的節點通訊埠和選舉埠來進行節點通訊,選舉出
Leader 節點。
建立儲存目錄:

mkdir -vp /opt/module/zookeeper-cluster/data/

建立並分別去三個節點寫入節點標識到 myid 檔案:

# hadoop101主機
echo "1" > /opt/module/zookeeper-cluster/data/myid
# hadoop102主機
echo "2" > /opt/module/zookeeper-cluster/data/myid
# hadoop103主機
echo "3" > /opt/module/zookeeper-cluster/data/myid

2.3 啟動叢集
分別在三臺主機上,執行如下命令啟動服務:
xcall zkServer.sh start
2.4 叢集驗證
啟動後使用 xcall zkServer.sh status 檢視叢集各個節點狀態。三個節點程式均啟動成功,並
且 三個節點分別由一個 leader 節點和兩個follower 節點。

二、Kafka叢集搭建

2.1 下載解壓

Kafka 安裝包官方下載地址:http://kafka.apache.org/downloads ,本用例下載的版本為 2.2.2,下載命令:

# 下載
wget https://www-eu.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.2.tgz
# 解壓
tar -xzvf kafka_2.12-2.2.2.tgz -C /opt/module/

這裡 j 解釋一下 kafka 安裝包的命名規則:以 kafka_2.12-2.2.2.tgz 為例,前面的 2.12 代表 Scala 的版本號(Kafka 採用 Scala 語言進行開發),後面的 2.2.2 則代表 Kafka 的版本號。

2.2 配置檔案

vim /etc/profile

#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka_2.12-2.2.2
export PATH=$KAFKA_HOME/bin:$PATH

source /etc/profile

進入解壓目錄的 config 目錄下 編輯配置檔案:

vim server.properties

2.3 修改配置

分別修改配置檔案中的部分配置,如下:

# 三臺伺服器都要配置,且每個節點id必須唯一
broker.id=2

# 各伺服器寫各自的ip,這裡以hadoop102
listeners=PLAINTEXT://hadoop102:9092
advertised.listeners=PLAINTEXT://hadoop102:9092

# log.dirs 路徑自己配,單資料夾一定要存在,不會自己生成,如果路徑不存在啟動會報錯。
log.dirs=/opt/module/kafka_2.12-2.2.2/logs

# topic 允許刪除配置
delete.topic.enable=true

# 以下配置三臺伺服器都一樣
zookeeper.connect=hadoop101:2181,hadoop102:2181,hadoop103:2181
zookeeper.connection.timeout.ms=60000

這裡需要說明的是 log.dirs 指的是資料日誌的儲存位置,確切的說,就是分割槽資料的儲存位置,而不是程式執行日誌的位置。程式執行日誌的位置是通過同一目錄下的 log4j.properties 進行配置的。

2.4 啟動叢集

使用xcall 啟動三個 Kafka 節點。啟動後可以使用 xcall jps 檢視程式,此時三個節點分別應該有三個 zookeeper 程式和三個 kafka 程式。

xcall kafka-server-start.sh /opt/module/kafka_2.12-2.2.2/config/server.properties

2.5 建立測試主題

建立測試主題:

bin/kafka-topics.sh --create --bootstrap-server hadoop101:9092 \
					--replication-factor 3 \
					--partitions 1 --topic my-replicated-topic

建立後可以使用以下命令檢視建立的主題資訊:

bin/kafka-topics.sh --describe --bootstrap-server hadoop101:9092 --topic my-replicated-topic

可以看到分割槽 0 的有 0,1,2 三個副本,且三個副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 為首領副本,此時代表叢集已經搭建成功。

在hadoop101節點建立一個生產者,並指定一個topic

bin/kafka-console-producer.sh --broker-list hadoop101:9092 --topic my-replicated-topic

在hadoop102節點建立一個消費者,並訂閱一個topic

bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic my-replicated-topic --from-beginning

展示其中一個節點的topic列表

bin/kafka-topics.sh --zookeeper hadoop101:2181 --list

其他建立 flume-kafka主題

bin/kafka-topics.sh --create --bootstrap-server hadoop101:9092 \
 --replication-factor 3 \
 --partitions 1 --topic flume-kafka

檢視建立的主題

bin/kafka-topics.sh --zookeeper hadoop001:2181 --list

消費者消費

bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic flume-kafka

注意解釋一下xcall和xsync

使用前提:3個節點主機之間配置了hosts,ssh免密登入,防火牆關閉等操作

xcall:

#!/bin/bash
#在叢集的所有機器上批量執行同一條命令
if(($#==0))
then
	echo 請輸入您要操作的命令!
	exit
fi

echo 要執行的命令是$*

#迴圈執行此命令
for((i=101;i<=103;i++))
do
	echo ---------------------hadoop$i-----------------
	ssh hadoop$i $*
done

xsync:

#!/bin/bash
#校驗引數是否合法
if(($#==0))
then
	echo 請輸入要分發的檔案!
	exit;
fi
#獲取分發檔案的絕對路徑
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`

echo 要分發的檔案的路徑是:$dirpath/$filename

#迴圈執行rsync分發檔案到叢集的每條機器
for((i=101;i<=103;i++))
do
	echo ---------------------hadoop$i---------------------
	rsync -rvlt $dirpath/$filename  atguigu@hadoop$i:$dirpath
done

root 使用者可以將這兩個指令碼放置在/usr/local/bin 目錄下,並授予執行許可權

chmod 777 xcall
chmod 777 xsync

相關文章