1. 程式人生 > >kafka基本概念

kafka基本概念

中心 是否 如何實現 適合 中一 添加 producer img rod

Apache Kafka?是一個分布式流處理平臺,它到底是什麽呢?

具有三個關鍵能力的流處理平臺:

  • 發布和訂閱記錄流,類似於消息隊列或企業消息傳遞系統
  • 以容錯的持久方式存儲記錄流
  • 在流生成的時候進行流的處理

Kafka通常有兩大類應用:

  • 用於構建可靠地獲取系統或應用之間的數據的實時數據流管道
  • 用於構建轉換或響應數據流的實時數據流處理應用

為了理解kafka是如何實現這些功能的,讓我們深入了解並從頭開始探索kafka的功能。

首先是幾個概念:

  • Kafka作為集群運行在可以跨多個數據中心的一個或多個服務器上
  • Kafka集群將記錄流所存儲的類別被稱為主題 topics
  • 每個記錄由一個鍵、一個值和一個時間戳組成

kafka有四個核心API:

  • 生產者( Producer API ) 允許應用向一個或多個Kafka主題發布記錄流。
  • 消費者( Consumer API ) 允許應用訂閱一個或多個主題,並處理生成給它們的記錄流
  • 流( Streams API ) 應用充當流處理器,消費來自一個或多個主題的輸入流,生成輸出到一個或多個主題的輸出流,高效的實現輸入流到輸出流的轉換
  • 連接器( Connector API) 允許構建和運行將Kafka主題連接到現有應用程序或數據系統的可重用生產者或消費者。例如,連接到關系數據庫的可能捕獲對表的每個更改的連接器

技術分享圖片

在Kafka中,客戶端和服務器之間的通信是通過一個簡單的、高性能的、與語言無關的TCP協議完成的。TCP協議受版本控制,並與舊版本保持向後兼容性。我們為Kafka提供了一個Java客戶端,但是客戶端可以使用多種語言。

主題和日誌

讓我們首先深入了解Kafka提供的記錄流的核心抽象概念——主題(topic)

主題是發布記錄的類別或概要名稱。Kafka中的主題通常是多訂閱的;也就是說,一個主題可以有0個、1個或多個消費者訂閱寫入主題的數據。

對於每個主題,Kafka集群都維護一個如下所示的分區日誌:

技術分享圖片

每個分區都是一個有序的、不可變的記錄序列,記錄被不斷的添加到分區中。分區中的記錄都被分配了一個有序的id號,叫做偏移,作為每個記錄在分區中的唯一標示。

在一個可配置的時間內,kafka能夠保留所有已發布的記錄,無論記錄是否被消費。例如,如果保留策略設置為2天,那麽在發布記錄後的2天內,記錄是可以被消費的,之後記錄將被丟棄來釋放空間。Kafka的性能對於數據量來說是恒定的,因此長時間存儲數據不是問題。

技術分享圖片

事實上,保留在每個消費者的基礎上的唯一的元數據是消費者在日誌中偏移或位置。偏移量由消費者控制:通常,消費者在讀取記錄時偏移量將線性增大;但實際上,由於位置是由消費者控制的,所以它可以按自己喜歡的任何順序來消費記錄。例如,使用者可以重置到舊的偏移量來重新處理過去的數據,或者跳到最近的記錄並從“現在”開始消費。

這些特性的組合意味著Kafka的消費者非常輕量的,他們可以再對集群或其他消費者不造成太大影響下消費數據。例如,可以使用kafka的命令行工具“跟蹤”任何主題的內容,而不更改任何現有消費者使用的內容。

日誌中的分區有幾個用途。首先,它們允許日誌擴展到超出單個服務器的大小。每個單獨的分區必須適合承載它的服務器,但是一個主題可以有多個分區,一個主題可以處理任意數量的數據。其次,它們作為平行的單元——關於這點,稍後會詳細介紹。

分布式

日誌的分區分布在Kafka集群中的服務器上,這樣每個服務器都能夠處理分區共享的數據和請求。為了容錯,每個分區在任意數量的服務器之間復制。

每個分區都有一個服務器充當leader,其余服務器充當follower。leader處理分區的所有讀寫請求,而follower則被動地復制leader。如果leader down了,其中一個follower將自動成為新的領導者。每個服務器作為它的一些分區的leader和其他分區的追隨者,因此負載在集群中得到很好的平衡。

跨域復制

kafka的映射機制為集群提供跨域復制的能力。基於映射機制,消息被復制到多個數據中心或雲。可以用於各種場景的備份和恢復、或各種場景下將數據布置在離用戶更近的地方、或者支撐局部的數據需求。

Producers

Producers 將消息發布到指定的topic中,並決定分配到主題中的哪個分區。可以通過循環的方式簡單的實現負載平衡,或者可以根據某種特定的分區函數來實現(比如根據記錄中的某個鍵)。

Consumers

每個消費者都會打上消費者組的標簽,發布到主題的每個記錄被分配給到每個訂閱消費者組中的一個消費者實例。消費者實例可以位於單獨的進程中,也可以位於單獨的機器上。

如果所有消費者實例具有相同的使用者組標簽,則消息將有效地平均加載到使用者實例。

如果所有消費者實例具有不同的使用者組標簽,則每個消息將廣播到所有消費者進程。

kafka基本概念