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. 多样化的消费处理模型分布式

相关文章
相关标签/搜索