Redis 和 Kafka 的区别

问题描述 投票:0回答:3

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

我很困惑何时使用哪一个。

任何用例都会有很大帮助。

redis apache-kafka publish-subscribe
3个回答
221
投票

Redis 发布-订阅基本上就像一个即发即忘的系统,您生成的所有消息将立即传递给所有消费者,并且数据不会保存在任何地方。 Redis 的内存有限制。此外,生产者和消费者的数量也会影响 Redis 的性能。

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

最终效果:

使用Redis:

    如果您想要一个一劳永逸的系统,您生成的所有消息都会立即传递给消费者。
  1. 如果最关心速度。
  2. 如果您可以忍受数据丢失。
  3. 如果您不希望系统保留已发送的消息。
  4. 要处理的数据量并不大。
使用卡夫卡:

    如果您想要可靠性。
  1. 如果您希望系统在消费后仍保留已发送消息的副本。
  2. 如果您无法忍受数据丢失。
  3. 如果速度不是一个大问题。
  4. 数据量巨大

38
投票

Redis 5.0+版本提供了Stream数据结构。它可以被视为具有传递保证的日志数据结构。它提供了一组阻塞操作,允许消费者等待生产者添加到流中的新数据,除此之外,还提供了一个称为消费者组的概念。

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)、排行榜/计数、Pub s/Sub、队列,但 kafka 具有各种用例,例如消息传递、网站活动跟踪、日志聚合、流处理、指标、事件溯源、提交日志。

© www.soinside.com 2019 - 2024. All rights reserved.