Kafka與MQ的區(qū)別
作為消息隊列來說忧饭,企業(yè)中選擇mq的還是多數(shù)限书,因為像Rabbit读串,Rocket等mq中間件都屬于很成熟的產(chǎn)品,性能一般但可靠性較強逻族,
而kafka原本設計的初衷是日志統(tǒng)計分析彤敛,現(xiàn)在基于大數(shù)據(jù)的背景下也可以做運營數(shù)據(jù)的分析統(tǒng)計,而redis的主要場景是內存數(shù)據(jù)庫度气,作為消息隊列來說可靠性太差,而且速度太依賴網(wǎng)絡IO膨报,在服務器本機上的速度較快磷籍,且容易出現(xiàn)數(shù)據(jù)堆積的問題,在比較輕量的場合下能夠適用现柠。
高可靠性###
RabbitMQ,遵循AMQP協(xié)議院领,由內在高并發(fā)的erlanng語言開發(fā),用在實時的對可靠性要求比較高的消息傳遞上够吩。
高速度###
kafka是Linkedin于2010年12月份開源的消息發(fā)布訂閱系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù),大數(shù)據(jù)量的數(shù)據(jù)處理上比然。
1)在架構模型方面,
RabbitMQ遵循AMQP協(xié)議周循,RabbitMQ的broker由Exchange,Binding,queue組成强法,其中exchange和binding組成了消息的路由鍵;客戶端Producer通過連接channel和server進行通信湾笛,Consumer從queue獲取消息進行消費(長連接饮怯,queue有消息會推送到consumer端,consumer循環(huán)從輸入流讀取數(shù)據(jù))嚎研。rabbitMQ以broker為中心蓖墅;有消息的確認機制。
kafka遵從一般的MQ結構临扮,producer论矾,broker,consumer公条,以consumer為中心拇囊,消息的消費信息保存的客戶端consumer上,consumer根據(jù)消費的點靶橱,從broker上批量pull數(shù)據(jù)寥袭;無消息確認機制。
2)在吞吐量关霸,
rabbitMQ在吞吐量方面稍遜于kafka传黄,他們的出發(fā)點不一樣,rabbitMQ支持對消息的可靠的傳遞队寇,支持事務膘掰,不支持批量的操作;基于存儲的可靠性的要求存儲可以采用內存或者硬盤。
kafka具有高的吞吐量识埋,內部采用消息的批量處理凡伊,zero-copy機制,數(shù)據(jù)的存儲和獲取是本地磁盤順序批量操作窒舟,具有O(1)的復雜度系忙,消息處理的效率很高。
3)在可用性方面惠豺,
rabbitMQ支持miror的queue银还,主queue失效,miror queue接管洁墙。
kafka的broker支持主備模式蛹疯。
4)在集群負載均衡方面,
rabbitMQ的負載均衡需要單獨的loadbalancer進行支持热监。
kafka采用zookeeper對集群中的broker捺弦、consumer進行管理,可以注冊topic到zookeeper上孝扛;通過zookeeper的協(xié)調機制羹呵,producer保存對應topic的broker信息,可以隨機或者輪詢發(fā)送到broker上疗琉;并且producer可以基于語義指定分片,消息發(fā)送到broker的某分片上歉铝。