1. 程式人生 > 其它 >kafka學習(三)kafka基礎理論

kafka學習(三)kafka基礎理論

一、消費模式的選擇

  kafka常見的消費模式有兩種:

  • 單播模式:一條訊息只能被某一個消費者消費的模式。
  • 多播模式:一條訊息能被多個消費者組中的消費者消費的模式。

  PS:記錄消費偏移量是以為單位進行的,增刪消費者不影響。【會在下面進行說明】

單播模式

  定義:一條訊息只能被某一個消費者消費的模式,類似佇列的模式。

  實現方式:讓所有消費者在同一個消費組裡即可

多播模式

  定義:一條訊息能被多個消費者消費的模式,類似釋出訂閱模式。

  實現方式:讓消費者屬於不同的消費組即可

二、檢視消費組的消費偏移量

  消費偏移量:指的是哪些訊息已經被消費了,做一個記錄。

##1、建立一個消費者組,監聽'zhTest'
這一Topic kafka-console-consumer.bat --bootstrap-server localhost:9092 --consumer-property group.id=zhTestGroup1 --topic zhTest

##2、檢視消費者組列表
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --list

##3、檢視消費者組'zhTestGroup1'的消費偏移量
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group zhTestGroup1

  引數解析如下:

  • current-offset:當前消費組的已消費偏移量
  • log-end-offset:主題對應分割槽訊息的結束偏移量
  • lag:當前消費組未消費的訊息數

三、Topic【主題】和Log【訊息資料日誌】

  可以理解Topic是一個類別的名稱,同類訊息傳送到同一個Topic下面。對於每一個Topic,下面可以有多個分割槽(Partition)日誌檔案:

Partition【分割槽】

  定義:一個有序的訊息序列

  作用:分片儲存資料。不同的partition可以位於不同的機器上,方便資料橫向擴充套件,提高吞吐量和並行度

  PS:分割槽對於組內消費者是單播的,對於不同組可以實現多播

  PS:當發訊息時不指定分割槽,kafka選分割槽的原理:對Key進行hash運算得到的雜湊值再對分割槽進行取模運算

Offset【偏移量】

  定義:每個partition中訊息的唯一編號。

  作用:用來唯一標示某個分割槽中的訊息。

  PS:一個partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的

  PS:kafka一般不會刪除訊息,不管這些訊息有沒有被消費。只會根據配置的日誌保留時間(log.retention.hours)來決定訊息多久被刪除,預設保留7天的日誌訊息。

  PS:kafka的效能與保留的訊息資料量大小沒有關係,因此儲存大量的資料訊息日誌資訊不會有什麼影響。

  PS:每個consumer是基於自己在commit log【如資料目錄下的00000000000000000000.log檔案】中的消費進度(offset)來進行工作的。在kafka中,消費offset由consumer自己來維護。【這意味kafka中的consumer對叢集的影響是非常小的,新增一個或者減少一個consumer,對於叢集或者其他consumer 來說,都是沒有影響的,因為每個consumer維護各自的消費offset。】

四、檢視Topic資訊

  當我們要瞭解kafka中Topic的分割槽、副本、或者是broker存活情況時,就需要用到如下命令去查看了:

##檢視zookeeper【localhost:2181】下的,topic為'zhTest'的資訊
##PS:因為topic的元資料是儲存在ZK上的,所以檢視資訊就去ZK上面去查 kafka
-topics.bat --describe --zookeeper localhost:2181 --topic zhTest

  以下是輸出內容的解釋,第一行是所有分割槽的概要資訊之後的每一行表示每一個partition的資訊

  • Leader:節點負責給定partition的所有讀寫請求。【PS:圖中的0表示的是leader節點為broker.id為0的機器
  • Replicas:表示某個partition在哪幾個broker上存在備份。不管這個節點是不是"leader",甚至這個節點掛了,也會列出。
  • Isr:是replicas的一個子集,它只列出當前還存活著的,並且已同步備份了該partition的節點