如何对Redis流使用背压?

问题描述 投票:2回答:1

我是否缺少某些东西,还是没有办法通过Redis流产生背压?如果生产者将数据推送到流中,则消费者可以更快地使用它,则没有明显的方法向生产者发出信号,它应该停止或放慢速度。

[我希望会有XADD的阻止版本,它将阻止客户端,直到有上限的流中有可用的空间为止(类似于XREAD的阻止版本,它允许消费者等待直到数据可用为止),但事实并非如此。

人们如何应对上述情况-向生产者发出信号,要求其推迟向流中添加更多项目?

[我了解某些数据流系统(例如Kafka)不需要背压,但是Redis似乎没有类似的解决方案,对于许多Redis流用例来说,这似乎是一个相对普遍的问题。

redis stream
1个回答
0
投票

您为什么要?除非您的内存不足,否则这不是问题,每个速度慢的消费者都可以随意阅读。

[请注意,仅通过XADD进行发布时不使用消费者组,而通过XRANGE可以通过存储在更接近Kafka的密钥中的位置来通过XRANGE读取读者。每个分区使用一个流。

生产者可以检查表的大小是否过大(每隔1K消息(通过XLEN)以至于不能减慢),如果这是个问题,您不能向其扔硬件,每个节点有20 Gig的5个节点非常容易,流分布在集群..不明白这应该很容易,所以我可能会丢失一些东西。

还有一个XADD版本可以调整表格的大小,以确保您不会过多地填充上面的内容,但是这个世界需要一些非常极端的东西。对于我们来说,这是发送最新状态的2天内频繁发送的东西的价值,对于其他人则是9个月。

另一件事不在流中存储大消息,使用Blob或单独的密钥/存储。

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