1. 程式人生 > >Kafka的生成者、消費者、broker的基本概念

Kafka的生成者、消費者、broker的基本概念

        kafka是一款基於釋出與訂閱的訊息系統。它一般被稱為“分散式提交日誌”或者“分散式流平臺”。檔案系統或者資料庫提交日誌用來提供所有事物的持久化記錄,通過重建這些日誌可以重建系統的狀態。同樣地,kafka的資料是按照一定順序持久化儲存的,可以按需讀取。

  • 1、kafka拓撲結構

  • 2、Kafka的特點

  1.    同時為分佈和訂閱提供高吞吐量。據瞭解,Kafka每秒可以生產約25萬條訊息(50MB),每秒處理55萬條訊息(110MB)這裡說條數,可能不上特別準確,因為訊息的大小可能不一致;
  2.    可進行持久化操作,將訊息持久化到到磁碟,以日誌的形式儲存,因此可用於批量消費,例如ETL,以及實時應用程式。 通過將資料持久化到硬碟以及replication防止資料丟失。
  3.   分散式系統,易於向外拓展。所有的Producer、broker和consumer都會有多個,均為分散式。無需停機即可拓展機器。
  4.   訊息被處理的狀態是在consumer端維護,而不是由server端維護,當失敗時能自動平衡。
  5.   支援Online和offline的場景。
  • 3、Kafka的核心概念

名詞 解釋
Producer 訊息的生成者
Consumer 訊息的消費者
ConsumerGroup 消費者組,可以並行消費Topic中的partition的訊息
Broker 快取代理,Kafka叢集中的一臺或多臺伺服器統稱broker.
Topic Kafka處理資源的訊息源(feeds of messages)的不同分類
Partition Topic物理上的分組,一個topic可以分為多個partion,每個partion是一個有序的佇列。partion中每條訊息都會被分                                配一個 有序的Id(offset)
Message 訊息,是通訊的基本單位,每個producer可以向一個topic(主題)釋出一些訊息
Producers 訊息和資料生成者,向Kafka的一個topic釋出訊息的 過程叫做producers
Consumers 訊息和資料的消費者,訂閱topic並處理其釋出的消費過程叫做consumers
  •   3.1 Producers的概念

  1.  訊息和資料生成者,向Kafka的一個topic釋出訊息的過程叫做producers  
  2.  Producer將訊息釋出到指定的Topic中,同時Producer也能決定將此訊息歸屬於哪個partition;比如基於round-robin方式         或者通過其他的一些演算法等;
  3. 非同步傳送批量傳送可以很有效的提高發送效率。kafka producer的非同步傳送模式允許進行批量傳送,先將訊息快取到記憶體中,然後一次請求批量傳送出去。
  •    3.2  broker的概念:

  1.  Broker沒有副本機制,一旦broker宕機,該broker的訊息將都不可用。
  2.  Broker不儲存訂閱者的狀態,由訂閱者自己儲存。
  3.  無狀態導致訊息的刪除成為難題(可能刪除的訊息正在被訂閱),Kafka採用基於時間的SLA(服務保證),訊息儲存一定時間(通常7天)後會刪除。
  4.  消費訂閱者可以rewind back到任意位置重新進行消費,當訂閱者故障時,可以選擇最小的offset(id)進行重新讀取消費訊息
  •     3.3 Message組成

  1.  Message訊息:是通訊的基本單位,每個producer可以向一個topic釋出訊息。
  2.  Kafka中的Message是以topic為基本單位組織的,不同的topic之間是相互獨立的,每個topic又可以分成不同的partition每個partition儲存一部分
  3.  partion中的每條Message包含以下三個屬性:
offset     long
MessageSize   int32
data         messages的具體內容
  •     3.4  Consumers的概念

      訊息和資料消費者,訂閱topic並處理其釋出的訊息的過程叫做consumers.       在kafka中,我們可以認為一個group是一個“訂閱者”,一個topic中的每個partions只會被一個“訂閱者”中的一個consumer       消費,不過一個consumer可以消費多個partitions中的訊息       注:        Kafka的設計原理決定,對於一個topic,同一個group不能多於partition個數的consumer同時消費,否則將意味著某些                      consumer無法得到訊息