Apache Kafka發(fā)源于LinkedIn,于2011年成為Apache的孵化項目,隨后于2012年成為Apache的主要項目之一。Kafka使用Scala和Java進行編寫。Apache Kafka是一個快速、可擴展的、高吞吐、可容錯的分布式發(fā)布訂閱消息系統(tǒng)。Kafka具有高吞吐量、內(nèi)置分區(qū)、支持數(shù)據(jù)副本和容錯的特性,適合在大規(guī)模消息處理場景中使用。
接下來先介紹下消息系統(tǒng)的基本理念,然后再介紹Kafka。
消息系統(tǒng)介紹
一個消息系統(tǒng)負責將數(shù)據(jù)從一個應(yīng)用傳遞到另外一個應(yīng)用,應(yīng)用只需關(guān)注于數(shù)據(jù),無需關(guān)注數(shù)據(jù)在兩個或多個應(yīng)用間是如何傳遞的。分布式消息傳遞基于可靠的消息隊列,在客戶端應(yīng)用和消息系統(tǒng)之間異步傳遞消息。有兩種主要的消息傳遞模式:點對點傳遞模式、發(fā)布-訂閱模式。大部分的消息系統(tǒng)選用發(fā)布-訂閱模式。
點對點消息系統(tǒng)
在點對點消息系統(tǒng)中,消息持久化到一個隊列中。此時,將有一個或多個消費者消費隊列中的數(shù)據(jù)。但是一條消息只能被消費一次。當一個消費者消費了隊列中的某條數(shù)據(jù)之后,該條數(shù)據(jù)則從消息隊列中刪除。該模式即使有多個消費者同時消費數(shù)據(jù),也能保證數(shù)據(jù)處理的順序。這種架構(gòu)描述示意圖如下:
發(fā)布-訂閱消息系統(tǒng)
在發(fā)布-訂閱消息系統(tǒng)中,消息被持久化到一個topic中。與點對點消息系統(tǒng)不同的是,消費者可以訂閱一個或多個topic,消費者可以消費該topic中所有的數(shù)據(jù),同一條數(shù)據(jù)可以被多個消費者消費,數(shù)據(jù)被消費后不會立馬刪除。在發(fā)布-訂閱消息系統(tǒng)中,消息的生產(chǎn)者稱為發(fā)布者,消費者稱為訂閱者。該模式的示例圖如下:
Kafka概述
Apache Kafka是一個分布式的發(fā)布-訂閱消息系統(tǒng),能夠支撐海量數(shù)據(jù)的數(shù)據(jù)傳遞。在離