Redis和Kafka的区别

158

Redis可以像Kafka一样用作实时的发布-订阅。

我不确定在什么情况下使用哪个。

任何使用案例都将是极大的帮助。

3个回答

224

Redis发布-订阅(Pub-Sub)主要类似于一种无需确认的系统,您生产的所有消息将立即传递给所有消费者,并且数据不会保留在任何地方。与Redis相关的内存受限制。此外,生产者和消费者数量可能会影响Redis的性能。

另一方面,Kafka是一个高吞吐量的分布式日志,可用作队列。这里任意数量的用户都可以随时生产和消费。它还为通过队列发送的消息提供持久性。

最终建议:

使用Redis:

  1. 如果想要一种无需确认的系统,其中您生产的所有消息都会立即传递给消费者。
  2. 如果速度最重要。
  3. 如果您可以接受数据丢失。
  4. 如果您不希望系统保留已发送的消息。
  5. 要处理的数据量不大。

使用kafka:

  1. 如果您需要可靠性。
  2. 如果您希望系统在消费后仍保留已发送的消息副本。
  3. 如果您无法接受数据丢失。
  4. 如果速度不是最重要的考虑因素。
  5. 处理的数据量很大。

117
一个主要的区别是Redis Pub/Sub是推送(push)模式,而Kafka Pub/Sub是拉取(pull)模式。这意味着发布到Redis的消息将立即自动传递给订阅者,而在Kafka中,数据/消息永远不会被推送到消费者,当消费者准备好处理消息时,它会请求接收消息。 - Zeni

39

Redis 5.0+ 版本提供了Stream数据结构。它可以被视为具有传递保证的日志数据结构。它提供了一组阻止操作,允许消费者等待生产者向流中添加新的数据,并且还引入了一个称为"Consumer Groups"的概念。

基本上 Stream 结构提供了与 Kafka 相同的功能。

这里是文档:https://redis.io/topics/streams-intro

有两个最受欢迎的 Java 客户端支持此功能:Redisson 和 Jedis。

如果需要传递可靠性,则 Redisson 提供 ReliableTopic 对象。https://github.com/redisson/redisson/wiki/6.-distributed-objects/#613-reliable-topic


0
我认为这两种服务之间最大的区别是:
1. Redis支持基于推送的消息传递,这意味着发布到Redis的消息将立即自动传递给订阅者,而Kafka支持基于拉取的消息传递,这意味着在Kafka中发布的消息不会直接分发给消费者,消费者订阅主题并在准备好处理消息时请求获取它们。
2. Redis不支持并行性的概念,但Kafka通过数据的日志分区支持并行性,多个消费者可以在同一时间以消费者组的形式消费数据。
3. Redis一次性将消息发送给消费者,然后删除该消息。因此,没有人知道数据存储在哪里。而Kafka是一个日志,始终存在消息;您可以通过设置消息的保留策略来监控它。例如,保留7天。
4. Redis用于各种用例,如会话缓存、完整页面缓存(FPC)、排行榜/计数、发布/订阅、队列等,而Kafka有各种用例,如消息传递、网站活动跟踪、日志聚合、流处理、指标、事件溯源、提交日志等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接