在前一篇:kafka學習1:kafka安裝 中,我們安裝了單機版的Kafka,而在實際應用中,不可能是單機版的應用,必定是以集群的方式出現。本篇介紹Kafka集群的安裝過程:
一、准備工作
1、開通Zookeeper和Kafka需要的端口
在 zookeeper-端口說明 中,我們可以看到Zookeeper需要用到3個端口,我們都需要開放這個端口。Linux開放端口,可以參考:Linux 開啟端口命令 這篇文章。
否則在啟動的時候,會出現如下錯誤(連接超時錯誤):
2、修改主機名稱
在搭建Kafka集群時,默認的主機名localhost.localmain不起作用,需要我們設置一個主機名,Linux下設置主機名可以參考:Linux修改主機名稱 這篇文章。
二、配置Zookeeper集群
這里用的是Kafka自帶的Zookeeper,修改zookeeper.properties。
Zookeeper本身有很多配置,我在這里用到的配置有如下幾項:
# the directory where the snapshot is stored.
#存儲快照文件snapshot的目錄。默認情況下,事務日志也會存儲在這里。建議同時配置參數dataLogDir, 事務日志的寫性能直接影響zk性能
dataDir=/usr/data/zookeeper_kafka
=================================================
# the port at which the clients will connect
#客戶端連接server的端口,即對外服務端口,一般設置為2181吧。
clientPort=2181
================================================
# disable the per-ip limit on the number of connections since this is a non-production config
#單個客戶端與單台服務器之間的連接數的限制,是ip級別的,默認是60,如果設置為0,那么表明不作任何限制。請注意這個限制的使用范圍,僅僅是單台客戶端機器與單#台ZK服務器之間的連接數限制,不是針對指定客戶端IP,也不是ZK集群的連接數限制,也不是單台ZK對所有客戶端的連接數限制。指定客戶端IP的限制策略,這里有一個#patch,可以嘗試一下: http://rdc.taobao.com/team/jm/archives/1334(No Java system property)
maxClientCnxns=0
=================================================
#Customer->Server通信心跳數
#ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。
tickTime=2000
==================================================
#Leader->Fllower初始通信時限
#Follower在啟動過程中,會從Leader同步所有最新數據,然后確定自己能夠對外服務的起始狀態。Leader允許F在initLimit時間內完成這個工作。通常情況下,我們不用太在意這個參數的設置。如果ZK集群的數據量確實很大了,F在啟動的時候,從Leader上同步數據的時間也會相應變長,因此在這種情況下,有必要適當調大這個參數了。(No Java system property)
initLimit=5
==================================================
#Leader->Fllower同步通信時限
#在運行過程中,Leader負責與ZK集群中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態。如果L發出心跳包在syncLimit之后,還沒有從F那里收到響應,那么就認為這個F已經不在線了。注意:不要把這個參數設置得過大,否則可能會掩蓋一些問題。(No Java system property)
syncLimit=2
================================================
#zookeeper的集群所有IP,注意數字1、2、3。
server.1=192.168.116.129:2888:3888
server.2=192.168.116.132:2888:3888
server.3=192.168.116.133:2888:3888
我們需要對應的Zookeeper服務器上在dataDir的目錄下面新建myid文件,同時把對應的1、2、3寫進去。
執行啟動zookeeper命令:/bin/zookeeper-server-start.sh config/zookeeper.properties
可以用zookeeper-shell.sh status來查看zookeeper的啟動狀態。
三、配置Kafka集群
這里修改的是server.properties文件。
#The id of the broker. This must be set to a unique integer for each broker.
#broker.id必須全集群惟一
broker.id=2
#配置kafka的監聽地址
listeners=PLAINTEXT://192.168.116.129:9092
port=9092
#配置kafka的集群信息
zookeeper.connect=192.168.116.129:2181,192.168.116.132:2181,192.168.116.133:2181
然后啟動Kafka:bin
/kafka-server-start
.sh config
/server
.properties
發送kafka消息如下:
bin
/kafka-topics
.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test20171116
再在其他的Kakfa服務器上檢查:
可以看到,我們kafka創建的topic消息已經同步到其他的broker上了。
四、參考文檔
http://kafka.apache.org/quickstart
http://blog.csdn.net/gongxinju/article/details/53415051