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、軟體環境
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