如果是為了簡單的調試娘赴,安裝單機版kafka也是可以的碰声。不過生產環(huán)境肯定是需要搭建集群耍共,所以這篇博客是記錄在本地虛擬機嘗試搭建kafka的集群,為生產做準備猎塞。
環(huán)境介紹:
一试读、環(huán)境介紹
- 三臺VMware上的centos7:
192.168.220.129
192.168.220.130
192.168.220.131
先在第一臺上做好前期準備工作,然后克隆生成后兩臺 - jdk8:
java -version
我用的是系統(tǒng)自帶的:
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
二荠耽、Zookeeper集群
kafka依賴zookeeper钩骇,所以我們需要先搭建zookeeper集群。
- 創(chuàng)建文件夾
mkdir zookeeper
mkdir zookeeper/zkdata
mkdir zookeeper/zkdatalog
- 下載zookeeper
進入文件夾:cd zookeeper
推薦直接在阿里巴巴開源鏡像站下載
wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
- 解壓
tar -zxvf zookeeper-3.4.13.tar.gz
- 復制一份配置文件:zoo.cfg
cd zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
- 編輯配置文件
vim zoo.cfg
#心跳間隔
tickTime=2000
#其他服務器連接到Leader時铝量,最長能忍受的心跳間隔數:10*2000 = 20秒
initLimit=10
#發(fā)送消息時倘屹,多長忍受心跳間隔數:5*2000 = 10秒
syncLimit=5
#快照日志
dataDir=/root/myapp/zookeeper/zkdata
#事務日志
dataLogDir=/root/myapp/zookeeper/zkdatalog
#客戶端連接zookeeper服務器的端口
clientPort=2181
#可以待后續(xù)克隆完剩下兩臺后,再寫上其他兩臺的ip
server.1=192.168.220.129:2888:3888
server.2=192.168.220.130:2888:3888
server.3=192.168.220.131:2888:3888
- 克隆該虛擬機慢叨,你也可以把kafka的準備工作做好后纽匙,再統(tǒng)一克隆
如果你已經有多臺機子,則可跳過該步驟
軟件VMware中拍谐,關閉虛擬機后,右鍵點擊對應虛擬機>>管理>>克隆
為了不必要的麻煩轩拨,記得選擇:
- 修改每臺虛擬機里的zookeeper的zoo.cfg文件中的server ip信息
查看本機ip:ifconfig
- 創(chuàng)建myid文件,對應zoo.cfg里的server.1气嫁、server.2当窗、server.3
#server1
echo "1" > xxxxxxxx/zookeeper/zkdata/myid
#server2
echo "2" > xxxxxxxx/zookeeper/zkdata/myid
#server3
echo "3" > xxxxxxxx/zookeeper/zkdata/myid
- 啟動
- 每一臺:
./bin/zkServer.sh start
- 查看狀態(tài):
./bin/zkServer.sh status
- 如果狀態(tài)異常,可以查看當前目錄下的zookeeper.out日志文件
- 停止:
./bin/zkServer.sh stop
三寸宵、kafka集群
- 創(chuàng)建文件夾
mkdir kafka
- 下載
與zookeeper一樣崖面,推薦到阿里巴巴開源鏡像站下載
wget https://mirrors.aliyun.com/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz
- 解壓
tar -zxvf kafka_2.12-2.1.0.tgz
- 修改配置文件
vim kafka_2.12-2.1.0/config/server.properties
主要修改如下:
#分別是1/2/3!L萦啊N自薄!<坠鳌<蚴丁!8忻汀F呷拧!陪白!
broker.id=3
#對應ip
listeners=PLAINTEXT://192.168.220.131:9092
#對應ip
advertised.listeners=PLAINTEXT://192.168.220.131:9092
#zookeeper集群地址
zookeeper.connect=192.168.220.129:2181,192.168.220.130:2181,192.168.220.131:2181
- 啟動
./bin/kafka-server-start.sh -daemon ./config/server.properties
- 控制臺查看日志
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.220.129:9092 --topic kafka-topic
- 如果正常的話颈走,則應該不會有任何輸出信息
如果不正常,可查看詳細日志文件:
tail -fn 100 logs/server.log
- 停止
./bin/kafka-server-stop.sh
OK咱士!
四立由、Kafka Topic分區(qū)
- 在后續(xù)實踐中才了解到分區(qū)的事情轧钓,簡而言之,為了讓不同的消息往不同的kafka server發(fā)送消息锐膜,實現負載均衡
- 我們在創(chuàng)建Topic時毕箍,需要指定分區(qū)數
./bin/kafka-topics.sh --create --zookeeper zookeeper_ip1:2181,zookeeper_ip2:2181,zookeeper_ip3:2181 --replication-factor 3 --partitions 3 --topic your_topic
建議分區(qū)數為server個數的整數倍 - 或者修改分區(qū)
./bin/kafka-topics.sh --alter --zookeeper 10.12.4.38:2181,10.12.4.39:2181,10.12.4.40:2181 --topic kafka-new-topic --partitions 3
- client在發(fā)送消息時,指定往某個分區(qū)發(fā)送
- 查看指定分區(qū)的日志道盏,例如分區(qū):2
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.220.129:9092 --topic your_topic --partition 2
五而柑、其它常用命令
- 查看所有topic
bin/kafka-topics.sh --zookeeper node01:2181 --list
- 查看某個topic信息
bin/kafka-topics.sh --zookeeper node01:2181 --describe --topic your_topic
- 控制臺發(fā)送消息
bin/kafka-console-producer.sh --broker-list {kafka-ip1}:9092 --topic your_topic