Redis vs Kafka vs RabbitMQ的1MB消息

Sla*_*lny 6 queue performance rabbitmq redis apache-kafka

我目前正在研究排队解决方案来处理1MB的中型消息.除了Redis,Kafka和RabbitMQ之间的功能差异,我找不到任何关于他们在大小约1MB的消息上的表现的好答案.

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

buh*_*tla 19

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

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

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


Sew*_*zki 2

我正在为卡夫卡回答。

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

您唯一需要记住的是配置代理以接受更大的消息。

Hier 是一篇不错的文章:配置 Kafka 进行性能和资源管理 - 处理大消息

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

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