Redis Streams与Kafka Streams / NATS

时间:2018-10-25 17:49:00

标签: redis apache-kafka nats-streaming-server

Redis团队为Redis 5.0引入了新的Streams数据类型。由于Streams从第一眼看上去就像是Kafka主题,因此找到使用它的真实示例似乎很奇怪。

streams intro中,我们与Kafka流进行了比较:

  1. 运行时使用者组处理。例如,如果三个消费用户之一永久失败,那么Redis将继续为第一和第二用户服务,因为现在我们只有两个逻辑分区(消费者)。
  2. Redis的传输速度更快。它们是从内存中存储和操作的,因此这一情况确实如此。

我们与Kafka,RabbitMq和NATS有一些项目。现在,我们深入研究Redis流,以尝试将其用作“ pre kafka缓存”,并在某些情况下用作Kafka / NATS替代方案。现在最关键的一点是复制:

  1. 通过AOF复制将所有数据存储在内存中。
  2. 默认情况下,异步复制将不保证XADD命令或使用者组状态更改得以复制:故障转移后,根据从站从主站接收数据的能力,可能会丢失某些内容。这似乎是杀死任何尝试高负载流的兴趣的观点。
  3. 由Sentinel或Redis Cluster操作的
  4. Redis故障转移过程仅执行尽力而为的检查以故障转移到最新更新的从属,并且在某些特定故障下可能会导致缺少某些数据的从属。

还有上限策略。 Redis Streams真正的“上限资源”是内存,因此要存储多少项或使用哪种上限策略并不重要。因此,每当您的使用者失败时,您都会获得峰值内存消耗或消息丢失(上限)。

我们使用Kafka作为RTB投标者前端,它每秒处理约1,100,000条消息,有效载荷约为120个字节。使用Redis,我们在写入时消耗〜170 mb / sec的内存,而使用512 gb RAM服务器,我们可以写入“保留”以存储约50分钟的数据。因此,如果这次处理系统将脱机,我们将崩溃。

能否请您进一步介绍Redis Streams在现实世界中的使用情况,并且某些情况下您可能会尝试自己使用它?还是Redis Streams可以用于不大量数据?

1 个答案:

答案 0 :(得分:3)

好久不见了。感觉就像是属于redis-db邮件列表的讨论,但用例听起来很有趣。

请注意,Redis Streams不能替代Kafka,尽管有相似之处,但它们提供了不同的属性和功能。对于复制的异步性质,您当然是正确的。至于扩展可用的RAM量,您应该考虑使用群集,并在基于句点的键名之间划分流。