天天看點

kafka 、 zookeeper 叢集(二)

一、zookeeper叢集安裝

要求:

zookeeper的 jdk 要 6以上

zookeeper生産環境版本為 3.4.8

1.首先編輯/etc/hosts

在5台都加入:

10.0.50.10 zk-kafka01

10.0.50.11 zk-kafka02

10.0.50.12 zk-kafka03

10.0.50.13 zk-kafka04

10.0.50.14 zk-kafka05

2.更改hostname

1.vim /etc/sysconfig/network

2.hostname zk-kafka0*

以下為主機名對應關系

3.安裝軟體包

mkdir -p /app/zpy/3rd/zookeeper

mkdir -p /app/zpy/zookeeper

cd /app/zpy/3rd/zookeeper/

rz (包在svn上)

解壓

cd /app/zpy/3rd/zookeeper/zookeeper-3.4.8

cp -a * /app/zpy/zookeeper/

--------------------------------------

此處注意,按照運維标準化原則來說,此處應該 chown 目錄權限至zpy,但是擔心一組會有較多改動,前期先用root使用者,

待5台全部部署完畢後,再進行整體權限收回和切換

cd /app/zpy/zookeeper/conf

cp zoo_sample.cfg zoo.cfg (拷貝模版配置檔案生成新的配置檔案)

然後建立zk的data存放目錄

mkdir -p /data/zpy/zookeeper

然後我們開始修改配置檔案了

1.修改資料和快照存儲路徑,路徑為上方設定的

dataDir=/data/zpy/zookeeper

2.在配置檔案最後添加zk叢集關系

(2888端口是leader的端口,3888端口是leader挂掉後選舉leader用到的通訊管道端口)

server.1=zk-kafka01:2888:3888

server.2=zk-kafka02:2888:3888

server.3=zk-kafka03:2888:3888

server.4=zk-kafka04:2888:3888

server.5=zk-kafka05:2888:3888

配置檔案這就改好了

注意:

tickTime:這個時間是作為 Zookeeper 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。

dataDir:顧名思義就是Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 将寫資料的日志檔案也儲存在這個目錄裡。

clientPort:這個端口就是用戶端連接配接Zookeeper 伺服器的端口,Zookeeper 會監聽這個端口,接受用戶端的通路請求。

initLimit:這個配置項是用來配置Zookeeper 接受用戶端(這裡所說的用戶端不是使用者連接配接 Zookeeper 伺服器的用戶端,而是 Zookeeper 伺服器叢集中連接配接到 Leader 的 Follower 伺服器)初始化連接配接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 伺服器還沒有收到用戶端的傳回資訊,那麼表明這個用戶端連接配接失敗。總的時間長度就是 5*2000=10 秒

syncLimit:這個配置項辨別Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是2*2000=4 秒

server.A=B:C:D:其中 A 是一個數字,表示這個是第幾号伺服器;B 是這個伺服器的 ip 位址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的端口;D 表示的是萬一叢集中的 Leader 伺服器挂了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時伺服器互相通信的端口。如果是僞叢集的配置方式,由于 B 都是一樣,是以不同的 Zookeeper 執行個體通信端口号不能一樣,是以要給它們配置設定不同的端口号

3.建立myid檔案,并輸入編号

echo "1" > /data/zpy/zookeeper/myid

其他四台分别為 2 3 4 5

4.啟動zookeeper叢集,5台最好同時啟動,間隔時間不要相差太大

cd /app/zpy/zookeeper/bin/

./zkServer.sh start

5.檢查狀态,一個leader,4個follower

[root@zk-kafka05 bin]#./zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /app/zpy/zookeeper/bin/../conf/zoo.cfg

Mode: leader

[root@zk-kafka04 bin]# ./zkServer.sh status

ZooKeeper JMX enabled bydefault

Mode: follower

6.測試zookeeper是否正常工作,在server1上執行以下指令

