Kafka基礎(chǔ)與搭建
一、先行要事
1.Java環(huán)境
由于kafka是使用Java語言進行的開發(fā)的應(yīng)用程序,所以需要提前配置JDK環(huán)境。
2.Zookeeper安裝
kafka的設(shè)計是通過Zookeeper進行保存集群的元數(shù)據(jù)信息和消費者信息。
Zookeeper是kafka的前提依賴。
在kafka的應(yīng)用程序中包含有Zookeeper輕量應(yīng)用,可以通過腳本直接運行。不過,也可以通過單獨下載進行部署安裝Zookeeper應(yīng)用。
①.Zookeeper單機模式的部署配置如下:
$: 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心跳時間【2000】檢測,單位為毫秒
dataDir=/var/lib/zookeeper #默認情況下,Zookeeper事務(wù)日志和數(shù)據(jù)快照保存路徑
clientPort=2181 #客戶端連接服務(wù)器的端口
$: /usr/local/zookeeper/zkServer.sh start #啟動Zookeeper服務(wù)
②.Zookeeper集群模式的部署配置如下:
Tips:Zookeeper集群成為群組(Ensemble).關(guān)于群組節(jié)點需要注意的是數(shù)量問題:
-
群組包含節(jié)點數(shù)量盡量不要超過7個。
- 由于Zookeeper使用了一致性協(xié)議,當節(jié)點數(shù)量超過7個時,極可能造成整個群組的性能下降。
-
群組包含節(jié)點數(shù)量盡量為奇數(shù)個。
- 由于Zookeeper的quorum(仲裁)的思想,詳細見【Zookeeper-quorum】文檔。
$: vim /usr/local/zookeeper/conf/zoo.cfg
# 修改zoo.cfg文件中以配置
tickTime=2000 #Zookeeper心跳時間【2000】檢測,單位為毫秒
dataDir=/var/lib/zookeeper #默認情況下,Zookeeper事務(wù)日志和數(shù)據(jù)快照保存路徑
clientPort=2181 #客戶端連接服務(wù)器的端口
initLimit=20 #flower最初連接leader時的超時值,單位為tickTime的倍數(shù)
syncLimit=5 #flower與leader之間進行Sync操作的超時值,單位為tickTime的倍數(shù)
# server.x=[hostname]:peerPort:leaderPort[:observer]
# x為群組中服務(wù)器的ID值.它必須是一個整數(shù),不過不一定要從0開始,也不要求是連續(xù)的
# peerPort用于事務(wù)的發(fā)送
# leaderPort用于leader選舉
# observe參數(shù)可選,為了標記服務(wù)器是否進入觀察者模式
server.1=hostname1:2888:3888:observer
server.2=hostname2:2888:3888
server.3=hostname3:2888:3888
# 客戶端只需要通過clientPort就能連接到群組,
# 而群組節(jié)點間的通信則需要同時用到這3個端口peerPort、leaderPort、clientPort。
3.Kafka安裝
# 下載Kafka:http://kafka.apache.org/downloads
# 將下載的安裝包kafka_2.12-2.1.1.tgz 進行解壓操作
$: tar xzvf kafka_2.12-2.1.1.tgz
# 可參考kafka的配置文件參數(shù)說明自行配置kafka運行參數(shù)(見附表)
# 將kafka放在/usr/local/kafka路徑下
mv -r kafka_2.12-2.1.1 /usr/local/kafka
# 啟動kafka(前提已啟動Zookeeper服務(wù))
/usr/local/kafka/bin/kafka-server-start.sh -demon /usr/local/kafka/config/server.properties
一旦kafka服務(wù)啟動完成,就可以針對kafka服務(wù)進行簡單操作:
- 創(chuàng)建名稱為test的Topic:
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
- 驗證test Topic:
/usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
# 終端窗口將會顯示:
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配置項
配置選項 | 作用 | 默認值 | 備注 |
---|---|---|---|
broker.id | 表示在kafka集群中的唯一表示符 | 0 | 建議將此ID設(shè)置與主機名中所包含的唯一性數(shù)字相同 |
port | kafka服務(wù)的端口號 | 9092 | 注意配置1024以下的端口需要root權(quán)限 |
zookeeper.connect | 用于保存broker元數(shù)據(jù)的Zookeeper服務(wù)地址 | localhost:2181 | 其格式為: hostname:port/path具體含義如下 hostname:Zookeeper服務(wù)器的IP地址或者主機名 port:Zookeeper服務(wù)的端口號 /path:此項為可選Zookeeper路徑,作為kafka集群的chroot環(huán)境。如果不指定,默認使用根路徑/ |
log.dir | 日志存放路徑 | — | 它是一組通過逗號隔開的路徑本地系統(tǒng)文件路徑。如果指定多個路徑,broker會通過最少使用原則,把同一分區(qū)下的日志片段保存到同一個路徑下。特別注意,broker是向擁有最少數(shù)目分區(qū)的路徑進行新增分區(qū),并非最小本地磁盤空間的路徑新增分區(qū)。 |
num.recovery.threads.per.data.dir | 處理日志片段線程數(shù) | 1 | 這些線程只是在服務(wù)啟動或者關(guān)閉的時候才會使用到,所以可以使用大量的線程來處理以至于達到并行操作的目的。特別是包含有大量分區(qū)的服務(wù)器,一旦崩潰,在進行恢復(fù)并行操作時,可以節(jié)省大量時間。 |
auto.create.topics.enable | 自動創(chuàng)建Topic | true | 默認情況下,kafka服務(wù)會在以下三種情況下自動創(chuàng)建Topic: ①.當一個生產(chǎn)者開始往topic寫入消息時; ②.當一個消費者開始從topic讀取消息時; ③.當任意一個客戶端向topic發(fā)送元數(shù)據(jù)請求時。 大多時候這些行為都是非預(yù)期的。根據(jù)kafka的協(xié)議,一個topic不先被創(chuàng)建,是無法知道此topic是否已經(jīng)存在。如果把此項值改為false,可以通過顯式的方式創(chuàng)建,不管是手動創(chuàng)建還是通過其他配置的方式。 |