redis

第5章 stream消费组与kafka的的不同



stream消费组与kafka的的不同

  • redis
  • 前言



)


前言

Redis流中的消费者群体可能在某种程度上类似于基于Kafka(TM)分区的消费者群体,但请注意,实际上,Redis流非常不同。分区只是逻辑的,消息只是放入一个Redis key中,因此不同客户端的服务方式取决于谁准备好处理新消息,而不是从哪个分区客户端读取。例如,如果消费者C3在某些时候永久失败,Redis将继续为C1和C2提供所有到达的新消息,就好像现在只有两个逻辑分区一样。


同样,如果给定的消费者比其他消费者更快地处理消息,该消费者将在同一时间单位内按比例收到更多的消息。这是可能的,因为Redis会明确跟踪所有未确认的消息,并记住谁收到了哪条消息以及第一条消息的ID从未发送给任何消费者。

然而,这也意味着,在Redis中,如果您真的想将同一流中的消息分区到多个Redis实例中,则必须使用多个键和一些分片系统,如Redis集群或其他特定于应用程序的分擒系统。单个Redis流不会自动分区到多个实例。

我们可以说,从示意图上讲,以下情况是正确的:

1.如果您使用1个流->1个消费者,您将按顺序处理消息。
2.如果您与N个消费者一起使用N个流,以便只有给定的消费者击中N个流的子集,您可以扩展上述1个流->1个消费者的模型。
3.如果您使用1个流->N个消费者,您将对N个消费者进行负载平衡,但在这种情况下,有关同一逻辑项目的消息可能会被不按顺序消耗,因为给定的消费者处理消息3可能比另一个消费者处理消息4的速度快。

因此,基本上,Kafka分区更类似于使用N个不同的Redis key,而Redis消费者组是一个服务器端负载平衡系统,从流到N个不同的消费者的消息。