# /home/wwb/zookeeper/bin/zkCli.sh -server192.168.0.2:2181,出現類似以下内容

JLine support is enabled

2013-11-27 19:59:40,560 -INFO     [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@736]-Session establishmentcomplete on server localhost.localdomain/127.0.0.1:2181, sessionid=    0x1429cdb49220000, negotiatedtimeout = 30000

WATCHER::

WatchedEventstate:SyncConnected type:None path:null

[zk: 127.0.0.1:2181(CONNECTED) 0]

二、kafka叢集安裝

1.下載下傳

<code>wget http://apache.fayea.com/kafka/0.8.2.2/kafka_2.11-0.8.2.2.tgz</code>

版本需要注意,不要選取這個版本之前的版本,有明顯bug,但是也不要選最新的,操作指令不一樣,研發還需要去學習 解壓

2.安裝、配置

最後安裝在 /app/zpy/kafka 下

修改配置檔案 config下的 server.properties

修改項:

broker.id=10 --這個id如果部署的是kafka叢集,id是不能一樣的,可以以節點ip最後一位命名。

port=9092 --預設kafka端口,如果一台機器上面部署了多個kafka執行個體,需要兩個執行個體端口不一樣

log.dirs=/data/zpy/kafka10-logs ----這個是kafka日志檔案存放路徑,預設是/tmp下的,重新開機會消                                     失,是以我們更換目錄

num.partitions=1 ---這個需要與研發商議,與資料插入順序有關。具體有研發的程式決定。如果研發                   程式中設定了3個partition,配置檔案中設定為1也不生效。配置檔案隻作為預設                     值。

zookeeper.connect=10.0.50.10:2181,10.0.50.11:2181,10.0.50.12:2181,10.0.50.13:2181,10.0.50.14:2181/kafkagroup kafka實作功能需要zookeeper排程,是以這是與zk單機或者叢集的連接配接,上面是與                   叢集連接配接的方式,也可以去掉/kafkagroup,但是zk的znode結構就會比較混亂,是以                   建議加上一個路徑。/路徑下存放znode相關資訊,最好建立一個目錄,如                           kafkagroup存放kafka叢集的資訊

zookeeper.connection.timeout.ms=6000 ----連接配接zk逾時時間

修改kafka的啟動腳本(調節啟動記憶體占用大小) cd kafka/bin

vim kafka-server-start.sh

修改28-29行

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then

3.啟動

kafka啟動(一定背景啟動):

<code>./kafka-server-start.sh ../config/server.properties &amp;</code>

4.啟動後驗證

檢視zk叢集的znode節點資訊 zk是有用戶端工具的,可以下載下傳使用,但是zk程式中也自帶了程式監測 進入zk的bin目錄下 

[root@zk-kafka01 bin]# sh zkCli.sh 

Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is enabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null 

[zk: localhost:2181(CONNECTED) 0] ls / 

[kafkagroup, zookeeper]

可以看到我們在kafka裡設定的kafkagroup

5.建立Topic(包含3個分區,2個備份副本)

## ./kafka-topics.sh --create --zookeeper 10.0.140.26:2181/kafka --replication-factor 2 --partition 3 --topic zxytest

Created topic "zxytest".

6.檢視topic情況

# cd /app/zpy/zookeeper/bin

# sh zkCli.sh

[zk: localhost:2181(CONNECTED) 1] ls /

[zk, consumers, brokers, zk01, zookeeper, kafka]

[zk: localhost:2181(CONNECTED) 2] ls /kafka/brokers/topics/

zxytest

7.模拟topic生産資料資訊

# ./kafka-console-producer.sh --broker-list 10.0.50.10:9092 --topic zxytest

模拟輸入内容

hello

world

8.模拟消費者接收資料

# ./kafka-console-consumer.sh --zookeeper 10.0.50.10:2181/kafka --topic zxytest --from-beginning

會接收到生産的資料資訊

繼續閱讀