關於kafka的工做機制,已經在上篇博文:Kafka原理及單機部署中詳細寫出來,這裏只是將kafka的一個羣集部署寫了出來。bootstrap
博文大綱:
1、環境準備
2、部署zookeeper服務
3、部署kafka集羣socket
部署kafka羣集所需的安裝包,能夠從個人網盤連接中下載。ide
#部署zookeeper [root@kafka01 src]# tar zxf zookeeper-3.4.9.tar.gz [root@kafka01 src]# mv zookeeper-3.4.9 /usr/local/zookeeper #修改配置文件 [root@kafka01 src]# cd /usr/local/zookeeper/conf/ [root@kafka01 conf]# cp -p zoo_sample.cfg zoo.cfg [root@kafka01 conf]# sed -i 's/dataDir=\/tmp\/zookeeper/dataDir=\/usr\/local\/zookeeper\/data/g' zoo.cfg #直接羣集節點信息,2888和3888端口用於羣集內部通訊 [root@kafka01 conf]# echo "server.1 192.168.20.2:2888:3888" >> zoo.cfg [root@kafka01 conf]# echo "server.2 192.168.20.3:2888:3888" >> zoo.cfg [root@kafka01 conf]# echo "server.3 192.168.20.4:2888:3888" >> zoo.cfg [root@kafka01 conf]# egrep -v '^$|^#' zoo.cfg #更改後的配置文件以下 tickTime=2000 #節點之間的心跳檢測時間單位爲毫秒 initLimit=10 #達到5個訪問進行同步數據 syncLimit=5 #節點之間檢查失敗次數超事後斷開相應的節點 dataDir=/usr/local/zookeeper/data #日誌文件存放路徑 clientPort=2181 #聲明參與集羣的主機 server.1 192.168.20.2:2888:3888 server.2 192.168.20.3:2888:3888 server.3 192.168.20.4:2888:3888 #建立所需目錄及設置節點的ID號 [root@kafka01 conf]# mkdir /usr/local/zookeeper/data [root@kafka01 conf]# echo 1 > /usr/local/zookeeper/data/myid #將配置好的zookeeper目錄複製到羣集內的其餘節點 [root@kafka01 conf]# scp -r /usr/local/zookeeper/ root@192.168.20.3:/usr/local/ [root@kafka01 conf]# scp -r /usr/local/zookeeper/ root@192.168.20.4:/usr/local/ #啓動zookeeper服務 [root@kafka01 conf]# /usr/local/zookeeper/bin/zkServer.sh start [root@kafka01 bin]# netstat -antp | egrep '2181|2888|3888' #確認羣集端口在監聽
#修改ID號爲2 [root@kafka02 ~]# echo 2 > /usr/local/zookeeper/data/myid #啓動zookeeper [root@kafka02 ~]# /usr/local/zookeeper/bin/zkServer.sh start
#修改ID號爲3 [root@kafka03 ~]# echo 3 > /usr/local/zookeeper/data/myid #啓動zookeeper [root@kafka03 ~]# /usr/local/zookeeper/bin/zkServer.sh start
#kafka01上以下: [root@kafka01 conf]# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower #角色爲follower #kafka02上以下: [root@kafka02 ~]# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader #角色爲leader #kafka03上以下: [root@kafka03 ~]# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower #角色爲follower
#解壓至指定目錄 [root@kafka01 src]# tar zxf kafka_2.11-2.2.1.tgz [root@kafka01 src]# mv kafka_2.11-2.2.1 /usr/local/kafka #修改配置文件 [root@kafka01 src]# cd /usr/local/kafka/config/ [root@kafka01 config]# sed -i 's/broker.id=0/broker.id=1/g' server.properties [root@kafka01 config]# sed -i 's/#listeners=PLAINTEXT:\/\/:9092/listeners=PLAINTEXT:\/\/192.168.20.2:9092/g' server.properties [root@kafka01 config]# sed -i 's/#advertised.listeners=PLAINTEXT:\/\/your.host.name:9092/advertised.listeners=PLAINTEXT:\/\/192.168.20.2:9092/g' server.properties [root@kafka01 config]# sed -i 's/log.dirs=\/tmp\/kafka-logs/log.dirs=\/usr\/local\/zookeeper\/data/g' server.properties [root@kafka01 config]# sed -i 's/zookeeper.connect=localhost:2181/zookeeper.connect=192.168.20.2:2181,192.168.20.3:2181,192.168.20.4:2181/g' server.properties [root@kafka01 config]# sed -i 's/zookeeper.connection.timeout.ms=6000/zookeeper.connection.timeout.ms=600000/g' server.properties [root@kafka01 config]# egrep -v '^$|^#' server.properties #修改後的配置文件以下 broker.id=1 #kafka的ID號,這裏爲1,其餘節點依次是二、3 listeners=PLAINTEXT://192.168.20.2:9092 #節點監聽地址,填寫每一個節點本身的IP地址 advertised.listeners=PLAINTEXT://192.168.20.2:9092 #集羣中節點內部交流使用的端口,填寫每一個節點本身的IP地址 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/usr/local/zookeeper/data num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 #聲明連接zookeeper節點的地址 zookeeper.connect=192.168.20.2:2181,192.168.20.3:2181,192.168.20.4:2181 zookeeper.connection.timeout.ms=600000 #修改這的時間,單位是毫秒,爲了防止鏈接zookeeper超時 group.initial.rebalance.delay.ms=0 #將修改後的kafka目錄發送至其餘節點 [root@kafka01 config]# scp -r /usr/local/kafka root@192.168.20.3:/usr/local/ [root@kafka01 config]# scp -r /usr/local/kafka root@192.168.20.4:/usr/local/ #啓動kafka [root@kafka01 config]# cd ../bin/ [root@kafka01 bin]# ./kafka-server-start.sh ../config/server.properties &
#修改與kafka01衝突之處 [root@kafka02 ~]# cd /usr/local/kafka/ [root@kafka02 kafka]# sed -i 's/192.168.20.2/192.168.20.3/g' config/server.properties [root@kafka02 kafka]# sed -i 's/broker.id=1/broker.id=2/g' config/server.properties #啓動kafka服務 [root@kafka02 kafka]# cd bin/ [root@kafka02 bin]# ./kafka-server-start.sh ../config/server.properties & [root@kafka02 bin]# netstat -anpt | grep 9092 #肯定端口在監聽
#修改kafka配置文件中衝突之處 [root@kafka03 ~]# cd /usr/local/kafka/ [root@kafka03 kafka]# sed -i 's/192.168.20.2/192.168.20.4/g' config/server.properties [root@kafka03 kafka]# sed -i 's/broker.id=1/broker.id=3/g' config/server.properties #啓動kafka服務 [root@kafka03 kafka]# cd bin/ [root@kafka03 bin]# ./kafka-server-start.sh ../config/server.properties & [root@kafka03 bin]# netstat -anpt | grep 9092 #肯定端口在監聽
#建立名爲my-replicated-topic的topic [root@kafka01 bin]# ./kafka-topics.sh --create --bootstrap-server 192.168.20.2:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic #查看topic的狀態和leader [root@kafka01 bin]# ./kafka-topics.sh --describe --bootstrap-server 192.168.20.2:9092 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824 Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 #返回的信息表示partition數量爲1,副本數量爲3,segment字節數爲1073741824 #名稱爲「my-replicated-topic」,ID爲2的節點爲leader [root@kafka01 bin]# ./kafka-console-producer.sh --broker-list 192.168.20.2:9092 --topic my-replicated-topic #隨便寫入幾行數據 >aaaaa >bbbbb >ccccc >ddddd #在其餘節點上訂閱消息 [root@kafka02 bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.20.3:9092 --from-beginning --topic my-replicated-topic ................#省略部份內容 aaaaa bbbbb ccccc ddddd
#能夠看到當前leader是ID爲2的節點 [root@kafka01 bin]# ./kafka-topics.sh --describe --bootstrap-server 192.168.20.2:9092 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824 Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 #到kafka02主機上中止kafka服務 [root@kafka02 bin]# ./kafka-server-stop.sh #再次查看leader是哪一個節點?(能夠發現leader換成了ID爲1的節點) [root@kafka01 bin]# ./kafka-topics.sh --describe --bootstrap-server 192.168.20.2:9092 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824 Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 2,1,3 Isr: 1,3
———————— 本文至此結束,感謝閱讀 ————————測試