zookeeper1:192.168.1.11
zookeeper2:192.168.1.12
zookeeper3:192.168.1.13
kafka1:192.168.1.14
kafka2:192.168.1.15
kafka3:192.168.1.16
kafka3:192.168.1.17
kafka-manager:192.168.1.18
一、下載
下載地址:
http://kafka.apache.org/downloads.html
http://mirrors.hust.edu.cn/apache/
http://zookeeper.apache.org/releases.html
已經安裝好java-1.8
[root@zookeeper1 ~]# yum install java-1.8.0
二、Zookeeper安裝
此處使用版本zookeeper-3.4.10.tar.gz
2.1 上傳解壓縮
# 下載 ZooKeeper
[root@zookeeper1 ~]# wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
# 解壓文件
[root@zookeeper1 ~]# tar -zxf zookeeper-3.4.10.tar.gz -C /opt/
[root@zookeeper1 ~]# cd /opt/
[root@zookeeper1 opt]# ln -s zookeeper-3.4.10 zookeeper
[root@zookeeper1 opt]# cd zookeeper
[root@zookeeper1 zookeeper]# cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
2.2 修改配置文件
zookeeper1,zookeeper2,zookeeper3都是同樣的配置
[root@zookeeper1 zookeeper]# vim ./conf/zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/push/kafka-test/zookeeper/data
dataLogDir=/opt/push/kafka-test/zookeeper/logs
clientPort=2181
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
[root@zookeeper1 zookeeper]# mkdir data logs
[root@zookeeper1 zookeeper]# echo '1' > /opt/zookeeper/data/myid
# 其它兩臺此處需要修改
[root@zookeeper2 zookeeper]# echo '2' > /opt/zookeeper/data/myid
[root@zookeeper3 zookeeper]# echo '3' > /opt/zookeeper/data/myid
三、Kafka安裝
此處使用版本爲kafka_2.11-1.1.0.tgz
3.1 上傳解壓縮
# 下載 Kafka
[root@kafka1 ~]# wget https://archive.apache.org/dist/kafka/1.1.0/kafka_2.11-1.1.0.tgz
# 解壓tar文件
[root@kafka1 ~]# tar -zxf kafka_2.11-1.1.0.tgz.gz -C /opt/
[root@kafka1 ~]# cd /opt/
root@kafka1 opt]# ln -s kafka_2.11-1.1.0 kafka
root@kafka1 opt]# cd kafka
3.2 修改配置文件
進入kafka的安裝配置目錄
[root@kafka1 kafka]# cp config/server.properties config/server.properties.bak # 備份kafka默認配置文件
主要關注:server.properties
這個文件即可,我們可以發現在目錄下:
有很多文件,這裏可以發現有Zookeeper文件,我們可以根據Kafka內帶的zk集羣來啓動,但是建議使用獨立的zk集羣
server.properties(broker.id和host.name每個節點都不相同)
//當前機器在集羣中的唯一標識,和zookeeper的myid性質一樣
broker.id=0
//Socket服務器偵聽的地址,當前kafka對外提供服務的端口默認是9092
listeners = PLAINTEXT://your.host.name:9092
//代理將向生產者和消費者做廣告的主機名和端口
advertised.listeners=PLAINTEXT://your.host.name:9092
//這個是borker進行網絡處理的線程數
num.network.threads=3
//這個是borker進行I/O處理的線程數
num.io.threads=8
//發送緩衝區buffer大小,數據不是一下子就發送的,先回存儲到緩衝區了到達一定的大小後在發送,能提高性能
socket.send.buffer.bytes=102400
//kafka接收緩衝區大小,當數據到達一定大小後在序列化到磁盤
socket.receive.buffer.bytes=102400
//這個參數是向kafka請求消息或者向kafka發送消息的請請求的最大數,這個值不能超過java的堆棧大小
socket.request.max.bytes=104857600
//消息存放的目錄,這個目錄可以配置爲“,”逗號分割的表達式,上面的num.io.threads要大於這個目錄的個數這個目錄,
//如果配置多個目錄,新創建的topic他把消息持久化的地方是,當前以逗號分割的目錄中,那個分區數最少就放那一個
log.dirs=/home/hadoop/log/kafka-logs
//默認的分區數,一個topic默認1個分區數
num.partitions=1
//每個數據目錄用來日誌恢復的線程數目
num.recovery.threads.per.data.dir=1
//默認消息的最大持久化時間,168小時,7天
log.retention.hours=168
//這個參數是:因爲kafka的消息是以追加的形式落地到文件,當超過這個值的時候,kafka會新起一個文件
log.segment.bytes=1073741824
//每隔300000毫秒去檢查上面配置的log失效時間
log.retention.check.interval.ms=300000
//設置zookeeper的連接端口
zookeeper.connect=localhost:2181
//設置zookeeper的連接超時時間
zookeeper.connection.timeout.ms=6000
kafka1:
[root@kafka1 kafka]# vim config/server.properties
broker.id=1 # 當前機器在集羣中的唯一標識
listeners=PLAINTEXT://192.168.1.14:9092 # 監聽端口
advertised.listeners=PLAINTEXT://192.168.1.14:9092 # 提供給生產者,消費者的端口號。可以不設置則使用listeners的值
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181/kafka # 連接zookeeper
kafka2:
[root@kafka2 kafka]# vim config/server.properties
broker.id=2 # 當前機器在集羣中的唯一標識
listeners=PLAINTEXT://192.168.1.15:9092 # 監聽端口
advertised.listeners=PLAINTEXT://192.168.1.15:9092 # 提供給生產者,消費者的端口號。可以不設置則使用listeners的值
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181/kafka # 連接zookeeper
kafka3:
[root@kafka3 kafka]# vim config/server.properties
broker.id=3 # 當前機器在集羣中的唯一標識
listeners=PLAINTEXT://192.168.1.16:9092 # 監聽端口
advertised.listeners=PLAINTEXT://192.168.1.16:9092 # 提供給生產者,消費者的端口號。可以不設置則使用listeners的值
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181/kafka # 連接zookeeper
kafka4:
[root@kafka4 kafka]# vim config/server.properties
broker.id=4 # 當前機器在集羣中的唯一標識
listeners=PLAINTEXT://192.168.1.17:9092 # 監聽端口
advertised.listeners=PLAINTEXT://192.168.1.17:9092 # 提供給生產者,消費者的端口號。可以不設置則使用listeners的值
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181/kafka # 連接zookeeper
四、啓動
3.1 首先啓動zookeeper集羣
所有zookeeper節點都需要執行
[root@zookeeper1 kafka]# ./bin/zkServer.sh start
3.2 啓動Kafka集羣服務
所有kafka節點都需要執行
[root@kafka1 kafka]# ./bin/kafka-server-start.sh config/server.properties
或者:
[root@kafka1 kafka]# ./bin/kafka-server-start.sh -daemon config/server.properties # 後臺啓動
3.3 創建的topic
[root@kafka1 kafka]# bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 3 --partitions 3 --topic topic2
3.4 查看topic副本信息
[root@kafka1 kafka]# ./bin/kafka-topics.sh --describe --zookeeper kafka1:2181 --topic topic2
3.5 查看已經創建的topic信息
[root@kafka1 kafka]# ./bin/kafka-topics.sh --list --zookeeper kafka1:2181
3.6 生產者發送消息
kafka1顯示接收到消息
[root@kafka1 kafka]# ./bin/kafka-console-producer.sh --broker-list kafka1:9092 --topic2
3.7 消費者消費消息
在kafka2上消費消息
[root@kafka2 kafka]# ./bin/kafka-console-consumer.sh --zookeeper kafka1:2181 --from-beginning --topic topic2
五、kafka-manager安裝
官網:https://github.com/yahoo/kafka-manager
[root@kafka-manager ~]# git clone https://github.com/yahoo/kafka-manager.git
[root@kafka-manager ~]# cd kafka-manager
# 部署
[root@kafka-manager kafka-manager]# ./sbt clean dist
解壓縮生成的zip文件
# 啓動
[root@kafka-manager kafka-manager]# bin/kafka-manager
[root@kafka-manager kafka-manager]# bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080