changed 2 years ago
Published Linked with GitHub

Apache Kafka 學習筆記

Apache Kafka introduction

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Kafka 介紹影片
https://www.youtube.com/watch?v=BuE6JvQE_CY

Kafka 是一個分散式訊息引擎與流處理平臺 (大數據管理 tool),經常用做企業的訊息匯流排、實時資料管道,可以將其當做儲存系統來使用,其系統架構具有許多優點。

  • 高吞吐、低延時:這是 Kafka 顯著的特點,Kafka 能夠達到百萬級的訊息吞吐量,延遲可達毫秒級。
  • 持久化儲存:Kafka 的訊息最終持久化儲存在磁碟之上,提供了順序讀寫以保證效能,並且通過 Kafka 的副本機制 (replicaset) 提高了資料可靠性。
  • 分散式可擴充套件:Kafka 的資料是分散式儲存在不同 broker 節點的,以 topic 組織資料並且按 partition 進行分散式儲存,整體的擴充套件性都非常好。
  • 高容錯性:叢集中任意一個 broker 節點當機,Kafka 仍能對外提供服務。

Kafka架構

kafka 組件 broker 由數個 Topic 組成,一個 Topic 由數個 partition 組成
Kafka 主要架構如下

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • Producer(生產者): 為向 broker 中寫入訊息的腳色,回選擇要從哪一個 Topic 中寫入訊息
  • Consumer(消費者): 為向 broker 中訂閱者的服務,向消費者釋出訊息,消費者可以組成 Consumer Group ,此時 Broker 只會向 Consumer Group 釋放一次訊息
  • Broker: Kafka 通常以 cluster 的方式建置,多個 broker 組成一個 kafka cluster,每一個 broker 就是一個伺服器。
  • Topic: broker 由數個 partition 組成,以 database 的觀念來看,其類似 table 的概念。
  • message: kafka 儲存資料的地方,每一條訊息由一個 key, value, timestamp 所組成。
  • offset: message 儲存位置類似 dict 中 index 的概念,如儲存資料時沒有指定 key value,則假設本次訊息的 offset 為 N,下一次訊息儲存 offset 為 n+1。

Kafka API

  • Producer API: 釋出一個訊息到一個或多個 Topic。
  • Consumer API: 訂閱一個或多個 Topic 並處理其中訊息。
  • Streams API: 為流處理器,從一個或多個 topic 消費輸入流,並生產一個輸出流到1個或多個輸出 topic,有效地將輸入流轉換到輸出流。
  • Connector API: 可構建或執行可重用的生產者或消費者,將 topic 連線到現有的應用程式或資料系統。例如,連線到關聯式資料庫的聯結器可以捕獲表的每個變更。

Streams API 補充

Stream Processing

streams API 使用流計算,在流計算中,輸入是持續的,在系統上來看輸入和輸出都是持續發生的,因此在流計算中要求即時性高

Batch Processing

批量處理模型中,將輸入先定義計算邏輯,而後將數據統一輸入,統一計算後輸出。


Thank you!
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

You can find me on

Select a repo