上一節(jié)我們介紹了kafka涉及到的相關(guān)概念,大家對(duì)kafka服務(wù)的基本結(jié)構(gòu)也有了初步的印象。這一節(jié)里我們要做的豁辉,就是動(dòng)手將上一節(jié)的kafka服務(wù)結(jié)構(gòu)部署到我們的機(jī)器上令野,搭建kafka基本的服務(wù)環(huán)境,其中會(huì)涉及到具體的zookeeper和kafka配置信息徽级,我們會(huì)進(jìn)行講解介紹气破。
在動(dòng)手部署kafka服務(wù)之前,我們先對(duì)服務(wù)器環(huán)境做一個(gè)規(guī)劃餐抢,包括kafka機(jī)器分配现使、安裝路徑和日志路徑約定等。
我們將要模擬的是3臺(tái)機(jī)器上的分布式部署旷痕,如果手頭沒(méi)有這么多機(jī)器的話碳锈,可以在同一個(gè)機(jī)器上,根據(jù)不同的端口來(lái)模擬不同機(jī)器欺抗,當(dāng)然大家也可以使用VMware虛擬機(jī)來(lái)模擬售碳。我采用了不同端口模擬的方式。
另外上一節(jié)我們提到過(guò)绞呈,Kafka集群的管理贸人,是通過(guò)zookeeper來(lái)實(shí)現(xiàn)的,我們?cè)诎惭bkafka服務(wù)前佃声,需要先安裝zookeeper服務(wù)艺智。kafka提供了內(nèi)嵌的zookeeper,實(shí)際生產(chǎn)環(huán)境下圾亏,我們通常不會(huì)使用內(nèi)嵌的zookeeper十拣,而是單獨(dú)部署一套環(huán)境。
這里我也是采用了不同端口模擬的方式志鹃。
一夭问、zookeeper服務(wù)環(huán)境搭建
先來(lái)講一下部署zookeeper環(huán)境的配置。
zookeeper環(huán)境分三臺(tái)機(jī)器曹铃,端口分配分別是:
localhost:2181甲喝;
localhost:2182;
localhost:2183铛只;
在每臺(tái)機(jī)器的相同路徑下下載安裝zookeeper。我的zookeeper版本是:zookeeper-3.4.9糠溜,安裝路徑是:/Users/cmcc/hadoop/zookeeper-1/zookeeper-3.4.9/
如果你也在本地模擬三臺(tái)機(jī)器淳玩,那么我建議路徑盡量都保持一致。我的三個(gè)zookeeper服務(wù)路徑分別為:
/Users/cmcc/hadoop/zookeeper-1/zookeeper-3.4.9
/Users/cmcc/hadoop/zookeeper-2/zookeeper-3.4.9
/Users/cmcc/hadoop/zookeeper-3/zookeeper-3.4.9
zookeeper的數(shù)據(jù)(與日志)路徑分別為:
/Users/cmcc/hadoop/tmp/zk1/data(日志路徑為log)
/Users/cmcc/hadoop/tmp/zk2/data(日志路徑為log)
/Users/cmcc/hadoop/tmp/zk3/data(日志路徑為log)
在數(shù)據(jù)路徑下提前新建一個(gè)名為myid的文件非竿,存儲(chǔ)zookeeper機(jī)器的編號(hào)(1蜕着,2,3…),這個(gè)編號(hào)用于唯一標(biāo)識(shí)一個(gè)zookeeper節(jié)點(diǎn)承匣,一定要是全局唯一的蓖乘,不能重復(fù)。
zookeeper的配置文件是/conf/zoo.cfg韧骗。以zk-1節(jié)點(diǎn)為例嘉抒,其配置內(nèi)容:
##########################################
# The number of milliseconds of each tick。
#這個(gè)時(shí)間是作為Zookeeper服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔袍暴,每隔這個(gè)時(shí)間些侍,就會(huì)發(fā)送一個(gè)心跳
tickTime=2000
# The number of ticks that the initial?synchronization phase can take。
#Zookeeper中Leader接收Follower服務(wù)器初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)
initLimit=10
# The number of ticks that can pass between?sending a request and getting an acknowledgement政模。
#標(biāo)識(shí)Leader與Follower之間發(fā)送消息岗宣,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度,最長(zhǎng)不能超過(guò)多少個(gè)心跳時(shí)間
syncLimit=5
# the directory where the snapshot is stored.
#zookeeper的數(shù)據(jù)和日志存儲(chǔ)路徑淋样,需要手動(dòng)創(chuàng)建好耗式。日志不會(huì)自動(dòng)清除,需要手動(dòng)處理趁猴。
dataDir=/Users/cmcc/hadoop/tmp/zk1/data
dataLogDir=/Users/cmcc/hadoop/tmp/zk1/log
# the port at which the clients will connect
#zookeeper client連接的端口刊咳。如果多個(gè)zk部署在同一個(gè)機(jī)器,那么每個(gè)zk的Port必須不同躲叼,否則啟動(dòng)時(shí)會(huì)提示端口沖突芦缰。
#本例中zookeeper-1、2枫慷、3的clientPort分別是:2181让蕾、2182、2183
clientPort=2181
#同一臺(tái)機(jī)器上或听,這里的兩個(gè)port必須跟上面的clientPort不同探孝,因?yàn)槿齻€(gè)port的用途都不一樣。
#下面第一個(gè)端口號(hào)表示這個(gè)zk節(jié)點(diǎn)與集群Leader信息交換的端口誉裆,第二個(gè)端口用于leader掛掉后重新選舉的信息交換端口顿颅。
#server.后面的數(shù)字(1,2,3)表示zk節(jié)點(diǎn)的編號(hào),內(nèi)容與上個(gè)步驟提到的myid文件的內(nèi)容需保持一致足丢。
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
# the maximum number of client connections.
#對(duì)于一個(gè)zk節(jié)點(diǎn)允許的最大zk-client客戶端的連接數(shù)限制粱腻,默認(rèn)是60
#maxClientCnxns=60
# The number of snapshots to retain in dataDir
#保留多少個(gè)snapshots
#autopurge.snapRetainCount=3
# Purge task interval in hours,Set to "0" to disable auto purge feature
# 每隔多少小時(shí)清理一次snapshots
#autopurge.purgeInterval=1
##########################################
zookeeper服務(wù)啟動(dòng)腳本:
sh ./zookeeper-1/zookeeper-3.4.9/bin/zkServer.sh start &
echo "zookeeper-1 starting..."
sh ./zookeeper-2/zookeeper-3.4.9/bin/zkServer.sh start &
echo "zookeeper-2 starting..."
sh ./zookeeper-3/zookeeper-3.4.9/bin/zkServer.sh start &
echo "zookeeper-3 starting..."
查看節(jié)點(diǎn)的狀態(tài)屬性:
./bin/zkServer.sh status
也可以編輯一個(gè)狀態(tài)查看腳本show_status.sh斩跌,輸入節(jié)點(diǎn)id 來(lái)查看指定節(jié)點(diǎn)的狀態(tài):
################################
#!/bin/bash
index=$1
echo "show zookeeper-$index status..."
sh ./zookeeper-$index/zookeeper-3.4.9/bin/zkServer.sh status
################################
zookeeper啟動(dòng)過(guò)程中绍些,會(huì)在三個(gè)機(jī)器之間選舉出一個(gè)leader,其他作為follower耀鸦,并在leader和follower之間進(jìn)行數(shù)據(jù)同步柬批,保持?jǐn)?shù)據(jù)一致性啸澡。