一、Kafka基礎(chǔ)與搭建

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)建還是通過其他配置的方式。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。