- 每天服務(wù)器都要安裝jdk1.8環(huán)境
- 安裝Zookeeper集群環(huán)境
- 安裝kafka集群環(huán)境
- 運(yùn)行測(cè)試


服務(wù)器環(huán)境準(zhǔn)備
- 使用vmare虛擬三臺(tái)服務(wù)器
centos6.5A: 192.168.9.200 B: 192.168.9.201 C: 192.168.9.202
安裝jdk1.8環(huán)境
- jdk-8u60-linux-x64.tar.gz,網(wǎng)盤下載地址:https://pan.baidu.com/s/1TW_Q0RyXPnLyAYLozf-5yg
提取碼:p1sb - 安裝參考文章
zookeeper集群搭建
Zookeeper集群最好是奇數(shù)個(gè)節(jié)點(diǎn),根據(jù)選舉機(jī)制,半數(shù)以上的票數(shù)才能當(dāng)選為leader(假如有兩個(gè)節(jié)點(diǎn),你選我,我選你,根據(jù)半數(shù)以上票數(shù)規(guī)則,是無(wú)法確定集群中到底是你來當(dāng)leader還是我來當(dāng).
-
tar zxvf zookeeper-3.4.10.tar.gz mv zookeeper-3.4.10.tar.gz zookeeper cd zookeeper/conf mv zoo_sample.cfg zoo.cfg -
修改zoo.cfg兩處 vim zoo.cfg
//數(shù)據(jù)目錄,注意:在/usr/local/zookeeper/data dataDir=/usr/local/zookeeper/data //日志目錄,沒有則自行創(chuàng)建 dataLogDir=/usr/local/zookeeper/logs # zookeeper服務(wù)默認(rèn)端口 clientPort=2181 # zookeeper最近的版本中有個(gè)內(nèi)嵌的管理控制臺(tái)是通過jetty啟動(dòng),該服務(wù)默認(rèn)端口是8080,這里可以自行配置 admin.serverPort=2182 //在文件末尾追加如下內(nèi)容:(集群節(jié)點(diǎn)列表) server.0=192.168.9.200:2888:3888 server.1=192.168.9.201:2888:3888 server.2=192.168.9.202:2888:3888端口2888:Zookeeper服務(wù)之間的通信端口,比如leader和follower之間的通信
端口3888:Zookeeper選舉leader用的端口 -
創(chuàng)建data和日志目錄并創(chuàng)建
myidcd /usr/local/zookeeper/ mkdir data mkdir logs cd data vim myid //將節(jié)點(diǎn)0標(biāo)識(shí)寫入myid文件中 echo 0 > myid 由于Zookeeper集群中的每一個(gè)Zk服務(wù)都會(huì)有一個(gè)唯一標(biāo)識(shí)自己的ID(zk進(jìn)程ID),這個(gè)ID應(yīng)用在myid和zoo.cfg兩個(gè)文件中,其中myid文件中存放的是當(dāng)前Zk服務(wù)的標(biāo)識(shí)ID,而zoo.cfg中以server.ID來指定當(dāng)前的Zk服務(wù)進(jìn)程對(duì)應(yīng)的是哪一臺(tái)主機(jī),當(dāng)Zk服務(wù)啟動(dòng)的時(shí)候,會(huì)首先讀取myid中的id標(biāo)識(shí),拿著這個(gè)id再去zoo.cfg文件中進(jìn)行匹配查找,查找的目的是為了弄清楚當(dāng)前Zk服務(wù)在整個(gè)ZooKeeper集群中的位置.
-
修改環(huán)境變量
vim /etc/profile### zookeeper export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATHsource /etc/profile
-
修改防火墻啟動(dòng)端口, vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT # 客戶端連接zookeeper服務(wù)端的默認(rèn)端口為218 -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT # kafka的默認(rèn)端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT重啟防火墻
/etc/init.d/iptables restart 分別在B、C兩臺(tái)主機(jī)上的ZK安裝目錄下的data目錄下創(chuàng)建
myid文件,并依次寫入值:1,2.-
分別啟動(dòng)三臺(tái)zookeeper服務(wù)。
//啟動(dòng) zkServer.sh start //查看狀態(tài) zkServer.sh status
kafka 集群搭建
kafka_2.11-1.0.0.tgz,下載地址:http://kafka.apache.org/downloads
-
解壓縮后,移動(dòng)目錄并修改名稱
mv kafka_2.11-1.0.0 /usr/local/kafka -
修改配置文件
cd kafka/config, vim server.properties// kafka節(jié)點(diǎn)位移標(biāo)識(shí) broker.id=0 //日志文件目錄(需自行創(chuàng)建) log.dirs=/usr/local/kafka/logs //kafka監(jiān)聽主機(jī)端口 listeners=PLAINTEXT://192.168.9.200:9092 //zookeeper集群配置 zookeeper.connect=192.168.9.200:2181,192.168.9.201:2181,192.168.9.202:2181 -
配置環(huán)境變量
### kafka export KAFKA_HOME=/usr/local/kafka export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$KAFKA_HOME/bin:$PATHsource /etc/profile
克隆B和C節(jié)點(diǎn)
- 通過在vmware中克隆A, 得到B和C節(jié)點(diǎn),注意:克隆完畢后網(wǎng)卡的MAC和IP都是一樣的,所以需要登陸到B和C, 分別修改MAC和IP, 通過
ifconfig -a eth1獲取到MAC,然后修改將其修改,IP修改分別修改為:B:192.168.9.201, C:192.168.9.202; - 修改B機(jī)的
zookeeper和kafka集群信息;//zookeeper vim /usr/local/zookeeper/data/myid 內(nèi)容修改為: `1` //kafka vim /usr/local/kafka/config/server.properties broker.id=1 listeners=PLAINTEXT://192.168.9.201:9092 - 修改C機(jī)的
zookeeper和kafka集群信息;//zookeeper vim /usr/local/zookeeper/data/myid 內(nèi)容修改為: `2` //kafka vim /usr/local/kafka/config/server.properties broker.id=2 listeners=PLAINTEXT://192.168.9.202:9092 - 三臺(tái)節(jié)點(diǎn)分別啟動(dòng)zookeeper
//啟動(dòng) zkServer.sh start //查看狀態(tài),可知其中一個(gè)是leader, 兩外兩個(gè)是follwer zkServer.sh status - 三臺(tái)節(jié)點(diǎn)分別啟動(dòng)kafka
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties //查看kafka是否啟動(dòng)成功 ps aux | grep kafka 或 netstat -tunlp | grep 9092

- 創(chuàng)建kafka的topic主題
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 -partitions 3 --topic myTest -
myTest主題分區(qū)為3,會(huì)在kafka集群中三個(gè)節(jié)點(diǎn)的日志kafka/logs/中看到//以下三個(gè)日志目錄 myTest代表主題名,數(shù)字0/1/2分別代表三個(gè)節(jié)點(diǎn)標(biāo)識(shí) //注意這三個(gè)節(jié)點(diǎn)標(biāo)識(shí)于brokerId不一樣, // 是kafka創(chuàng)建主題時(shí)特定的算法平均將三個(gè)分區(qū)物理文件放入到三個(gè)節(jié)點(diǎn) //日志目錄中的 00000000000000000000.log 就是真實(shí)的消息內(nèi)容 `myTest-0` `myTest-1` `myTest-2`
使用ZooInspector可視化工具查看kafka注冊(cè)到Zookeeper信息
- 參考文章
- 啟動(dòng)方式步驟,(我的windows jar包路徑:D:\lxf\Program Files\ZooInspertor\build)
java -jar zookeeper-dev-ZooInspector.jar -
連接zookeeper, 注意將超時(shí)時(shí)間session Timeout 設(shè)置長(zhǎng)一些;
image.png -
查看kafka集群及分區(qū)信息
image.png

