一、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 &</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
會接收到生産的資料資訊