最近有一個項目需要用到kafka分布式訂閱發(fā)布消息系統(tǒng)卓缰,于是抽空的時候?qū)W習(xí)了一下關(guān)于kafka的一些事,同樣在這里記錄相關(guān)的筆記砰诵。最開始當(dāng)然就是環(huán)境搭建征唬。
kafka是什么?
這當(dāng)然是最開始的一個問題茁彭。
kafka是一個分布式消息系統(tǒng)总寒,由LinkedIn使用Scala編寫,用作LinkedIn的活動流(Activity Stream)和運營數(shù)據(jù)處理管道(Pipeline)的基礎(chǔ)理肺,具有高水平擴展和高吞吐量摄闸。目前已經(jīng)被多家不同類型的公司作為多種類型的數(shù)據(jù)管道和消息系統(tǒng)使用了。
而且越來越多的開源式分布處理系統(tǒng)都支持和kafka集成哦妹萨,比如Flume年枕,Storm,Spark等乎完。
目前幾種分布式隊列的對比:
zookeeper的環(huán)境部署
kafka是由zookeeper管理的熏兄,那么kafka的部署需要在zookeeper安裝好之后進(jìn)行。因此我們先來看看zookeeper如何來搭建環(huán)境。
首先到zookeeper的官網(wǎng)下載zookeeper摩桶,這里我選擇的是zookeeper 3.4.8桥状。
安裝zookeeper很簡單,就是解壓典格,然后放到該放的目錄里:
tar -zxvf zookeeper-3.4.8.tar.gz
mv zookeeper-3.4.8 /usr/local/zookeeper
然后我們進(jìn)入zookeeper目錄看一看:
cd /usr/local/zookeeper
目錄如下:
和常規(guī)的一樣岛宦,bin目錄下是運行文件,conf目錄下是配置文件耍缴,因此看看conf目錄:
里面有一個配置例子zoo_sample.cfg砾肺,我們借助這個來配置:
cp zoo_sample.cfg zoo.cfg
用vim進(jìn)入zoo.cfg,看看里面的內(nèi)容:
可以看到配置文件里面有幾個參數(shù):
tickTime # 是zookeeper中使用的基本時間單位, 毫秒值.
initLimit # 連接leader的超時時間
syncLimit #
dataDir # 數(shù)據(jù)目錄. 可以是任意目錄.
clientPort # 監(jiān)聽client連接的端口號.
如果是單機運行zookeeper的話防嗡,就用上面默認(rèn)的配置就可以了变汪,可以把dataDir給改了,不讓它存在臨時目錄:
# 我把它改到存在zookeeper目錄下的data目錄
dataDir=/usr/local/zookeeper/data
然后進(jìn)入zookeeper目錄創(chuàng)建data目錄:
cd /usr/local/zookeeper
mkdir data
cd data
# 創(chuàng)建一個myid文件
vim myid
不過一般來說蚁趁,用起來應(yīng)該是在集群環(huán)境中裙盾。因此我們需要在zoo.cfg中還要加上如下內(nèi)容(假如說有三臺):
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
集群環(huán)境下需要將zookeeper拷貝到各個結(jié)點上:
scp -r -r zookeeper/
然后就可以運行zookeeper了(每一個節(jié)點都要運行哦):
bin/zkServer.sh start
可以用jps看看:
kafka的環(huán)境部署
zookeeper搭建完畢后他嫡,就可以開始kafka的部署了番官。同樣,到kafka的官網(wǎng)下載kafka的安裝包钢属,這里選擇的是kafka_2.11-0.9.0.1徘熔。
一樣先來個單機版的。淆党。
解壓文件酷师,然后將它移動到合適的文件夾中,一般放/usr/local中:
tar -xvf kafka_2.11-0.9.0.1.tgz
mv kafka_2.11-0.9.0.1 /usr/local/kafka-0.9.0.1
接著進(jìn)入相應(yīng)目錄:
cd /usr/local/kafka-0.9.0.1
目錄結(jié)構(gòu)還是那么個結(jié)構(gòu)染乌,大同小異山孔,以名字來看,bin也是執(zhí)行目錄荷憋,config就是配置文件的目錄了台颠。
因此可以得知,我們需要進(jìn)行配置kafka勒庄。
那么就來配置一下串前,一般來說就配置config目錄下的server.properties。
vim config/server.properties
主要涉及到集群中的配置锅铅。比如broker.id酪呻、zookeeper.connect等等减宣,單機就默認(rèn)的就行了盐须,默認(rèn)broker.id=0。如果有其他的節(jié)點漆腌,每臺節(jié)點的broker.id不能一樣哦贼邓。
然后就可以啟動kafka了阶冈,同樣在bin里面。在啟動了zookeeper的情況下啟動kafka:
bin/kafka-server-start.sh config/server.properties
啟動后可以來測試測試塑径,打開另一個終端女坑,創(chuàng)建一個叫“hello”的topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello
查看一下topic列表:
bin/kafka-topics.sh --list --zookeeper localhost:2181
有了topic之后统舀,我們就可以作為生產(chǎn)者來生產(chǎn)消息了匆骗,這里因為是單機,也只有用本機當(dāng)生產(chǎn)者了:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello
這時可以在終端中輸入文本消息誉简。我們再在另一個終端里開啟消費者來消費消息(0.10版本以后命令就不同了碉就,官網(wǎng)上有新的命令):
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic hello --from-beginning
這樣就可以看到效果了呢。
其它的比如設(shè)置多broker的集群啊闷串,可以看官方文檔的快速開始(因為用的版本是0.9的瓮钥,粘貼的網(wǎng)址就是0.9.0的文檔):http://kafka.apache.org/090/documentation.html#quickstart