Kafka 叢集搭建 (自用)

右介發表於2017-10-18

Zookeeper叢集搭建

 

1、軟體環境
(3臺伺服器-測試環境)
192.168.56.9
192.168.56.6
192.168.56.7
1、Linux伺服器一臺、三臺、五臺、(2*n+1),Zookeeper叢集的工作是超過半數才能對外提供服務,3臺中超過兩臺超過半數,允許1臺掛掉 ,是否可以用偶數,其實沒必要。
如果有四臺那麼掛掉一臺還剩下三臺伺服器,如果在掛掉一個就不行了,這裡記住是超過半數。
2、zookeeper需要JAVA環境
 
2、配置&安裝Zookeeper
下面的操作是:3臺伺服器統一操作
1、安裝Java
  略

2、下載Zookeeper

首先要注意在生產環境中目錄結構要定義好,防止在專案過多的時候找不到所需的專案

下載Zookeeper

複製程式碼
#下載軟體
cd /opt
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz

#解壓軟體
tar -zxvf zookeeper-3.4.7.tar.gz
複製程式碼
#cd /opt/zookeeper-3.4.7

mkdir zookeeper #專案目錄
mkdir data #存放快照日誌
mkdir log#存放事物日誌

  

3、修改配置檔案

進入到解壓好的目錄裡面的conf目錄中,檢視
複製程式碼
#進入conf目錄
/opt/zookeeper-3.4.7/conf
#檢視
[root@192.168.7.107]$ ll
-rw-rw-r--. 1 1000 1000  535 Feb 20  2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 Feb 20  2014 log4j.properties
-rw-rw-r--. 1 1000 1000  922 Feb 20  2014 zoo_sample.cfg
複製程式碼

#zoo_sample.cfg  這個檔案是官方給我們的zookeeper的樣板檔案,給他複製一份命名為zoo.cfg,zoo.cfg是官方指定的檔案命名規則。

3臺伺服器的配置檔案

複製程式碼
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-3.4.7/data
dataLogDir=/opt/zookeeper-3.4.7/log
clientPort=2181
server.1=192.168.56.9:12888:13888
server.2=192.168.56.6:12888:13888
server.3=192.168.56.7:12888:13888
#server.1 這個1是伺服器的標識也可以是其他的數字, 表示這個是第幾號伺服器,用來標識伺服器,這個標識要寫到快照目錄下面myid檔案裡
#192.168.56.9等為叢集裡的IP地址,第一個埠是master和slave之間的通訊埠,預設是2888,第二個埠是leader選舉的埠,叢集剛啟動的時候選舉或者leader掛掉之後進行新的選舉的埠預設是3888
複製程式碼

配置檔案解釋:

複製程式碼
#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 會監聽這個埠,接受客戶端的訪問請求。修改他的埠改大點
複製程式碼

建立myid檔案

複製程式碼
#server1
echo "1" > /opt/zookeeper-3.4.7/data/myid
#server2
echo "2" > /opt/zookeeper-3.4.7/data/myid
#server3
echo "3" > /opt/zookeeper-3.4.7/data/myid
複製程式碼
 
4、啟動服務並檢視
1、啟動服務
#進入到Zookeeper的bin目錄下
cd /opt/zookeeper-3.4.7/bin
#啟動服務(3臺都需要操作)
./zkServer.sh start

2、檢查服務狀態

#檢查伺服器狀態
./zkServer.sh status

通過status就能看到狀態:

./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper-3.4.7/bin/../conf/zoo.cfg  #配置檔案
Mode: follower  #他是否為領導

zk叢集一般只有一個leader,多個follower,主一般是相應客戶端的讀寫請求,而從主同步資料,當主掛掉之後就會從follower裡投票選舉一個leader出來。

可以用“jps”檢視zk的程式,這個是zk的整個工程的main

#執行命令jps
20348 Jps
4233 QuorumPeerMain 

 

Kafka叢集搭建

 

1、軟體環境
1、linux一臺或多臺,大於等於2
2、已經搭建好的zookeeper叢集
3、軟體版本kafka_2.11-0.9.0.0.tgz
 
2、建立目錄並下載安裝軟體
複製程式碼
#建立目錄
cd /opt

#下載軟體
wget  http://apache.opencas.org/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz

#解壓軟體
tar -zxvf kafka_2.11-0.9.0.1.tgz
複製程式碼

 

3、修改配置檔案

進入到config目錄
cd /opt/kafka_2.11-0.9.0.0/config/

主要關注:server.properties 這個檔案即可,我們可以發現在目錄下:

有很多檔案,這裡可以發現有Zookeeper檔案,我們可以根據Kafka內帶的zk叢集來啟動,但是建議使用獨立的zk叢集

