Kafka是一個分散式的事件串流處理平台,由於是分散式的系統,需要有一個能夠儲存叢集狀態(brokers、topics、partitions)、提供協調的系統,而Kafka利用Zookeeper來實現儲存叢集狀態的工作。
Zookeeper有兩個重要的功能:
- 推舉出Controller,以利執行replica leader的選舉、處理節點下線時leader replica的reassign、topic的建立及刪除
- 儲存Cluster的metadata (叢集內的broker、topics、partitions、replicas)
在部署Zookeeper時,需要設置參數、創建myid文件等等,部署完畢後還需要檢查連線是否正常,需要許多時間才能建置完成。
此專案提供了一鍵部署Zookeeper的腳本,利用Docker將Zookeeper容器化,讓使用者在建置上能夠更容易、簡單,省去大量安裝環境的時間。
./docker/start_zookeeper.sh
此腳本透過Docker啟動Zookeeper,當成功啟動Zookeeper,腳本會輸出下列命令:
=================================================
run /home/username/Documents/astraea/docker/start_broker.sh zookeeper.connect=192.168.103.24:18098 to join kafka broker
=================================================
Zookeeper會儲存叢集的狀態,每當啟動一台broker,broker都必須向Zookeeper去註冊,故在利用腳本部署broker的時候需要將Zookeeper的IP與port當作參數,讓broker知道該去向誰註冊。
成功建置Zookeeper後,腳本會輸出部署broker的命令,後面的參數zookeeper.connect
就是Zookeeper的IP及port。
/home/username/Documents/astraea/docker/start_broker.sh zookeeper.connect=192.168.103.24:18098
執行Zookeeper腳本前,可以根據使用者需求新增環境變數,修改Zookeeper的預設配置。舉例來說,若想要更改Zookeeper的預設JVM Heap size,可以使用:
env HEAP_OPTS="-Xmx2G -Xms1G" ./docker/start_zookeeper.sh