kafka解决了什么问题?
請高手指明一下kafka解決了什么問題,什么場景下使用?消息訂閱和發布嗎,好像redis也支持,功能是否有重疊?
作者:張琪
鏈接:https://www.zhihu.com/question/53331259/answer/139862117
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?
假設你意氣風發,要開發新一代的互聯網應用,以期在互聯網事業中一展宏圖。借助云計算,很容易開發出如下原型系統:
這套架構簡潔而高效,很快便能夠部署到百度云等云計算平臺,以便快速推向市場。互聯網不就是講究小步快跑嘛!
好景不長。隨著用戶的迅速增長,所有的訪問都直接通過SQL數據庫使得它不堪重負,不得不加上緩存服務以降低SQL數據庫的荷載;為了理解用戶行為,開始收集日志并保存到Hadoop上離線處理,同時把日志放在全文檢索系統中以便快速定位問題;由于需要給投資方看業務狀況,也需要把數據匯總到數據倉庫中以便提供交互式報表。此時的系統的架構已經盤根錯節了,考慮將來還會加入實時模塊以及外部數據交互,真是痛并快樂著……
這時候,應該跑慢一些,讓靈魂跟上來。
本質上,這是一個數據集成問題。沒有任何一個系統能夠解決所有的事情,所以業務數據根據不同用途存而放在不同的系統,比如歸檔、分析、搜索、緩存等。數據冗余本身沒有任何問題,但是不同系統之間像意大利面條一樣復雜的數據同步卻是挑戰。
這時候就輪到Kafka出場了。
Kafka可以讓合適的數據以合適的形式出現在合適的地方。Kafka的做法是提供消息隊列,讓生產者單往隊列的末尾添加數據,讓多個消費者從隊列里面依次讀取數據然后自行處理。之前連接的復雜度是O(N^2),而現在降低到O(N),擴展起來方便多了:
在Kafka的幫助下,你的互聯網應用終于能夠支撐飛速增長的業務,成為下一個BAT指日可待。
以上故事說明了Kafka主要用途是數據集成,或者說是流數據集成,以Pub/Sub形式的消息總線形式提供。但是,Kafka不僅僅是一套傳統的消息總線,本質上Kafka是分布式的流數據平臺,因為以下特性而著名:
作者:huxihx
鏈接:https://www.zhihu.com/question/53331259/answer/134529226
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?
個人認為, Kafka與Redis PUB/SUB之間最大的區別在于Kafka是一個完整的系統,而Redis PUB/SUB只是一個套件(utility)——沒有冒犯Redis的意思,畢竟它的主要功能并不是PUB/SUB。
先說Redis吧,它首先是一個內存數據庫,其提供的PUB/SUB功能把消息保存在內存中(基于channel),因此如果你的消息的持久性需求并不高且后端應用的消費能力超強的話,使用Redis PUB/SUB是比較合適的使用場景。比如官網說提供的一個網絡聊天室的例子:模擬IRC,因為channel就是IRC中的服務器。用戶發起連接,發布消息到channel,接收其他用戶的消息。這些對于持久性的要求并不高,使用Redis PUB/SUB來做足矣。
而Kafka是一個完整的系統,它提供了一個高吞吐量、分布式的提交日志(由于提供了Kafka Connect和Kafka Streams,目前Kafka官網已經將自己修正為一個分布式的流式處理平臺,這里也可以看出Kafka的野心:-)。除了p2p的消息隊列,它當然提供PUB/SUB方式的消息模型。而且,Kafka默認提供了消息的持久化,確保消息的不丟失性(至少是大部分情況下)。另外,由于消費元數據是保存在consumer端的,所以對于消費而言consumer被賦予極大的自由度。consumer可以順序地消費消息,也可以重新消費之前處理過的消息。這些都是Redis PUB/SUB無法做到的。
最后總結一下,
Redis PUB/SUB使用場景:
1. 消息持久性需求不高
2. 吞吐量要求不高
3. 可以忍受數據丟失
4. 數據量不大
Kafka使用場景:
上面以外的其他場景:)
1. 高可靠性
2. 高吞吐量
3. 持久性高
4. 多樣化的消費處理模型
Apache kafka是消息中間件的一種,我發現很多人不知道消息中間件是什么,在開始學習之前,我這邊就先簡單的解釋一下什么是消息中間件,只是粗略的講解,目前kafka已經可以做更多的事情。
舉個例子,生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產一個雞蛋,消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統宕機了),生產者還在生產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能吃50個雞蛋,那要不了一會,消費者就吃不消了(消息堵塞,最終導致系統超時),消費者拒絕再吃了,”雞蛋“又丟失了,這個時候我們放個籃子在它們中間,生產出來的雞蛋都放到籃子里,消費者去籃子里拿雞蛋,這樣雞蛋就不會丟失了,都在籃子里,而這個籃子就是”kafka“。
雞蛋其實就是“數據流”,系統之間的交互都是通過“數據流”來傳輸的(就是tcp、http什么的),也稱為報文,也叫“消息”。
消息隊列滿了,其實就是籃子滿了,”雞蛋“ 放不下了,那趕緊多放幾個籃子,其實就是kafka的擴容。
各位現在知道kafka是干什么的了吧,它就是那個"籃子"
作者:極限求知者
鏈接:https://www.zhihu.com/question/53331259/answer/241614605
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
來源:https://www.zhihu.com/question/53331259
總結
以上是生活随笔為你收集整理的kafka解决了什么问题?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kafka(一)-为什么使用kafka
- 下一篇: oppor9tm高清通话在哪开通(opp