[转载] KAFKA分布式消息系统
轉載自http://blog.chinaunix.net/uid-20196318-id-2420884.html
Kafka[1]是linkedin用于日志處理的分布式消息隊列,linkedin的日志數據容量大,但對可靠性要求不高,其日志數據主要包括用戶行為(登錄、瀏覽、點擊、分享、喜歡)以及系統運行日志(CPU、內存、磁盤、網絡、系統及進程狀態)。
?
當前很多的消息隊列服務提供可靠交付保證,并默認是即時消費(不適合離線)。高可靠交付對linkedin的日志不是必須的,故可通過降低可靠性來提高性能,同時通過構建分布式的集群,允許消息在系統中累積,使得kafka同時支持離線和在線日志處理。
?
注:本文中發布者(publisher)與生產者(producer)可以互換,訂閱者(subscriber)與消費者(consumer)可以互換。
?
Kafka的架構如下圖所示:
?
Kafka存儲策略
?
發布與訂閱接口
?
發布消息時,kafka client先構造一條消息,將消息加入到消息集set中(kafka支持批量發布,可以往消息集合中添加多條消息,一次行發布),send消息時,client需指定消息所屬的topic。
?
訂閱消息時,kafka client需指定topic以及partition num(每個partition對應一個邏輯日志流,如topic代表某個產品線,partition代表產品線的日志按天切分的結果),client訂閱后,就可迭代讀取消息,如果沒有消息,client會阻塞直到有新的消息發布。consumer可以累積確認接收到的消息,當其確認了某個offset的消息,意味著之前的消息也都已成功接收到,此時broker會更新zookeeper上地offset registry(后面會講到)。
?
?
高效的數據傳輸
?
無狀態broker
?
Consumer group
?
Zookeeper?協調控制
1.?管理broker與consumer的動態加入與離開。
2.?觸發負載均衡,當broker或consumer加入或離開時會觸發負載均衡算法,使得一
? ?個consumer group內的多個consumer的訂閱負載平衡。
3.??維護消費關系及每個partion的消費信息。
?
Zookeeper上的細節:
?
?
消息交付保證
?
?
Linkedin的應用環境
如下圖,左邊的應用于日志數據的在線實時處理,右邊的應用于日志數據的離線分析(現將日志pull至hadoop或DWH中)。
?
?
?
Kafka的性能
?
測試環境:?2 Linux machines, each with 8 2GHz cores,??16GB??of??memory,??6??disks??with??RAID??10.??The??two machines?are??connected??with??a??1Gb??network??link.??One??of??the machines was used as the broker and the other machine was used as the producer or the consumer.
?
測試評價(by me):(1)環境過于簡單,不足以說明問題。(2)對于producer持續的波動沒有進行分析。(3)只有兩臺機器zookeeper都省了??
?
測試結果:如下圖,完勝其他的message queue,單條消息發送(每條200bytes),能到50000messages/sec,50條batch方式發送,平均為400000messages/sec.
?
?
?
?
Kafka未來研究方向
1. 數據壓縮(節省網絡帶寬及存儲空間)
2. Broker多副本
3. 流式處理應用
?
?
參考資料
【1】??http://research.microsoft.com/en-us/um/people/srikanth/netdb11/netdb11papers/netdb11-final12.pdf
【2】??https://cwiki.apache.org/KAFKA/kafka-papers-and-presentations.data/Kafka-netdb-06-2011.pdf
轉載于:https://www.cnblogs.com/scott19820130/p/4736089.html
總結
以上是生活随笔為你收集整理的[转载] KAFKA分布式消息系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP知识点大致介绍1
- 下一篇: JAVA并发七(多线程环境中安全使用集合