Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/backend/linux-install-zookeeper-and-kafka/
本文主要是為了記錄在工作中遇到的常用軟件的安裝過程,方便以后遇到相同情形時可以快速的查閱。主要講述了zookeeper, kafka的安裝。
本文的操作系統采用的是CentOS,可以采用shell命令查閱:lsb_release -a.
Zookeeper
Zookeeper的安裝與配置
可以在http://zookeeper.apache.org/這里下載需要的安裝包。這里采用的是zookeeper-3.4.6.tar.gz安裝包。
1 首先將安裝包解壓:
2 修改系統的環境變量
[root@hidden zookeeper-3.4.6]#vim /etc/profile #ZooKeeper配置 export ZOOKEEPER_INSTALL=/root/util/zookeeper-3.4.6 export PATH=$PATH:$ZOOKEEPER_INSTALL/bin [root@hidden zookeeper-3.4.6]# source /etc/profile3 創建Zookeeper的配置文件
[root@hidden zookeeper-3.4.6]#cd conf [root@hidden conf]# cp zoo_example.cfg zoo.cfg4 配置zoo.cfg
tickTime=2000 #ZooKeeper服務器心跳時間,單位為ms initLimit=10 #投票選舉心leader的初始化時間 syncLimit=5 #leader與follower心跳檢測最大容忍時間,響應超過syncLimit*tickTime,leader認為follower死掉,從服務器列表中刪除follower clientPort=2181 #端口 dataDir=/tmp/ZooKeeper/data #數據目錄 dataLogDir=/tmp/ZooKeeper/log #日志目錄5 創建配置中的相應目錄
cd /tmp mkdir ZooKeeper cd Zookeeper mkdir log mkdir data或者可以試一下
mkdir -p /tmp/ZooKeeper/data mkdir -p /tmp/ZooKeeper/log6 啟動ZooKeeper
cd /usr/ZooKeeper/bin ./zkServer.sh start7 可以使用ZooKeeper自帶的客戶端工具來查看ZooKeeper的節點建立情況(bin/zkCli.sh)
[圖片]
ZooKeeper API使用簡介
ZooKeeper實現了一個層次命名空間的數據模型,也可以認為它就是一個小型的、精簡的文件系統。它的每個節點稱為znode, znode除了本身能夠包含一部分數據之外,還能夠擁有子節點,當節點上的數據發生變化,或者其子節點發生變化,基于watcher機制,會發出相應的通知給訂閱其狀態變化的客戶端。
首先,實例化一個ZooKeeper對象,指定其三個參數。url為ZooKeeper服務器的地址。sessionTimeOut為會話的超時時間,ZooKeeper的會話超時時間的長度由客戶端來確定,但是ZooKeeper的Server端會有兩個配置,minSessionTimeout和maxSessionTimeout,minSessionTimeout的值默認為2倍的tickTime, maxSessionTimeout的值默認為20倍的tickTime,單位都是ms. tickTime也是服務端的一個配置項,是Server內部控制時間邏輯的最小時間單位,如果客戶端發來的sessionTimeout超過minSessionTimeout~maxSessionTimeout這個范圍,Server會自動取minSessionTimeout或者maxSessionTimeout作為sessionTimeout, 然后為這個Client新建一個session對象。最后一個參數為默認的watcher.如果包含boolean watch的讀方法中傳入true, 則將默認的watcher注冊為所關注時間的watcher,如果傳入false,則不注冊任何watcher,這里暫且定為空。
1 創建節點
通過ZooKeeper的API新增一個znode節點,節點在被創建時,需要制定節點的路徑(此處為/root)包含的字節數據,訪問權限(如果不想設置,則制定為Ids.OPEN_ACL_UNSAFE),以及創建的節點類型,節點的類型如表所示:
| CreateMode.PRESISTENT | 持久節點,該節點在客戶端斷開連接后不會刪除 |
| CreateMode.EPHEMERAL | 臨時節點,該節點在客戶端斷開連接后刪除 |
| CreateMode.PERSISTENT_SEQUENTIAL | 持久節點,該節點在客戶端斷開后不會刪除,并將在其名下附加一個單調遞增數 |
| CreateMode.EPHEMERAL_SEQUENTIAL | 臨時節點,該節點在客戶端斷開后刪除,并將在其名下附加一個單調遞增數 |
創建節點實例:
//創建/root節點,其包含的數據為“root data",訪問權限為開放,所有人均可以訪問,創建模式為持久化節點 zooKeeper.create("/root","root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);2 刪除節點
當不需要某個節點,或者某個節點上的信息已經失效時,使用delete方法可以將該節點刪除,刪除時需要制定節點的版本號version,如果設置為-1,則匹配所有的版本,ZooKeeper會比較刪除的節點版本是否和服務器上的版本一致,如果不一致則拋出異常。
刪除節點實例:
3 設置和獲取節點內容
如果想在已有節點中保存數據,可以通過ZooKeeper的setData方法,將數據保存到節點上,也可以通過ZooKeeper的getData方法來獲取該節點保存的數據,一個znode中最多能夠保存1MB的數據。
設置和獲取節點內容的實例。
setData方法設置/root節點的數據為“hello",getData方法取得root節點上保存的節點數據,false表示不使用默認的watcher,第三個參數為Stat, 表示節點的狀態,是一個傳出的參數,將會返回該節點當前的狀態信息。
4 添加子節點
ZooKeeper支持在已有的節點下添加子節點,同樣也是用使用create()方法,但是父節點必須存在,否則會跑出異常。
創建子節點的實例:
5 判斷節點是否存在
當進行系統初始化時,或者當前需要給一個節點創建子節點時,通常需要判斷系統中的一些節點是否存在。
判斷/root/child1節點是否存在,如果存在,返回stat不為null,否則為null.
6 watcher的實現
當節點的狀態發生變化,通過watcher機制,可以讓客戶端得到通知,watcher需要實現org.apache.ZooKeeper.Watcher接口。節點的狀態變化主要包含如表所示的幾種情況。
| EventType.NodeDeleted | 刪除節點 |
| EventType.NodeChildrenChanged | 修改節點的子節點 |
| EventType.NodeCreated | 創建節點 |
| EventType.NodeDataChanged | 修改節點數據 |
watcher的實現實例:
public class ZKWatcher implements Watcher{ @Override public void process(WacthedEvent event){ if(event.getType()==EventType.NodeDeleted) //del if(event.getType()==EventType.NodeChildrenChanged ) //del if(event.getType()==EventType.NodeCreated) //del if(event.getType()==EventType.NodeDataChanged ) //del } }需要注意的是,ZooKeeper的watcher是一次性的,也就是說,每次在處理完狀態變化時間之后,需要重新注冊watcher,這一點很讓人抓狂。這個特性也使得在處理時間和重新加上watcher這段時間發生的節點狀態變化將無法被感知。
異常
1 ZooKeeer常常發生下面兩種系統異常:
org.apache.ZooKeeper.KeeperException.ConnectionLossException,客戶端與其中的一臺服務器socket連接出現異常,連接丟失;
org.apache.ZooKeeper.KeeperException.SessionExpiredException, 客戶端的session已經超過sessionTimeout,未進行任何操作。
ConnectionLossException異常可以通過重試進行處理,客戶端會根據初始化ZooKeeper時傳遞的服務列表,自動嘗試下一個服務端節點,而在這段時間內,服務端節點變更的事件就會丟失。
SessionExpiredException異常不能通過重試解決,需要應用重新創建一個新的客戶端(new ZooKeeper()),這時所有的watcher和EPHEMERAL節點都將失效。
一般情況下,不采用原生態的API進行客戶端操作,而是采用zkClient或者Curator進行操作,這個會在后續的文章中講述。
2 異常
原因:
Kafka
Kafka的安裝與配置
Kafka的下載頁面:http://kafka.apache.org/downloads.html。下載之后解壓:
[root@hidden util]# tar -zxvf kafka_2.8.9-0.8.1.1 [root@hidden util]# cd kafka_2.8.9-0.8.1.1 [root@hidden util]# ls bin config libs LICENSE logs NOTICE/bin 啟動和停止命令等
/config 配置文件
/libs 類庫
啟動
在Kafka啟動之前需要先啟動ZooKeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties之后啟動Kafka Server:
bin/kafka-server-start.sh config/server.properties停止kafka:
bin/kafka-server-stop.sh停止zookeeper
bin/zookeeper-server-stop.sh測試
運行producer
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test運行consumer
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning在producer端輸入字符串并回車,查看consumer端是否顯示。
關于kafka的介紹以及在java中如何操作kafka會在之后的博文中展開介紹。
參考資料
歡迎跳轉到本文的原文鏈接:https://honeypps.com/backend/linux-install-zookeeper-and-kafka/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这里有一份面筋请查收(八)
- 下一篇: 记一次在LAMP中遇到的问题