Apache Kafka 是分散式釋出 - 訂閱訊息系統,在 kafka 官網上對 kafka 的定義:一個分散式釋出 - 訂閱訊息傳遞系統。
Kafka 最初由 LinkedIn 公司開發,Linkedin 於 2010 年貢獻給了 Apache 基金會併成為頂級開源專案。
Kafka 的主要應用場景有:紀錄檔收集系統和訊息系統。
Kafka 的架構包括以下元件:
1、話題(Topic):是特定型別的訊息流。訊息是位元組的有效負載(Payload),話題是訊息的分類名;
2、生產者(Producer):是能夠釋出訊息到話題的任何物件;
3、服務代理(Broker):已釋出的訊息儲存在一組伺服器中,它們被稱為代理(Broker)或 Kafka 叢集;
4、消費者(Consumer):可以訂閱一個或多個話題,並從 Broker 拉資料,從而消費這些已釋出的訊息;
上圖中可以看出,生產者將資料傳送到 Broker 代理,Broker 代理有多個話題 topic ,消費者從 Broker 獲取資料。
我們將訊息的釋出(publish)稱作 producer,將訊息的訂閱(subscribe)表述為 consumer,將中間的儲存陣列稱作 broker (代理),這樣就可以大致描繪出這樣一個場面:
生產者將資料生產出來,交給 broker 進行儲存,消費者需要消費資料了,就從 broker 中去拿出資料來,然後完成一系列對資料的處理操作。
多個 broker 協同合作,producer 和 consumer 部署在各個業務邏輯中被頻繁的呼叫,三者通過 zookeeper 管理協調請求和轉發,這樣一個高效能的分散式訊息釋出訂閱系統就完成了。
圖上有個細節需要注意,producer 到 broker 的過程是 push,也就是有資料就推播到 broker,而 consumer 到 broker 的過程是 pull,是通過 consumer 主動去拉資料的。
1. 無論是 Kafka 叢集,還是 producer 和 consumer ,都依賴於 Zookeeper 來保證系統可用性叢集儲存一些 meta 資訊。
2. Kafka 使用 Zookeeper 作為其分散式協調框架,可以很好地將訊息生產、訊息儲存、訊息消費的過程結合在一起。
3. Kafka 藉助 Zookeeper,讓生產者、消費者和 broker 在內的所有元件,在無狀態的情況下,建立起生產者和消費者的訂閱關係,並實現生產者與消費者的負載均衡。
1. 高吞吐量、低延遲
Kafka 每秒可以處理幾十萬條訊息,它的延遲最低只有幾毫秒,每個 topic 可以分多個 partition , consumer group 對 partition 進行 consume 操作。
2. 可延伸性
Kafka 叢集支援熱擴充套件。
3. 永續性、可靠性
訊息被持久化到本地磁碟,並且支援資料備份防止資料丟失。
4. 容錯性
允許叢集中節點失敗(若副本數量為 n, 則允許 n-1 個節點失敗)
5. 高並行
支援數千個使用者端同時讀寫。
1. 紀錄檔收集
一個公司可以用 Kafka 收集各種服務的 log ,通過 Kafka 以統一介面服務的方式開放給各種 consumer,例如:hadoop、Hbase、Solr 等。
2. 訊息系統
解耦和生產者和消費者、快取訊息等。
3. 使用者活動跟蹤
Kafka 經常被用來記錄 web 使用者、或者 app 使用者的各種活動,例如:瀏覽網頁、搜尋、點選等活動。
這些活動資訊,被各個伺服器釋出到 Kafka 的 topic 中,訂閱者再通過訂閱這些 topic 來做實時的監控分析,或者裝載到 hadoop 、資料倉儲中做離線分析和挖掘。
4. 運營指標
Kafka 也經常用來記錄運營監控資料。
包括收集各種分散式應用的資料,生產各種操作的集中反饋等,例如:報警和報告。
5. 流式處理
例如:spark streaming、storm 。
以上!
陳睿 | mikechen , 10 年 + 大廠架構經驗,「mikechen 的網際網路架構」系列文章作者,專注於網際網路架構技術。