[ Big data ] Apache Zookeeper 與 Kafka 安裝教學

上一篇 Apache Kafka 介紹 文章有提到 Kafka 基本介紹以及串接教學,但由於安裝部分是透過 Hortonworks 安裝包直接做安裝,會連同一些額外的套件一起安裝,因此本篇教學主要是以如何只安裝 Zookeeper 用來管理 Kafka 叢集為主。

Apache Zookeeper

Zookeeper 介紹

ZooKeeper 是一個開源管理分散式的服務套件,用來處理分散式應用程式協調,以Fast Paxos 演算法為基礎,實現同步服務,設定維護和命名服務等分散式應用,主要用來管理 Hadoop、Pig、Hive、Solr 等套件。
本篇文章主要也是教學如何使用 Zookeeper 來管理 Kafka 分散式叢集以及其資源配置,因此會先安裝完 Zookeeper 後,再安裝 kafka。

Zookeeper 安裝

首先大家需要先準備 1~4 台安裝好 CentOS 的主機,如果只有一台的話,那就是單節點服務;多台以上的話可以由 Zookeeper 來管理多個叢集,也可以實現高可用性。

1.修改個台主機的 Host name
該步驟主要是將每台主機的 Host name 修改為您設定的名稱以及對應的 IP,如果只有一台主機的話,就是該台主機為 Master;多台主機的話,則可以由 Master 來統一管理各台 Slave 主機,設定 Host name 步驟如下:

Master 第一台主機:

vi /etc/hosts  

剩餘其他台主機(如果只有一台主機即可略過)
第二台:

vi /etc/hosts  

接下來每台主機一樣方式去修改,如果是多台主機叢集架構,則每台主機 /etc/hosts 檔案都要是一樣的(如上圖)

2.前往 Zookeeper 網站 下載安裝包並解壓縮
下載安裝包:

wget http://ftp.mirror.tw/pub/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz  

解壓縮至 var 資料夾下:

sudo tar -zxvf zookeeper-3.4.8.tar.gz -C /var/  

3.設定 Zookeeper 參數

sudo vi /var/zookeeper-3.4.8/conf/zoo.cfg  

在 cfg 檔案中輸入下列參數後,存檔離開:

tickTime=2000  
initLimit=10  
syncLimit=5  
clientPort=2181  
dataDir=/opt/zookeeper  
server.1=master-Hadoop:2888:3888  
server.2=slave1-Hadoop:2888:3888  
server.3=slave2-Hadoop:2888:3888  
server.4=slave3-Hadoop:2888:3888  

server.1 ~ server.4 參數用於設定每台主機的 host name,如果只有一台主機的話則只留下 server.1=master-Hadoop:2888:3888 即可。

4.於每台主機創建相同資料夾並更改資料夾權限
Master 第一台主機:

mkdir -p /opt/zookeeper  

剩餘其他台主機(如果只有一台主機即可略過)
第二台:

ssh [email protected] 'sudo mkdir -p /opt/zookeeper /var/zookeeper-3.4.8'  
ssh [email protected] 'sudo chown hadoop /var/zookeeper-3.4.8 /opt/zookeeper/'  

第三台:

ssh [email protected] 'sudo mkdir -p /opt/zookeeper /var/zookeeper-3.4.8'  
ssh [email protected] 'sudo chown hadoop /var/zookeeper-3.4.8 /opt/zookeeper/'  

第四台:

ssh [email protected] 'sudo mkdir -p /opt/zookeeper /var/zookeeper-3.4.8'  
ssh [email protected] 'sudo chown hadoop /var/zookeeper-3.4.8 /opt/zookeeper/'  

5.將 Zookeeper 安裝檔從 Master 第一台主機傳至其他台主機
如果只有一台主機此步驟可略過

scp -r /var/zookeeper-3.4.8/ [email protected]:/var/  
scp -r /var/zookeeper-3.4.8/ [email protected]:/var/  
scp -r /var/zookeeper-3.4.8/ [email protected]:/var/  

6.將主機編號寫至編號設定檔中
Master 第一台主機:

sudo echo "1" > /opt/zookeeper/myid  

剩餘其他台主機(如果只有一台主機即可略過):
第二台主機:

