【问题标题】:Redis vs Kafka vs RabbitMQ for 1MB messagesRedis vs Kafka vs RabbitMQ 1MB 消息
【发布时间】:2017-12-23 00:02:39
【问题描述】:

我目前正在研究一种排队解决方案来处理 1MB 的中等大小的消息。 除了 Redis、Kafka 和 RabbitMQ 之间的功能差异之外,我找不到任何好的答案来说明它们在 1MB 左右的消息上的性能。

  1. 你们中的任何人都知道这些中的任何一个可以处理多少个 1MB 的消息吗?
  2. 您知道其他任何可以表现更好的排队解决方案吗?

【问题讨论】:

  • redis 和 kafka 比 rabbitmq 更适合高负载处理。虽然如果你没有一个非常大的用例,我会建议使用 redis,因为 kafka 会非常繁重且过大
  • 当您说高负载时,您指的是什么负载?每秒多少条消息?
  • rabbitmq 是为各个方面的轻量级消息传递而设计的

标签: performance redis rabbitmq queue apache-kafka


【解决方案1】:

我正在为 Kafka 回答问题。

Kafka 本身即使对于大消息也有非常好的性能。 在我们对 2 个 Kafka 节点的测试中,我们以 170 MB/秒的小消息和 150 MB/秒的大消息实现了 p2p 通信。

您需要记住的唯一一件事就是将代理配置为接受更大的消息。

你好文章:Configuring Kafka for Performance and Resource Management - Handling Large Messages

我知道其他 p2p 解决方案,当您有具体要求时可能会很有趣,请查看 YAMI4

我使用的是 Redis,但只用于非常小的消息,所以我不能说 1MB。

【讨论】:

    【解决方案2】:

    在您评估 Kafka 与 Redis 时,除了消息大小之外,您还必须考虑其他因素。以下是我能想到的一些:

    • 有多少生产者/消费者?由于 Redis(基于推送的队列)的性质,如果生产者/消费者数量较多,Redis 性能可能会受到影响。这是因为 Redis 在将消息放入队列的那一刻立即将消息传递给所有消费者。
    • 您首先需要速度还是可靠性?如果速度是最重要的,请使用 Redis,因为它不会持久化消息,并且会更快地传递它们。如果您需要可靠性,请使用 Kafka,因为它即使在消息传递后也会保留消息。
    • 您希望您的消费者在准备好消息后立即收到消息,还是希望消息立即发送给消费者?在第一种情况下使用 Kafka,因为它是基于拉的机制(消费者必须询问消息)。在第二种情况下,使用 Redis,因为它是基于推送的机制(消息在队列中后被推送给消费者)。 RabbitMQ 也是基于推送的(尽管有性能不佳的拉取 API)
    • 预期的消息数量是多少?如果不是很大,请使用 Redis,因为您的内存有限。否则使用卡夫卡。 RabbitMQ 的最佳实践是保持队列短。这意味着您可以以消息出现在队列中的接近速率来使用消息。因此,如果您在消费者部分有一些持久的操作,RabbitMQ 可能不是最佳选择。
    • 缩放? Kafka 可以很好地横向扩展(它在构建时考虑了可扩展性)。 RabbitMQ 通常是垂直缩放的。如果需要,Redis 还可以很好地水平扩展。

    当您评估正确的排队解决方案时,显然有不止一个标准。您正在查看的每个排队引擎都有最佳实践和建议。更多地考虑您的特定用例,这绝对值得花时间,因为如果您选择了不合适的排队引擎,它将为您节省时间。

    【讨论】: