1. 程式人生 > 其它 >Kafka之入門

Kafka之入門

什麼是 Kafka

Kafka 是一個分散式流式平臺,它有三個關鍵能力

  1. 訂閱釋出記錄流,它類似於企業中的訊息佇列 或 企業訊息傳遞系統
  2. 以容錯的方式儲存記錄流
  3. 實時記錄流

Kafka 的應用

  1. 作為訊息系統
  2. 作為儲存系統
  3. 作為流處理器

Kafka 可以建立流資料管道,可靠性的在系統或應用之間獲取資料。

建立流式應用傳輸和響應資料。

Kafka 作為訊息系統

Kafka 作為訊息系統,它有三個基本元件

  • Producer : 釋出訊息的客戶端
  • Broker:一個從生產者接受並存儲訊息的客戶端
  • Consumer : 消費者從 Broker 中讀取訊息

在大型系統中,會需要和很多子系統做互動,也需要訊息傳遞,在諸如此類系統中,你會找到源系統(訊息傳送方)和 目的系統(訊息接收方)。為了在這樣的訊息系統中傳輸資料,你需要有合適的資料管道

這種資料的互動看起來就很混亂,如果我們使用訊息傳遞系統,那麼系統就會變得更加簡單和整潔

  • Kafka 執行在一個或多個數據中心的伺服器上作為叢集執行
  • Kafka 叢集儲存訊息記錄的目錄被稱為 topics
  • 每一條訊息記錄包含三個要素:鍵(key)、值(value)、時間戳(Timestamp)

核心 API

Kafka 有四個核心API,它們分別是

  • Producer API,它允許應用程式向一個或多個 topics 上傳送訊息記錄
  • Consumer API,允許應用程式訂閱一個或多個 topics 並處理為其生成的記錄流
  • Streams API,它允許應用程式作為流處理器,從一個或多個主題中消費輸入流併為其生成輸出流,有效的將輸入流轉換為輸出流。
  • Connector API,它允許構建和執行將 Kafka 主題連線到現有應用程式或資料系統的可用生產者和消費者。例如,關係資料庫的聯結器可能會捕獲對錶的所有更改

Kafka 基本概念

Kafka 作為一個高度可擴充套件可容錯的訊息系統,它有很多基本概念,下面就來認識一下這些 Kafka 專屬的概念

topic

Topic 被稱為主題,在 kafka 中,使用一個類別屬性來劃分訊息的所屬類,劃分訊息的這個類稱為 topic。topic 相當於訊息的分配標籤,是一個邏輯概念。主題好比是資料庫的表,或者檔案系統中的資料夾。

partition

partition 譯為分割槽,topic 中的訊息被分割為一個或多個的 partition,它是一個物理概念,對應到系統上的就是一個或若干個目錄,一個分割槽就是一個 提交日誌

。訊息以追加的形式寫入分割槽,先後以順序的方式讀取。

注意:由於一個主題包含無數個分割槽,因此無法保證在整個 topic 中有序,但是單個 Partition 分割槽可以保證有序。訊息被迫加寫入每個分割槽的尾部。Kafka 通過分割槽來實現資料冗餘和伸縮性

分割槽可以分佈在不同的伺服器上,也就是說,一個主題可以跨越多個伺服器,以此來提供比單個伺服器更強大的效能。

segment

Segment 被譯為段,將 Partition 進一步細分為若干個 segment,每個 segment 檔案的大小相等。

broker

Kafka 叢集包含一個或多個伺服器每個 Kafka 中伺服器被稱為 broker。broker 接收來自生產者的訊息,為訊息設定偏移量,並提交訊息到磁碟儲存。broker 為消費者提供服務,對讀取分割槽的請求作出響應,返回已經提交到磁碟上的訊息。

broker 是叢集的組成部分,每個叢集中都會有一個 broker 同時充當了 叢集控制器(Leader)的角色,它是由叢集中的活躍成員選舉出來的。每個叢集中的成員都有可能充當 Leader,Leader 負責管理工作,包括將分割槽分配給 broker 和監控 broker。叢集中,一個分割槽從屬於一個 Leader,但是一個分割槽可以分配給多個 broker(非Leader),這時候會發生分割槽複製。這種複製的機制為分割槽提供了訊息冗餘,如果一個 broker 失效,那麼其他活躍使用者會重新選舉一個 Leader 接管。

producer

生產者,即訊息的釋出者,其會將某 topic 的訊息釋出到相應的 partition 中。生產者在預設情況下把訊息均衡地分佈到主題的所有分割槽上,而並不關心特定訊息會被寫到哪個分割槽。不過,在某些情況下,生產者會把訊息直接寫到指定的分割槽。

consumer

消費者,即訊息的使用者,一個消費者可以消費多個 topic 的訊息,對於某一個 topic 的訊息,其只會消費同一個 partition 中的訊息

在瞭解完 Kafka 的基本概念之後,我們通過搭建 Kafka 叢集來進一步深刻認識一下 Kafka。

確保安裝環境