kafka解決了什麼問題?

我的認爲, 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. 多樣化的消費處理模型分佈式

相關文章
相關標籤/搜索