1.JDK安裝
在我的部署單節點kafka的博客里有相關的方法。(https://www.cnblogs.com/ToBeExpert/p/9789486.html?)zookeeper和kafka的壓縮包下載地址也在單節點部署的這篇博客里。
1.zookeeper集群的搭建
將zookeeper.tar.gz解壓為三個目錄,例如:
以上圖中的目錄結構為例,進入./zookeeper-1/conf。找到zoo.cfg文件,如果沒有就復制一份zoo_sample.cfg并將其改名為zoo.cfg,zoo.cfg是zookeeper的配置文件。如下:
在部署zookeeper集群之前,一定要記得將已經運行的zookeeper節點停止。現在修改zoo.cfg的配置。


# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/zookeeper/zookeeper-1/zkData dataLogDir=/usr/zookeeper/zookeeper-1/zkLogs # the port at which the clients will connect clientPort=2181# the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1server.0=172.20.25.100:2890:3890
配置項含義:
tickTime: 這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個tickTime時間就會發送一個心跳。 initLimit: 這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒 syncLimit: 這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒 dataDir: 快照日志的存儲路徑 dataLogDir: 事物日志的存儲路徑,如果不配置這個那么事物日志會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產生的事物日志、快照日志太多 clientPort: 這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。如果是單機部署zookeeper集群(偽集群),每一個zookeeper節點的zoo.cfg中的clientPort都要互不相同。server.id=ip:port1:port2: server.id中的id是一個數字,同一個集群中的id不能重復,它代表這這個節點在集群中的身份,具體的使用方法是,要在dataDir配置所指定的目錄下(這個目錄必須要存在)創建一個名為myid的文件,假設集群的id為{id1,id2,id3},那么我們可以使用命令:echo "id1">myid,將id1分配給當前的結點,注意這里的{id1,id2,id3}必須是server.id中出現過的id,每個節點被分配的id不能重復。ip指的是集群所在服務器的ip地址,假如是在A、B、C三臺物理機上部署集群,其ip分別為ipA、ipB、ipC,那么部署方法是: server.1=ipA:port1:port2 server.2=ipB:port1:port2 server.3=ipC:port1:port2 在ip的后面緊跟著兩個端口,第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,集群剛啟動的時候選舉或者leader掛掉之后進行新的選舉的端口默認是3888。單機部署的時候,集群節點列表中的port1、port2互不相同。(你可以把上面的server.1、server.2、server.3視為一個節點列表)
接下來,進入每個節點的bin目錄,例如./zookeeper-1/bin/。然后使用命令:
sh zkServer.sh start
zookeeper的運行日志保存在bin目錄下的zookeeper.out中。如果運行失敗,可以查看此文件,找到出錯的問題再想辦法解決。
zookeeper集群搭建時不能馬上使用sh zkServer.sh status來查看節點的命令,因為zookeeper節點之間還有一系列的工作需要做。你需要在三個結點都啟動之后再等一會兒才能使用該命令來檢查各個zookeeper節點是否成功啟動。
如上圖,Mode:follower表示這是一個從結點,這代表該節點已經啟動成功。
Zookeeper集群搭建完畢之后,可以通過客戶端腳本連接到zookeeper集群上面,對客戶端來說,zookeeper集群是一個整體,連接到zookeeper集群實際上感覺在獨享整個集群的服務。
在節點1進行測試:執行命令sh zkCli.sh -server IP:port? IP和port是你要連接的目標節點的IP地址和clientport。
如上圖表示已經成功連接到zookeeper集群了,要退出客戶端只需要輸入quit,回車即可。
3.kafka集群搭建
下載項目的壓縮包,在服務器上創建三個文件夾(單機),每個目錄里包含的內容都是一樣的,只有配置上會有所不同,如下:
上面一共有3個目錄,依次進入,修改config子目錄下broker的配置文件:server.properties。修改完成后,依次進入三個目錄的子目錄bin目錄執行命令:
sh ./bin/kafka-server-start.sh -daemon ./config/server.properties #具體的命令執行要看你當時所處的位置
然后使用jps命令可以查看你的kafka集群是否啟動成功。
? 搭建kafka集群的操作主要是配置的問題,一個是zookeeper的相關配置,另一個是logs存儲路徑的配置。其它沒什么了。