Kafka
来自维基百科,自由的百科全书
Kafka是由Apache軟件基金會開發的一個開源流處理平台,由Scala和Java編寫。該項目的目標是為處理實時數據提供一個統一、高吞吐、低延遲的平台。其持久化層本質上是一個「按照分布式事務日誌架構的大規模發布/訂閱消息隊列」,[3]這使它作為企業級基礎設施來處理流式數據非常有價值。此外,Kafka可以通過Kafka Connect連接到外部系統(用於數據輸入/輸出),並提供了Kafka Streams——一個Java流式處理庫。
![]() | 此條目的引用需要清理,使其符合格式。 (2020年11月2日) |
該設計受事務日誌的影響較大。[4]
Kafka的歷史
Kafka最初是由領英開發,並隨後於2011年初開源,並於2012年10月23日由Apache Incubator孵化出站。2014年11月,幾個曾在領英為Kafka工作的工程師,創建了名為Confluent的新公司,[5],並着眼於Kafka。根據2014年Quora的帖子,Jay Kreps似乎已經將它以作家弗朗茨·卡夫卡命名。Kreps選擇將該系統以一個作家命名是因為,它是「一個用於優化寫作的系統」,而且他很喜歡卡夫卡的作品。[6]
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用它來協調各個消費者。[7][8]目前有一些監測平台可以追蹤Kafka的性能,有開源的,如領英的Burrow;也有付費的,如Datadog。除了這些平台之外,收集Kafka的數據也可以使用工具來進行,這些工具一般需要Java,包括JConsole。[9]
Consumer Group
Kafka文件格式
00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex 00000000000000782248.snapshot leader-epoch-checkpoint
使用Kafka的企業
下面的列表是曾經或正在使用Kafka的知名企業:
參見
- Apache ActiveMQ
- Apache Flink
- Qpid
- Samza
- Apache Spark
- 數據發布服務
- 企業集成模式
- 企業消息系統
- 事件流式處理
- 事件驅動SOA
- 面向消息的中間件
- 面向服務的架構
- StormMQ
參考資料
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.