Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者規模小打的網站中所有動作流資料。
優勢
- 高吞吐量:非常普通的硬體Kafka也可以支援每秒100W的訊息,即使在非常廉價的商用機器上也能做到單機支援每秒100K條訊息的傳輸。
- 支援通過Kafka伺服器和消費機叢集來區分訊息,也就是可以對訊息進行分類,然後使用不同分類的伺服器消費機去消費不同分類的訊息。
- 支援Hadoop並行資料載入。
- 以時間複雜度為O(1)的方式提供訊息持久化能力,並保證即使對TB級以上資料也能保證常數時間的訪問效能
- 支援Kafka Server間的訊息分割槽,及分散式訊息消費,同時保證每個partition內的訊息順序傳輸;producter、broker、consumer均支援水平擴充套件
- 同時支援離線資料處理和實時資料處理
- 訊息持久化,所有的訊息均被持久化到磁碟,無訊息丟失,支援訊息重放
Kafka和其他主流分散式訊息系統的對比
阿里巴巴的Metal,RocketMQ都有Kafka的影子,他們要麼改造了Kafka或者借鑑了Kafka,最後Kafka的動態擴容是通過Zookeeper來實現的。
關鍵概念:
Broker:kafka叢集中的一臺或者多臺伺服器統稱為broker。
Topic:Kafka處理的訊息源(feeds of messages)的不同分類,可以理解為訊息分類。
Partition:Topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的佇列。rartition中的每條訊息都會被分配一個有序的id(offset)。也就是可以理解為一個群的群名稱或者群號,因為大家都在這個群裡面消費,成為分類,然後消費topic的時候進行物理分組,比如一個partition不夠用,可以分配給多個partition。
Message:訊息,是通訊的基本單位,每個producer可以向一個topic(主題)釋出一些訊息。
Producers:訊息和資料的生產者,向Kafka的一個topic釋出訊息的過程叫做producers。
Consumers:訊息和資料消費者,訂閱topics並處理其釋出的訊息過程叫做consumers。
圖示說明
最上面的是Producer,也就是消費的生產者,生產好資料之後push到Broker中,也就是Kafka的伺服器,push好之後下面有Consumer去消費Kafka的佇列,可以看到圖中是Consumer去拽Kafka中的訊息,然後消費。整體是通過Zookeeper管理。