1、概念java
概念百度了一下,能夠根據相關資料進行理解。git
1.1 Kafka是一種高吞吐量的分佈式發布訂閱消息系統,它能夠處理消費者規模的網站中的全部動做流數據。github
Brokerweb
Kafka集羣包含一個或多個服務器,這種服務器被稱爲broker。 算法
Topicapache
每條發佈到Kafka集羣的消息都有一個類別,這個類別被稱爲Topic。(物理上不一樣Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存於一個或多個broker上但用戶只需指定消息的Topic便可生產或消費數據而沒必要關心數據存於何處)瀏覽器
Partitionbash
Partition是物理上的概念,每一個Topic包含一個或多個Partition.服務器
Producerapp
負責發佈消息到Kafka broker
Consumer
消息消費者,向Kafka broker讀取消息的客戶端。
Consumer Group
每一個Consumer屬於一個特定的Consumer Group(可爲每一個Consumer指定group name,若不指定group name則屬於默認的group)。
1.2 ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。
ZooKeeper的基本運轉流程:
一、選舉Leader。
二、同步數據。
三、選舉Leader過程當中算法有不少,但要達到的選舉標準是一致的。
四、Leader要具備最高的執行ID,相似root權限。
五、集羣中大多數的機器獲得響應並follow選出的Leader。
1.3 kafka-manager爲了簡化開發者和服務工程師維護Kafka集羣的工做,yahoo構建了一個叫作Kafka管理器的基於Web工具,叫作 Kafka Manager。這個管理工具能夠很容易地發現分佈在集羣中的哪些topic分佈不均勻,或者是分區在整個集羣分佈不均勻的的狀況。它支持管理多個集羣、選擇副本、副本從新分配以及建立Topic。同時,這個管理工具也是一個很是好的能夠快速瀏覽這個集羣的工具,有以下功能:
1.管理多個kafka集羣
2.便捷的檢查kafka集羣狀態(topics,brokers,備份分佈狀況,分區分佈狀況)
3.選擇你要運行的副本
4.基於當前分區情況進行
5.能夠選擇topic配置並建立topic(0.8.1.1和0.8.2的配置不一樣)
6.刪除topic(只支持0.8.2以上的版本而且要在broker配置中設置delete.topic.enable=true)
7.Topic list會指明哪些topic被刪除(在0.8.2以上版本適用)
8.爲已存在的topic增長分區
9.爲已存在的topic更新配置
10.在多個topic上批量重分區
11.在多個topic上批量重分區(可選partition broker位置)
kafka-manager 項目地址:https://github.com/yahoo/kafka-manager
2、部署
2.1 初始化環境
初始化系統,關閉防火牆修改主機名與ip名稱
名稱 |
HOSTNAME |
IP |
1 |
kafka-1 |
172.17.10.207 |
2 |
kafka-2 |
172.17.10.208 |
3 |
kafka-3 |
172.17.10.209 |
2.2 java安裝
yum install -y java-1.8.0-openjdk
2.3 安裝zookeeper(三臺都裝)
cd /usr/local wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz tar zxf zookeeper-3.4.9.tar.gz mv zookeeper-3.4.9 zookeeper cd zookeeper/conf cp zoo_sample.cfg zoo.cfg
編輯zoo.cfg
tickTime=2000 #服務之間或者客戶端與服務段之間心跳時間 initLimit=10 #Follower啓動過程當中,從Leader同步全部最新數據的時間 syncLimit=5 #Leader與集羣之間的通訊時間 dataDir=/usr/local/zookeeper/data #zookeeper存儲數據 datalogDir=/usr/local/zookeeper/logs #zookeeper存儲數據的日誌 clientPort=2181 #zookeeper默認端口 #集羣配置信息 server.1=172.17.10.207:2888:3888 server.2=172.17.10.208:2888:3888 server.3=172.17.10.209:2888:3888
server.1 這個1是服務器的標識也能夠是其餘的數字, 表示這個是第幾號服務器,用來標識服務器,這個標識要寫到快照目錄下面myid文件裏
#172.17.10.207爲集羣裏的IP地址,第一個端口是master和slave之間的通訊端口,默認是2888,第二個端口是leader選舉的端口,集羣剛啓動的時候選舉或者leader掛掉以後進行新的選舉的端口默認是3888
完整配置
cd /usr/local/zookeeper mkdir data logs #建立數據與日誌文件夾 cd data echo 「1」>myid #第2 臺zookeeper服務器就echo 2 /usr/local/zookeeper/bin/zkServer.sh start #啓動
/usr/local/zookeeper/bin/zkServer.sh status #查看狀態
2.4 安裝kafka(三臺都裝)
wget http://apache.fayea.com/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz tar zxf kafka_2.11-0.10.0.0.tgz mv kafka_2.11-0.10.0.0/ kafka cd kafka/config
編輯 server.properties
broker.id=1 #kafka集羣標識,不能相同,第一臺是1以此類推,其餘都同樣。 log.dirs=/usr/local/kafka-logs host.name=172.17.10.184 #主機ip zookeeper.connect=172.17.10.185:2181,172.17.10.184:2181,172.17.10.183:2181 mkdir /usr/local/kafka/kafka-logs /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties & #啓動kafka
查看是否啓動成功
netstat -ntpl|grep 9092
2.4 安裝kafka-manager
git clone https://github.com/yahoo/kafka-manager cd kafka-manager sbt clean distcd #過程比較長
獲得文件kafka-manager-1.3.0.8.zip
unzip kafka-manager-1.3.0.8.zip -d /usr/local cd /usr/local/kafka-manager-1.3.0.8 修改配置 conf/application.properties # 若是zk是集羣,這裏填寫多個zk地址 kafka-manager.zkhosts="172.17.10.185:2181,172.17.10.184:2181,172.17.10.183:2181"
啓動
kafka-manager 默認的端口是9000,可經過 -Dhttp.port,指定端口; -Dconfig.file=conf/application.conf指定配置文件: nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &
瀏覽器訪問
3、測試
對Kafka進行測試。分別建立topic,producer,consumer,最好是在不一樣的節點上建立。在producer的控制檯上輸入信息,觀察consumer控制檯是否可以接收到。
3.1 建立topic
./kafka-topics.sh --create --zookeeper 172.17.10.207:2181,172.17.10.208:2181,172.17.10.209:2181 --replication-factor 3 --partitions 3 --topic xuel
--replication-factor 指定partition的replicas數,建議設置爲2;
--partitions 指定分區數,這個參數須要根據broker數和數據量決定,正常狀況下,每一個broker上兩個partition最好;
--topic xuel 主題爲xuel
3.2 查看topic
./kafka-topics.sh --describe --zookeeper 172.17.10.207:2181,172.17.10.208:2181,172.17.10.209:2181 --topic xuel
經過web界面建立topic-{1-4}
3.3 刪除topic
./kafka-topics.sh --delete --zookeeper 172.17.10.207:2181,172.17.10.208:2181,172.17.10.209:2181 --topic xuel
3.4 建立發佈者
在一臺服務器上建立一個發佈者(發佈者發送消息)
建立broker
./kafka-console-producer.sh --broker-list 172.17.10.173:9092,172.17.10.172:9092,172.17.10.171:9092,172.17.10.170:9092 --topic xuel
3.5 建立消費者
在一臺服務器上建立一個訂閱者(訂閱者接受消息)
./kafka-console-consumer.sh --zookeeper 172.17.10.173:2181,172.17.10.172:2181,172.17.10.171:2181,172.17.10.170:2181 --from-beginning --topic xuel
3.6 經過web界面查看