Kafka是由Apache軟件基金會開發的一個開源流處理平台,由ScalaJava編寫。該項目的目標是為處理實時數據提供一個統一、高吞吐、低延遲的平台。其持久化層本質上是一個「按照分布式事務日誌架構的大規模發布/訂閱消息隊列」,[4]這使它作為企業級基礎設施來處理流式數據非常有價值。此外,Kafka可以通過Kafka Connect連接到外部系統(用於數據輸入/輸出),並提供了Kafka Streams——一個Java流式處理

Kafka[1]
開發者Apache軟件基金會,領英
首次發布2011年1月,​13年前​(2011-01[2]
當前版本
  • 3.7.0 (2024年2月26日;穩定版本)[3]
編輯維基數據鏈接
源代碼庫 編輯維基數據鏈接
編程語言ScalaJava
操作系統跨平台
類型流式處理, 消息中間件英語message broker
許可協議Apache許可證 2.0
網站kafka.apache.org

該設計受事務日誌英語Transaction log的影響較大。[5]

Kafka的歷史

Kafka最初是由領英開發,並隨後於2011年初開源,並於2012年10月23日由Apache Incubator孵化出站。2014年11月,幾個曾在領英為Kafka工作的工程師,創建了名為Confluent的新公司,[6],並着眼於Kafka。根據2014年Quora的帖子,Jay Kreps似乎已經將它以作家弗朗茨·卡夫卡命名。Kreps選擇將該系統以一個作家命名是因為,它是「一個用於優化寫作的系統」,而且他很喜歡卡夫卡的作品。[7]

Kafka的架構

 
Kafka概覽

Kafka存儲的消息來自任意多被稱為「生產者」(Producer)的進程。數據從而可以被分配到不同的「分區」(Partition)、不同的「Topic」下。在一個分區內,這些消息被索引並連同時間戳存儲在一起。其它被稱為「消費者」(Consumer)的進程可以從分區查詢消息。Kafka運行在一個由一台或多台服務器組成的集群上,並且分區可以跨集群結點分布。

Kafka高效地處理實時流式數據,可以實現與Storm、HBase和Spark的集成。作為群集部署到多台服務器上,Kafka處理它所有的發布和訂閱消息系統使用了四個API,即生產者API、消費者API、Stream API和Connector API。它能夠傳遞大規模流式消息,自帶容錯功能,已經取代了一些傳統消息系統,如JMS、AMQP等。

Kafka架構的主要術語包括Topic、Record和Broker。Topic由Record組成,Record持有不同的信息,而Broker則負責複製消息。Kafka有四個主要API:

  • 生產者API:支持應用程序發布Record流。
  • 消費者API:支持應用程序訂閱Topic和處理Record流。
  • Stream API:將輸入流轉換為輸出流,並產生結果。
  • Connector API:執行可重用的生產者和消費者API,可將Topic鏈接到現有應用程序。

相關術語

  • Topic 用來對消息進行分類,每個進入到Kafka的信息都會被放到一個Topic下
  • Broker 用來實現數據存儲的主機服務器
  • Partition 每個Topic中的消息會被分為若干個Partition,以提高消息的處理效率
  • Producer 消息的生產者
  • Consumer 消息的消費者
  • Consumer Group 消息的消費群組

設計目標

Kafka的性能

由於其廣泛集成到企業級基礎設施中,監測Kafka在規模運行中的性能成為一個日益重要的問題。監測端到端性能,要求跟蹤所有指標,包括Broker、消費者和生產者。除此之外還要監測ZooKeeper,Kafka用它來協調各個消費者。[8][9]目前有一些監測平台可以追蹤Kafka的性能,有開源的,如領英的Burrow;也有付費的,如Datadog。除了這些平台之外,收集Kafka的數據也可以使用工具來進行,這些工具一般需要Java,包括JConsole。[10]

Consumer Group

Kafka文件格式

00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex 00000000000000782248.snapshot leader-epoch-checkpoint

使用Kafka的企業

下面的列表是曾經或正在使用Kafka的知名企業:

參見

參考資料

  1. ^ GitHub仓库镜像. [2014-04-09]. (原始內容存檔於2020-08-16). 
  2. ^ Open-sourcing Kafka, LinkedIn's distributed message queue [開源的Kafka,LinkedIn的分布式消息隊列]. [2016-10-27]. (原始內容存檔於2021-01-11). 
  3. ^ Release 3.7.0. 2024年2月26日 [2024年3月19日]. 
  4. ^ Monitoring Kafka performance metrics [監控Kafka性能數據]. Datadog官方博客. [2016-05-23]. (原始內容存檔於2020-11-08) (英語). 
  5. ^ The Log: What every software engineer should know about real-time data's unifying abstraction [The Log: What every software engineer should know about real-time data's unifying abstraction]. 領英官方博客. [2014-05-05]. (原始內容存檔於2014-03-17) (英語). 
  6. ^ Primack, Dan. LinkedIn engineers spin out to launch 'Kafka' startup Confluent [領英工程師推遲發布Kafka啟動Confluent]. [2015-02-10]. (原始內容存檔於2020-10-22) (英語). 
  7. ^ What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system? [作家卡夫卡和Apache Kafka那個分布式消息系統之間有什麼關係?]. [2017-06-12] (英語). 
  8. ^ Monitoring Kafka performance metrics [監測Kafka性能指標]. 2016-04-06 [2016-10-05]. (原始內容存檔於2020-11-08) (英語). 
  9. ^ Mouzakitis, Evan. Monitoring Kafka performance metrics [監測Kafka性能指標]. 2016-04-06 [2016-10-05]. (原始內容存檔於2020-11-08) (英語). 
  10. ^ Collecting Kafka performance metrics - Datadog [收集Kafka性能指標-Datadog]. 2016-04-06 [2016-10-05]. (原始內容存檔於2020-11-27) (英語). 
  11. ^ More data, more data [更多數據,更多數據]. [2017-12-22]. (原始內容存檔於2018-10-21) (英語). 
  12. ^ Kafka Usage in Ebay Communications Delivery Pipeline [Kafka在Ebay通信傳遞管道中的用途]. [2017-12-22]. (原始內容存檔於2019-02-16) (英語). 
  13. ^ Doyung Yoon. S2Graph : A Large-Scale Graph Database with HBase [S2Graph:基於HBase的大規模圖形數據庫]. [2017-12-22]. (原始內容存檔於2016-03-09) (英語). 
  14. ^ Cheolsoo Park and Ashwin Shankar. Netflix: Integrating Spark at Petabyte Scale [Netflix:在Pb級規模集成Spark]. [2017-12-22]. (原始內容存檔於2016-03-04) (英語). 
  15. ^ Shibi Sudhakaran of PayPal. PayPal: Creating a Central Data Backbone: Couchbase Server to Kafka to Hadoop and Back (talk at Couchbase Connect 2015) [PayPal:創建中心數據骨幹:Couchbase Server到Kafka到Hadoop和Back(在Couchbase Connect 2015上的講話)]. Couchbase. [2016-02-03]. (原始內容存檔於2016-09-17) (英語). 
  16. ^ Josh Baer. How Apache Drives Spotify's Music Recommendations [Apache如何驅動Spotify的音樂推薦]. [2017-12-22]. (原始內容存檔於2016-03-09) (英語). 
  17. ^ Streaming Messages from Kafka into Redshift in near Real-Time [從Kafka到Redshift的流式消息接近於實時]. Yelp. [2017-07-19]. (原始內容存檔於2017-06-03) (英語). 
  18. ^ Boerge Svingen. Publishing with Apache Kafka at The New York Times [在紐約時報使用Kafka進行出版]. [2017-09-19]. (原始內容存檔於2017-09-17) (英語). 
  19. ^ OpenSOC: An Open Commitment to Security [OpenSOC:一份公開的安全承諾]. 思科博客. [2016-02-03]. (原始內容存檔於2016-03-09) (英語). 
  20. ^ Apache Kafka for Item Setup [Kafka用於項目設置]. medium.com. [2017-06-12]. (原始內容存檔於2019-05-03) (英語). 
  21. ^ Stream Processing in Uber [優步的流式處理]. InfoQ. [2015-12-06]. (原始內容存檔於2015-12-05) (英語). 

外部連結