1、zookeeper集羣安裝
node
要求:
zookeeper的 jdk 要 6以上
zookeeper生產環境版本爲 3.4.8apache
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*
如下爲主機名對應關係
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
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
而後咱們開始修改配置文件了vim
1.修改數據和快照存儲路徑,路徑爲上方設置的服務器
dataDir=/data/zpy/zookeepersession
2.在配置文件最後添加zk集羣關係app
(2888端口是leader的端口,3888端口是leader掛掉後選舉leader用到的通信渠道端口)運維
server.1=zk-kafka01:2888:3888dom
server.2=zk-kafka02:2888:3888ide
server.3=zk-kafka03:2888:3888svn
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
Using config: /app/zpy/zookeeper/bin/../conf/zoo.cfg
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]
2、kafka集羣安裝
1.下載
wget http://apache.fayea.com/kafka/0.8.2.2/kafka_2.11-0.8.2.2.tgz
版本須要注意,不要選取這個版本以前的版本,有明顯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
export KAFKA_HEAP_OPTS="-Xmx32G -Xms8G"
3.啓動
kafka啓動(必定後臺啓動):
./kafka-server-start.sh ../config/server.properties &
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
會接收到生產的數據信息
hello
world