ssh [email protected] 'sudo echo "2" > /opt/zookeeper/myid'  

第三台主機:

ssh [email protected] 'sudo echo "3" > /opt/zookeeper/myid'  

第四台主機:

ssh [email protected] 'sudo echo "4" > /opt/zookeeper/myid'  

7.啟動 Zookeeper 服務
Master 第一台主機:

/var/zookeeper-3.4.8/bin/zkServer.sh start

剩餘其他台主機(如果只有一台主機即可略過):
第二台主機:

ssh [email protected] 'sudo /var/zookeeper-3.4.8/bin/zkServer.sh start'  

第三台主機:

ssh [email protected] 'sudo /var/zookeeper-3.4.8/bin/zkServer.sh start'  

第四台主機:

ssh [email protected] 'sudo /var/zookeeper-3.4.8/bin/zkServer.sh start'  

8.查看 Zookeeper 目前狀態
Master 第一台主機:

sudo /var/zookeeper-3.4.8/bin/zkServer.sh status  

剩餘其他台主機(如果只有一台主機即可略過):

ssh [email protected] 'sudo /var/zookeeper-3.4.8/bin/zkServer.sh status'  

9.測試資料夾寫入 Zookeeper
由於 Zookeeper 在處理每台主機之間的同步是透過 File system 中的資料夾內容去同步各台主機之間的參數、狀態及資料,每台主機中的 File system 內容會是同步一樣的,因此此步驟主要是建立一個資料夾於 Zookeeper File system 中去做測試。

進入 Zookeeper command 模式

/var/zookeeper-3.4.8/bin/zkCli.sh -server 127.0.0.1:2181

建立一個名為 mytest1 的資料夾進 File system

create /mytest1 test  

將目前 File system 中的資料夾給列出

ls /  

10.重新啟動 Zookeeper

sudo /var/zookeeper-3.4.8/bin/zkServer.sh restart  

確認啟動完成,即安裝成功。

Kafka 安裝

在安裝完成 Zookeeper 後,就可以來安裝 Kafka 服務了,此部分安裝,如果有多台主機則需每台主機做一樣的步驟,安裝 Kafka。

1.前往 Kafka 網站 下載安裝包並解壓縮
下載安裝包:

wget http://apache.stu.edu.tw/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz  

解壓縮至 opt 資料夾下:

sudo tar -xzf kafka_2.12-0.10.2.0.tgz -C /opt  

2.建立資料夾的 soft link

cd /opt/  
sudo ln -s kafka_2.12-0.10.2.0 kafka  

3.新增 Kafka 使用者及設定其權限

adduser kafka  
sudo chown kafka kafka  

4.啟動 Kafka server

/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
Kafka 測試

安裝完成後,我們即可對 Kafka 進行測試,確認訊息是否可以接收以及同步。

1.啟動 Kafka server

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

2.建立 Kafka Topic channel
Topic 為訊息通道,如果對於 Topic 不了解,可以參考前一篇文章Apache Kafka 介紹

/opt/kafka/bin/kafka-topics.sh --create \
--zookeeper 140.92.27.23:2181 \
--replication-factor 1 \
--partitions 1 \
--topic test

最後一行的 Topic 後面參數 (test) 可以改成自己想要的 Topic 名稱。

3.列出目前建立的 Topic 清單

/opt/kafka/bin/kafka-topics.sh --list --zookeeper 140.92.27.23:2181

4.傳送訊息到 Kafka
由於 Kafka 預設安裝會在 9092 port,我們將訊息會丟至 Kafka server,由 Zookeeper 去同步訊息於各台主機。

/opt/kafka/bin/kafka-console-producer.sh --broker-list 140.92.27.23:9092 --topic ben

5.接收訊息
此步驟我們可以重新開一個 Terminal 視窗,用來接收 Producer 端傳送過來的訊息,收訊息會統一向 Zookeeper 要。

/opt/kafka/bin/kafka-console-consumer.sh  --zookeeper 140.92.27.23:2181 --topic ben --from-beginning

Ben Shiue

Having being a full stack engineer. His interests in Node.js, ARM mbed, IoT solutions. Contact us : [email protected]

ALL RIGHTS RESERVED. COPYRIGHT © 2016. Designed and Coded by Makee.io