Kafka:安裝及基礎概念

一. kafka安裝

1. 安裝前提

  • 安裝Jdk、javac驗證是否安裝成功
  • 安裝zookeeper 見鏈接教程

2. 到官網下載

3. 將下載好的文件上傳到Linux服務器

4. 解壓

tar -zxvf kafka_2.13-3.2.1.gz 
cd kafka_2.13-3.2.1/config 
vi  server.properties

# The id of the broker. This must be set to a unique integer for each broker.
#集羣節點編號 默認爲0 broker.id在集羣中必須是唯一的
broker.id=0
#kafka所在主機的ip地址 和 指定的開發端口號
listeners=PLAINTEXT://10.1.48.214:9092
#kafka日誌路徑
log.dirs=/home/hcx/kafka/kafka_2.13-3.2.1/kafka-logs
#zookeeper集羣連接地址
zookeeper.connect=localhost:2181

5. 啓動kafka

./kafka-server-start.sh -daemon ../config/server.properties 

6. 創建topics

#通過kafka想zk中創建一個主題
./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --topic test --partitions 2 --replication-factor 1
#查看所有的topic
./kafka-topics.sh --list --bootstrap-server 10.1.48.214:9092

二. kafka發送與消費

1. 發送消息

#在bin目錄下自帶kafka-console-producer.sh
./kafka-console-producer.sh --broker-list 10.1.48.214:9092 --topic heima

2. 消費消息

#模式1:從最後一條消息的偏移量+1開始消費,即實時消費,發送消息立馬同步到消費消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --topic heima
#模式2:從頭開始消費,即接受發送消息的所有歷史消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --from-beginning --topic heima

3. 注意點

  • 消息會被存儲
  • 消息是順序存儲
  • 消息是有偏移量offset
  • 消費時可以指明偏移量進行消費

3. kafka單播與多博

1. 單播消息

同一個消費組中,只有一個消費者可以收到訂閱的topic中的消息。

 ./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup01 --topic heima

2. 多播消息

不同的消費組訂閱同一個topic,那麼不同的消費組中均只有一個消費者能夠收到消息。也就代表多個消費組中多個消費者收到了同一個topic的消息

 #消費組testGroup01
 ./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup01 --topic heima
 #消費組testGroup02
 ./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup02 --topic heima

3. 查看消費組的詳細消息

#查看當前有多少組
./kafka-consumer-groups.sh --bootstrap-server 10.1.48.214:9092 --list
#查看指定消費組(testGroup01)的詳細信息
./kafka-consumer-groups.sh --bootstrap-server 10.1.48.214:9092 --describe --group testGroup01

參數 含義
PARTITION 表示話題分區
CURRENT-OFFSET 表示最後被消費的消息偏移量
LOG-END-OFFSET 消息總量(最後一條消息的偏移量)
LAG 剩餘未被消費的消息量

四. kafka主題和分區的概念

1). 主題Topic

主題-topic在kafka中是一個邏輯的概念,kafka通過topic將消息進行分類。不同的topic會被訂閱該topic的消費者消費。

但是有一個問題,如果說這個topic中的消息非常非常多,多到需要幾T來存,因爲消息是會被保存到log日誌文件中的。爲了解決這個文件過大的問題,kafka提出了Partition分區的概念

2). 分區Partition

1. 概念

通過Partition將一個topic中的消息分區來存儲。其好處如下:

  • 分區存儲,可以解決統一存儲文件過大的問題

  • 提高了讀寫的吞吐量:讀和寫可以同時在多個分區中進行

2. 創建多分區的topic

./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --topic test --partitions 2 --replication-factor 1

3. kafka中消息日誌文件保存的內容解析

文件名 含義
00000000000000000000.log 保存的就是topic的消息
00000000000000000000.inde 偏移量索引文件
00000000000000000000.timeindex 時間戳索引文件
leader-epoch-checkpoint 保存了每一任leader開始寫入消息時的offset, 會定時更新
__consumer_offsets-49 kafka內部自己創建了_consumer_offsets主題包含了50個分區。這個主題用來存放消費者消費某個主題的偏移量。因爲每個消費者都會自己維護着消費的主題的偏移量,也就是說每個消費者會把消費的主題的偏移量自主上報給kafka中的默認主題:consumer_offsets。因此kafka爲了提升這個主題的併發性,默認設置了50個分區。

注意:文件中保存的消息默認是7天。7天到後自動刪除。

五. Kafka集羣操作

1. 集羣搭建

  • 創建三個server.properties 【位於config目錄下】

    #1. copy兩份server.properties
    cp server.properties server1.properties
    cp server.properties server2.properties
    #2. 修改.properties配置文件中的三個參數broker.id listeners log.dirs
    
    #集羣節點編號 默認爲0 broker.id在集羣中必須是唯一的
    broker.id=2
    #kafka所在主機的ip地址 和 指定的開發端口號
    listeners=PLAINTEXT://10.1.48.214:9094
    #kafka日誌路徑
    log.dirs=/home/hcx/kafka/kafka_2.13-3.2.1/kafka-logs-2
    
  • 啓動三臺broker

    #關閉之前的kafka (之前未啓動過kafka可忽略) 
    ps aux | grep  server.properties
    kill pid
    #啓動命令
    ./kafka-server-start.sh -daemon ../config/server.properties 
    ./kafka-server-start.sh -daemon ../config/server1.properties
    ./kafka-server-start.sh -daemon ../config/server2.properties 
    
  • 校驗是否啓動成功

    #進入zookeeper查看/brokers/ids中是否有三個znode[0,1,2]
    cd /home/hcx/zookeeper/apache-zookeeper-3.8.0-bin/bin
    ./zkCli.sh
    ls /brokers/ids
    

2. 什麼是副本

當我們創建topic的時候,除了定義分區外,還指明瞭副本數。

./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --partitions 2 --replication-factor 1 --topic my-replicated-topic
  • replication-factor :副本數

  • 概念:副本是爲了主題中的分區創建多個備份,多個副本在kafka集羣的多個broker中,會有一個副本作爲leader,其他的都是fllower

  • 查看topic情況

    ./kafka-topics.sh --describe --bootstrap-server 10.1.48.214:9092 --topic my-replicated-topic
    

參數 含義
Replicas 當前副本存在的broker節點
Leader 每個partition都有一個broker作爲leader。消息發送方要把消息發給哪個broker?就看副本的leader是在哪個broker上面。副本里的leader專⻔用來接收消息。當leader掛了,經過主從選舉,從Follower中選舉產生一個新的Leader
Follower 接收Leader的同步數據
Isr 可以同步的broker節點和已同步的broker節點,存放在isr集合中。如果isr中的節點性能較差,會被踢出isr集合。

3. 集羣消費

1)向集羣發送消息

./kafka-console-producer.sh --broker-list 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --topic my-replicated-topic

2)從集羣中消費消息

./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --from-beginning --topic my-replicated-topic

3)指定消費組來消費消息

./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic

4)分區消費組消費者的細節

  • 爲了保證消費的順序性,一個partition只能被一個消費組中的一個消費者消費。
  • Kafka只在partition的範圍內保證消息消費的局部順序性,不能在同一個topic中的多個partition中保證總的消費順序性。
  • 一個消費者可以消費多個partition。【如果消費者刮來了,那麼會出發Reblance機制,會讓其他消費者來消費該分區】

參考資料:https://www.bilibili.com/video/BV1Xy4y1G7zA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章