IT|軟體|Kafka MQ 高吞吐量分佈式訊息

介紹

Kafka MQ是一個高吞吐量分布式訊息系統。是由linkedin 開源的消息中間件 

Kafka MQ 的目的是提供一個發佈訂閱解決方案,它可以處理消費者規模的網站中的所有動作流數據 這種動作(網頁瀏覽,搜索和其他用戶的行動是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像 Hadoop 的一樣的日誌數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka MQ 的目的是通過Hadoop的並行加載機制來統一線上和離線的消息處理,也是為了通過集群機來提供實時的消費。 

傳統的離線分析方案是使用日誌文件記錄數據,然後集中批量處理分析。這種方式對於實時性要求很高的活動流數據不適合,而大部分的消息中間件能夠處理實時性要求高的消息/數據,但是對於隊列中大量未處理的消息/數據在持久性方面比較弱。


Kafka 是一種高吞吐量的分布式發佈訂閱消息系統,有如下特性:  

1.通過磁盤數據結構提供消息的持久化,這種結構對於即使數以 TB 的消息存儲也能夠保持長時間的穩定性能。  

2.高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數十萬的消息。  

3.支持通過kafka服務器和消費機集群來分區消息。  

4.支持Hadoop並行數據加載。  


[特點]

Kafka MQ 的開發者們認為不需要在內存里緩存什麼數據,操作系統的文件緩存已經足夠完善和強大,只要不搞隨機寫,順序讀寫的性能是非常高效的。Kafka MQ 數據只會順序 append,數據的刪除策略是累積到一定程度或者超過一定時間再刪除。

Kafka MQ 另一個獨特的地方是將消費者信息保存在客戶端而不是 MQ 服務器,這樣服務器就不用記錄消息的投遞過程,每個客戶端都自己知道自己下一次應該從什麼地方什麼位置讀取消息,消息的投遞過程也是採用客戶端主動pull的模型,這樣大大減輕了服務器的負擔。

Kafka MQ 還強調減少數據的序列化和拷貝開銷,它會將一些消息組織成 Message Set 做批量存儲和發送,並且客戶端在 pull 數據的時候,盡量以 zero-copy 的方式傳輸,利用 sendfile(對應 java  FileChannel.transferTo/transferFrom)高級IO函數來減少拷貝開銷。

[應用]

設計上側重高吞吐量,用於好友動態,相關性統計,排行統計,訪問頻率控制,批處理等系統。

留言

這個網誌中的熱門文章

IoT|硬體|樹莓派|外接麥克風及喇叭設置

成長|語文|學習-英文 持續更新!

IoT|硬體|通訊|Arduino 使用 SoftwareSerial Library 與電腦通訊