搭建kafka集群
Kafka官方文檔:http://kafka.apache.org
1. 安裝java
??Elasticsearch至少需要Java 8.版本的java,建議使用Oracle JDK 1.8.0_131版(官網(wǎng)建議)铅鲤。如果沒符合標準浇衬,請自行升級。本文只描述新安裝java(由于本次安裝kafka和elasticsearch在一臺服務(wù)器上所以就直接安裝java8)
[root@es-1 ~]# yum install -y java-1.8.0
[root@es-1 ~]# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)
2. 下載安裝kafka****(kafka_2.11-1.1.0****)
官方地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/1.1.0/kafka_2.11-1.1.0.tgz
百度云:鏈接:https://pan.baidu.com/s/1yW3h9P9sMvkBJP46mHIr7w 密碼:57e1
3. 上傳众羡、解壓
上傳到/opt/elk目錄
[root@es-1 ~]# cd /opt/elk/
[root@es-1 elk]# ls
kafka_2.11-1.1.0.tgz
[root@es-1 elk]# tar -xvf kafka_2.11-1.1.0.tgz
4.****相關(guān)介紹
??kafka 采用集群方式部署,測試環(huán)境部署蓖租,所以我用兩臺機器模擬出3個節(jié)點的cluster 粱侣。kafka 依賴zookeeper,zookeeper 簡稱ZK蓖宦,已經(jīng)包含在kafka的tar包里齐婴,不需要而外下載安裝,為啥要用三個節(jié)點呢稠茂?這個是zk的一個選舉leader的特性柠偶,官方推薦是奇數(shù)個server,奇數(shù)個最少3個睬关,這樣壞一個還有兩個诱担,可以正常選舉。(官方解釋:對于復制模式电爹,需要最少三個服務(wù)器蔫仙,并且強烈建議您有奇數(shù)個服務(wù)器。如果只有兩個服務(wù)器藐不,那么匀哄,如果有一個服務(wù)器失敗秦效,則沒有足夠的機器形成多數(shù)法定人數(shù)。兩個服務(wù)器本質(zhì)上不如單個服務(wù)器穩(wěn)定涎嚼,因為有兩個單點故障阱州。)
由于是集群配置,配置之間幾乎差不多法梯,所以配置好一個苔货,直接scp到其余節(jié)點就ok了,到了其余節(jié)點把關(guān)鍵參數(shù)修改一下就行了立哑。
5. 配置zookeeper
①給zookeeper 創(chuàng)建data 目錄和logs 目錄
[root@es-1 ~]# mkdir /opt/elk/kafka/zookeeper/{data,logs} -p
②創(chuàng)建myid 文件
[root@es-1 ~]# echo 1 > /opt/elk/kafka/zookeeper/data/myid #集群其他服務(wù)器需要改動
③配置zookeeper配置文件
[root@es-1 ~]# cd /opt/elk/kafka_2.11-1.1.0/config/
[root@es-1 config]# vim zookeeper.properties
#客戶端連接端口
maxClientCnxns=0
#zk存放數(shù)據(jù)的目錄夜惭,zk 需要有一個叫做myid的文件也是放到(必須)這個目錄下
dataDir=/opt/elk/kafka/zookeeper/data
dataLogDir=/opt/elk/kafka/zookeeper/logs
clientPort=2181
#最大客戶端連接數(shù)
maxClientCnxns=20
#是作為Zookeeper服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔
tickTime=2000
#此配置表示,允許follower(相對于Leaderer言的“客戶端”)連接并同步到Leader的初始化連接時間铛绰,以tickTime為單位诈茧。當初始化連接時間超過該值,則表示連接失敗捂掰。
initLimit=10
#此配置項表示Leader與Follower之間發(fā)送消息時敢会,請求和應(yīng)答時間長度。如果follower在設(shè)置時間內(nèi)不能與leader通信这嚣,那么此follower將會被丟棄鸥昏。
syncLimit=5
#server.myid=ip:followers_connect to the leader:leader_election # server 是固定的,myid 是需要手動分配姐帚,第一個端口是follower是鏈接到leader的端口吏垮,第二個是用來選舉leader 用的port
server.1=192.168.205.155:2888:3888
server.2=192.168.205.156:2888:3888
server.3=192.168.205.157:2888:3888
注意:如果有防火墻記得開放相應(yīng)端口
6. 配置kafka
[root@es-1 ~]# cd /opt/elk/kafka_2.11-1.1.0/config/
[root@es-1 config]# vim server.properties
#每個server需要單獨配置broker id,如果不配置系統(tǒng)會自動配置罐旗。
broker.id=0 ##集群其他服務(wù)器需要改動
#消費者的訪問端口膳汪,logstash或者elasticsearch
listeners=PLAINTEXT://192.168.205.155:9092 ##集群其他服務(wù)器需要改動
#接收和發(fā)送網(wǎng)絡(luò)信息的線程數(shù)
num.network.threads=3
#服務(wù)器用于處理請求的線程數(shù),其中可能包括磁盤I/O尤莺。
num.io.threads=8
#套接字服務(wù)器使用的發(fā)送緩沖區(qū)(SO_SNDBUF)
socket.send.buffer.bytes=102400
#套接字服務(wù)器使用的接收緩沖區(qū)(SO_RCVBUF)
socket.receive.buffer.bytes=102400
#套接字服務(wù)器將接受的請求的最大大小(防止OOM)旅敷。
socket.request.max.bytes=104857600
#以逗號分隔的目錄列表,其中存儲日志文件颤霎。
log.dirs=/usr/local/kafka/logs #此目錄要先創(chuàng)建,不會自動創(chuàng)建涂滴。(如果不行就關(guān)閉此選項)
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
zookeeper.connect=192.168.205.155:2181,192.168.205.156:2181,192.168.205.157:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
7. 創(chuàng)建kafka 日志文件
[root@es-1 ~]# mkdir -p /usr/local/kafka/logs/
8.****配置集群其他節(jié)點
只需要把配置好的安裝包直接分發(fā)到不同的機器上友酱,然后修改zookeeper的myid,kafka的broker.id和listeners就可以了柔纵。
9. 啟動kafka 集群(順序是先啟動zk 缔杉,然后再啟動kafka )
①啟動zk
[root@es-1 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &
[root@es-2 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &
[root@es-3 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/zookeeper-server-start.sh zookeeper.properties >>/dev/null 2>&1 &
②驗證是否正確
#安裝nc
[root@es-1 ~]# yum -y install nc
\#使用echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經(jīng)啟動搁料。
[root@es-1 ~]# echo ruok|nc 127.0.0.1 2181
imok[root@es-1 ~]#
#查看zk的配置或详,配置正常返回證明zk service 正常
[root@es-1 ~]# echo conf | nc 127.0.0.1 2181
clientPort=2181
dataDir=/opt/elk/kafka/zookeeper/data/version-2
dataLogDir=/opt/elk/kafka/zookeeper/logs/version-2
tickTime=2000
maxClientCnxns=20
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
#stat 可以查看集群狀態(tài)
[root@es-1 ~]# echo stat|nc 127.0.0.1 2181
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
/127.0.0.1:45542[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/11
Received: 1025
Sent: 1035
Connections: 1
Outstanding: 0
Zxid: 0x100000074
Mode: follower
Node count: 28
#通過lsof 命令查看端口是否正常啟動
[root@es-1 ~]# lsof -i:2181
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 29022 root 94u IPv6 496186 0t0 TCP *:eforward (LISTEN)
# 還有如下常用命令:
ZooKeeper 支持某些特定的四字命令字母與其的交互系羞。它們大多是查詢命令,用來獲取 ZooKeeper 服務(wù)的當前狀態(tài)及相關(guān)信息霸琴。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應(yīng)的命令
可以通過命令:
echo stat|nc 127.0.0.1 2181 來查看哪個節(jié)點被選擇作為follower或者leader
echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server椒振,若回復imok表示已經(jīng)啟動。
echo dump| nc 127.0.0.1 2181 ,列出未經(jīng)處理的會話和臨時節(jié)點梧乘。
echo kill | nc 127.0.0.1 2181 ,關(guān)掉server
echo conf | nc 127.0.0.1 2181 ,輸出相關(guān)服務(wù)配置的詳細信息澎迎。
echo cons | nc 127.0.0.1 2181 ,列出所有連接到服務(wù)器的客戶端的完全的連接 / 會話的詳細信息。
echo envi |nc 127.0.0.1 2181 ,輸出關(guān)于服務(wù)環(huán)境的詳細信息(區(qū)別于 conf 命令)选调。
echo reqs | nc 127.0.0.1 2181 ,列出未經(jīng)處理的請求夹供。
echo wchs | nc 127.0.0.1 2181 ,列出服務(wù)器 watch 的詳細信息。
echo wchc | nc 127.0.0.1 2181 ,通過 session 列出服務(wù)器 watch 的詳細信息仁堪,它的輸出是一個與 watch 相關(guān)的會話的列表哮洽。
echo wchp | nc 127.0.0.1 2181 ,通過路徑列出服務(wù)器 watch 的詳細信息。它輸出一個與 session 相
③啟動kafka
[root@es-1 ~]#nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &
[root@es-2 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &
[root@es-3 ~]# nohup /opt/elk/kafka_2.11-1.1.0/bin/kafka-server-start.sh /opt/elk/kafka_2.11-1.1.0/config/server.properties >>/dev/null 2>&1 &
④檢測kafka
#測試kafka 工作是否正常弦聂,新建一個topic
[root@es-1 bin]# /opt/elk/kafka_2.11-1.1.0/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
提示以下內(nèi)容證明沒有問題 Created topic "test".
#通過list 來查看
[root@es-1 ~]# /opt/elk/kafka_2.11-1.1.0/bin/kafka-topics.sh --zookeeper 192.168.205.155:2181 --list
test
⑤報錯解決
1)如果無法啟動zk集群或者kafka集群
解決辦法:
配置文件可能寫錯鸟辅,注意myid和配置文件要一致。
或者看kafka配置文件的log.dirs=對應(yīng)的目錄是否存在
上一篇:filebeat+ELK+kafka集群搭建(二:filebeat部署)
下一篇:filebeat+ELK+kafka集群搭建(四:logstash部署)