複製程式碼
-rw-r--r--. 1 root root 5699 Feb 22 09:41 192.168.7.101
-rw-r--r--. 1 root root  906 Feb 12 08:37 connect-console-sink.properties
-rw-r--r--. 1 root root  909 Feb 12 08:37 connect-console-source.properties
-rw-r--r--. 1 root root 2110 Feb 12 08:37 connect-distributed.properties
-rw-r--r--. 1 root root  922 Feb 12 08:38 connect-file-sink.properties
-rw-r--r--. 1 root root  920 Feb 12 08:38 connect-file-source.properties
-rw-r--r--. 1 root root 1074 Feb 12 08:37 connect-log4j.properties
-rw-r--r--. 1 root root 2055 Feb 12 08:37 connect-standalone.properties
-rw-r--r--. 1 root root 1199 Feb 12 08:37 consumer.properties
-rw-r--r--. 1 root root 4369 Feb 12 08:37 log4j.properties
-rw-r--r--. 1 root root 2228 Feb 12 08:38 producer.properties
-rw-r--r--. 1 root root 5699 Feb 15 18:10 server.properties
-rw-r--r--. 1 root root 3325 Feb 12 08:37 test-log4j.properties
-rw-r--r--. 1 root root 1032 Feb 12 08:37 tools-log4j.properties
-rw-r--r--. 1 root root 1023 Feb 12 08:37 zookeeper.properties
複製程式碼

修改配置檔案:

複製程式碼
broker.id=0  #當前機器在叢集中的唯一標識,和zookeeper的myid性質一樣
port=19092 #當前kafka對外提供服務的埠預設是9092
host.name=192.168.7.100 #這個引數預設是關閉的,在0.8.1有個bug,DNS解析問題,失敗率的問題。
num.network.threads=3 #這個是borker進行網路處理的執行緒數
num.io.threads=8 #這個是borker進行I/O處理的執行緒數
log.dirs=/opt/kafka/kafkalogs/ #訊息存放的目錄,這個目錄可以配置為“,”逗號分割的表示式,上面的num.io.threads要大於這個目錄的個數這個目錄,如果配置多個目錄,新建立的topic他把訊息持久化的地方是,當前以逗號分割的目錄中,那個分割槽數最少就放那一個
socket.send.buffer.bytes=102400 #傳送緩衝區buffer大小,資料不是一下子就傳送的,先回儲存到緩衝區了到達一定的大小後在傳送,能提高效能
socket.receive.buffer.bytes=102400 #kafka接收緩衝區大小,當資料到達一定大小後在序列化到磁碟
socket.request.max.bytes=104857600 #這個引數是向kafka請求訊息或者向kafka傳送訊息的請請求的最大數,這個值不能超過java的堆疊大小
num.partitions=1 #預設的分割槽數,一個topic預設1個分割槽數
log.retention.hours=168 #預設訊息的最大持久化時間,168小時,7天
message.max.byte=5242880  #訊息儲存的最大值5M
default.replication.factor=2  #kafka儲存訊息的副本數,如果一個副本失效了,另一個還可以繼續提供服務
replica.fetch.max.bytes=5242880  #取訊息的最大直接數
log.segment.bytes=1073741824 #這個引數是:因為kafka的訊息是以追加的形式落地到檔案,當超過這個值的時候,kafka會新起一個檔案
log.retention.check.interval.ms=300000 #每隔300000毫秒去檢查上面配置的log失效時間(log.retention.hours=168 ),到目錄檢視是否有過期的訊息如果有,刪除
log.cleaner.enable=false #是否啟用log壓縮,一般不用啟用,啟用的話可以提高效能
zookeeper.connect=192.168.7.100:12181,192.168.7.101:12181,192.168.7.107:1218 #設定zookeeper的連線埠
複製程式碼

上面是引數的解釋,實際的修改項為:

複製程式碼
broker.id=0  每臺伺服器的broker.id都不能相同,分別為0,1,2

在#listeners=PLAINTEXT://:9092下新增如下一行:
advertised.listeners=PLAINTEXT://10.200.1.X:9092 10.200.1.X分別為外網訪問三臺伺服器時的IP
host.name=192.168.56.X IP分別為192.168.56.9,192.168.56.6,192.168.56.7 #在log.retention.hours=168 下面新增下面三項 message.max.byte=5242880 default.replication.factor=2 replica.fetch.max.bytes=5242880 #設定zookeeper的連線埠 zookeeper.connect=192.168.56.9:2181,192.168.56.6:2181,192.168.56.7:2181
複製程式碼

以上對配置檔案的修改需要對3臺伺服器都進行

 

4、啟動Kafka叢集並測試

1、啟動服務

#從後臺啟動Kafka叢集(3臺都需要啟動)
cd /opt/kafka_2.11-0.9.0.0/bin #進入到kafka的bin目錄 
./kafka-server-start.sh -daemon ../config/server.properties

2、檢查服務是否啟動

#執行命令jps
20348 Jps
4233 QuorumPeerMain
18991 Kafka

相關文章