Kafka基礎(chǔ)與搭建
一署恍、先行要事
1.Java環(huán)境
由于kafka是使用Java語(yǔ)言進(jìn)行的開(kāi)發(fā)的應(yīng)用程序崎溃,所以需要提前配置JDK環(huán)境。
2.Zookeeper安裝
kafka的設(shè)計(jì)是通過(guò)Zookeeper進(jìn)行保存集群的元數(shù)據(jù)信息和消費(fèi)者信息盯质。
Zookeeper是kafka的前提依賴袁串。
在kafka的應(yīng)用程序中包含有Zookeeper輕量應(yīng)用,可以通過(guò)腳本直接運(yùn)行呼巷。不過(guò)囱修,也可以通過(guò)單獨(dú)下載進(jìn)行部署安裝Zookeeper應(yīng)用。
①.Zookeeper單機(jī)模式的部署配置如下:
$: tar xzvf zookeeper-3.4.13.tar.gz
$: mv zookeeper-3.4.13 /usr/local/zookeeper
$: vim /usr/local/zookeeper/conf/zoo.cfg
# 修改zoo.cfg文件中以配置
tickTime=2000 #Zookeeper心跳時(shí)間【2000】檢測(cè)王悍,單位為毫秒
dataDir=/var/lib/zookeeper #默認(rèn)情況下,Zookeeper事務(wù)日志和數(shù)據(jù)快照保存路徑
clientPort=2181 #客戶端連接服務(wù)器的端口
$: /usr/local/zookeeper/zkServer.sh start #啟動(dòng)Zookeeper服務(wù)
②.Zookeeper集群模式的部署配置如下:
Tips:Zookeeper集群成為群組(Ensemble).關(guān)于群組節(jié)點(diǎn)需要注意的是數(shù)量問(wèn)題:
-
群組包含節(jié)點(diǎn)數(shù)量盡量不要超過(guò)7個(gè)破镰。
- 由于Zookeeper使用了一致性協(xié)議,當(dāng)節(jié)點(diǎn)數(shù)量超過(guò)7個(gè)時(shí)压储,極可能造成整個(gè)群組的性能下降鲜漩。
-
群組包含節(jié)點(diǎn)數(shù)量盡量為奇數(shù)個(gè)。
- 由于Zookeeper的quorum(仲裁)的思想集惋,詳細(xì)見(jiàn)【Zookeeper-quorum】文檔孕似。
$: vim /usr/local/zookeeper/conf/zoo.cfg
# 修改zoo.cfg文件中以配置
tickTime=2000 #Zookeeper心跳時(shí)間【2000】檢測(cè),單位為毫秒
dataDir=/var/lib/zookeeper #默認(rèn)情況下,Zookeeper事務(wù)日志和數(shù)據(jù)快照保存路徑
clientPort=2181 #客戶端連接服務(wù)器的端口
initLimit=20 #flower最初連接leader時(shí)的超時(shí)值刮刑,單位為tickTime的倍數(shù)
syncLimit=5 #flower與leader之間進(jìn)行Sync操作的超時(shí)值喉祭,單位為tickTime的倍數(shù)
# server.x=[hostname]:peerPort:leaderPort[:observer]
# x為群組中服務(wù)器的ID值.它必須是一個(gè)整數(shù)养渴,不過(guò)不一定要從0開(kāi)始,也不要求是連續(xù)的
# peerPort用于事務(wù)的發(fā)送
# leaderPort用于leader選舉
# observe參數(shù)可選泛烙,為了標(biāo)記服務(wù)器是否進(jìn)入觀察者模式
server.1=hostname1:2888:3888:observer
server.2=hostname2:2888:3888
server.3=hostname3:2888:3888
# 客戶端只需要通過(guò)clientPort就能連接到群組理卑,
# 而群組節(jié)點(diǎn)間的通信則需要同時(shí)用到這3個(gè)端口peerPort、leaderPort胶惰、clientPort傻工。
3.Kafka安裝
# 下載Kafka:http://kafka.apache.org/downloads
# 將下載的安裝包kafka_2.12-2.1.1.tgz 進(jìn)行解壓操作
$: tar xzvf kafka_2.12-2.1.1.tgz
# 可參考kafka的配置文件參數(shù)說(shuō)明自行配置kafka運(yùn)行參數(shù)(見(jiàn)附表)
# 將kafka放在/usr/local/kafka路徑下
mv -r kafka_2.12-2.1.1 /usr/local/kafka
# 啟動(dòng)kafka(前提已啟動(dòng)Zookeeper服務(wù))
/usr/local/kafka/bin/kafka-server-start.sh -demon /usr/local/kafka/config/server.properties
一旦kafka服務(wù)啟動(dòng)完成,就可以針對(duì)kafka服務(wù)進(jìn)行簡(jiǎn)單操作:
- 創(chuàng)建名稱為test的Topic:
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
- 驗(yàn)證test Topic:
/usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
# 終端窗口將會(huì)顯示:
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic:test Partition:0 Leader:0 Replicas:0 Isr:0
- 向test Topic發(fā)送消息:
/usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
# 終端輸入消息孵滞,回車發(fā)送:
Test Message Producer One
Test Message Producer Two
- 從test Topic讀取消息:
/usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
# 終端顯示讀取的消息:
Test Message Producer One
Test Message Producer Two
Consumer 2 messages
附錄:Kafka Broker配置項(xiàng)
配置選項(xiàng) | 作用 | 默認(rèn)值 | 備注 |
---|---|---|---|
broker.id | 表示在kafka集群中的唯一表示符 | 0 | 建議將此ID設(shè)置與主機(jī)名中所包含的唯一性數(shù)字相同 |
port | kafka服務(wù)的端口號(hào) | 9092 | 注意配置1024以下的端口需要root權(quán)限 |
zookeeper.connect | 用于保存broker元數(shù)據(jù)的Zookeeper服務(wù)地址 | localhost:2181 | 其格式為: hostname:port/path具體含義如下 hostname:Zookeeper服務(wù)器的IP地址或者主機(jī)名 port:Zookeeper服務(wù)的端口號(hào) /path:此項(xiàng)為可選Zookeeper路徑,作為kafka集群的chroot環(huán)境鸯匹。如果不指定坊饶,默認(rèn)使用根路徑/ |
log.dir | 日志存放路徑 | — | 它是一組通過(guò)逗號(hào)隔開(kāi)的路徑本地系統(tǒng)文件路徑。如果指定多個(gè)路徑殴蓬,broker會(huì)通過(guò)最少使用原則匿级,把同一分區(qū)下的日志片段保存到同一個(gè)路徑下。特別注意染厅,broker是向擁有最少數(shù)目分區(qū)的路徑進(jìn)行新增分區(qū)痘绎,并非最小本地磁盤空間的路徑新增分區(qū)。 |
num.recovery.threads.per.data.dir | 處理日志片段線程數(shù) | 1 | 這些線程只是在服務(wù)啟動(dòng)或者關(guān)閉的時(shí)候才會(huì)使用到肖粮,所以可以使用大量的線程來(lái)處理以至于達(dá)到并行操作的目的孤页。特別是包含有大量分區(qū)的服務(wù)器,一旦崩潰涩馆,在進(jìn)行恢復(fù)并行操作時(shí)行施,可以節(jié)省大量時(shí)間。 |
auto.create.topics.enable | 自動(dòng)創(chuàng)建Topic | true | 默認(rèn)情況下魂那,kafka服務(wù)會(huì)在以下三種情況下自動(dòng)創(chuàng)建Topic: ①.當(dāng)一個(gè)生產(chǎn)者開(kāi)始往topic寫入消息時(shí); ②.當(dāng)一個(gè)消費(fèi)者開(kāi)始從topic讀取消息時(shí); ③.當(dāng)任意一個(gè)客戶端向topic發(fā)送元數(shù)據(jù)請(qǐng)求時(shí)蛾号。 大多時(shí)候這些行為都是非預(yù)期的。根據(jù)kafka的協(xié)議涯雅,一個(gè)topic不先被創(chuàng)建鲜结,是無(wú)法知道此topic是否已經(jīng)存在。如果把此項(xiàng)值改為false活逆,可以通過(guò)顯式的方式創(chuàng)建精刷,不管是手動(dòng)創(chuàng)建還是通過(guò)其他配置的方式。 |