如何对Redis streams使用背压?

如何对Redis streams使用背压?,redis,stream,Redis,Stream,我是否遗漏了什么,或者是没有办法用Redis streams产生反压力?如果生产者将数据推送到流中,消费者可以更快地使用数据,那么就没有明显的方式向生产者发出信号,表明它应该停止或减慢速度 我预计会有一个阻塞版本的XADD,它将阻塞客户机,直到空间在一个有限制的流中变为可用(类似于XREAD的阻塞版本,它允许用户等待数据变为可用),但情况似乎并非如此 人们是如何处理上述情况的——向制作人发出信号,要求其推迟向流中添加更多项目 我知道有些数据流系统,如Kafka,不需要背压,但Redis似乎没有类

我是否遗漏了什么,或者是没有办法用Redis streams产生反压力?如果生产者将数据推送到流中,消费者可以更快地使用数据,那么就没有明显的方式向生产者发出信号,表明它应该停止或减慢速度

我预计会有一个阻塞版本的
XADD
,它将阻塞客户机,直到空间在一个有限制的流中变为可用(类似于
XREAD
的阻塞版本,它允许用户等待数据变为可用),但情况似乎并非如此

人们是如何处理上述情况的——向制作人发出信号,要求其推迟向流中添加更多项目


我知道有些数据流系统,如Kafka,不需要背压,但Redis似乎没有类似的解决方案,而且对于许多Redis streams用例来说,这似乎是一个相对常见的问题。

为什么要这样做?除非您的内存不足,否则这不是一个问题,每个消费者都可以在空闲时阅读

注意:不使用消费群体,仅通过XADD发布,读者通过XRANGE读取,通过存储在靠近卡夫卡的钥匙中的位置读取。每个分区使用一个流

生产者可以检查表大小是否每1K消息(通过XLEN)变得太大而无法降低速度,如果这是一个问题,您不能向它抛出硬件5个节点,每个节点20 Gig,流分布在集群中非常容易。。不明白这应该很容易,所以我可能错过了一些东西

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

另一件事是不要在流中存储大消息,使用blob或单独的键/存储。

如果启用了持久性(RDB或AOF),则流消息将被持久化,因此不需要背压。
如果您使用副本,则会有另一种程度的冗余。
只有当Redis没有足够的内存(或副本的网络带宽)来保存消息时,才需要背压。

老实说,我从未见过这种情况。

同样的问题,使得在对流边界和内存消耗几乎没有控制的情况下使用redis streams非常困难