Apache kafka 基于消费者滞后的卡夫卡油门生成器

Apache kafka 基于消费者滞后的卡夫卡油门生成器,apache-kafka,kafka-consumer-api,kafka-producer-api,Apache Kafka,Kafka Consumer Api,Kafka Producer Api,有没有办法根据消费者滞后或其他消费者问题暂停或限制卡夫卡制作人?生产者是否需要自行确定是否存在消费者滞后,然后自行执行节流?生产者和消费者是解耦的 生产者将数据推送到存储在卡夫卡代理中的卡夫卡主题(分区主题)。制作人不知道谁和多久使用一次消息 消费者消费经纪人提供的数据。消费者不知道有多少生产者产生这些信息。即使相同的消息也可以被不同组中的多个消费者使用。例如,一些消费者的消费速度比另一个更快 您可以在ApacheKafka网页中阅读更多关于和的信息Kafka是基于发布/订阅设计构建的。生产者将

有没有办法根据消费者滞后或其他消费者问题暂停或限制卡夫卡制作人?生产者是否需要自行确定是否存在消费者滞后,然后自行执行节流?

生产者和消费者是解耦的

生产者将数据推送到存储在卡夫卡代理中的卡夫卡主题(分区主题)。制作人不知道谁和多久使用一次消息

消费者消费经纪人提供的数据。消费者不知道有多少生产者产生这些信息。即使相同的消息也可以被不同组中的多个消费者使用。例如,一些消费者的消费速度比另一个更快


您可以在ApacheKafka网页中阅读更多关于和的信息

Kafka是基于发布/订阅设计构建的。生产者将消息发布到集中主题。多个消费者可以订阅该主题。由于涉及多个消费者,您无法决定生产商的速度。一个消费者可能慢,另一个可能快。这也违背了设计原则,否则两个系统将紧密耦合。如果您有节流的用例,您应该评估其他框架,如直接rest调用。

不可能对生产者进行节流,从而影响消费者的性能


在我的场景中,如果磁盘大小为 在消息被消费之前超过


要解决您的问题,您必须依赖卡夫卡提供的并行性。你的卡夫卡主题应该有多个分区,制作人必须使用不同的键来填充主题。因此,您的数据将分布在多个分区中,并带来一个用户组,您可以在一组用户中管理负载。分区内的所有数据都可以按顺序处理,这可能是相关的,因为您正在处理事件处理。

在我的场景中,如果在消息消耗之前超过磁盘大小,我不希望丢失事件,因此如果我暂停生产者,那么任何慢消费者都可以跟上。但我从你们的回答中得知,我想要的东西并不存在。@mrmannione,磁盘大小,无法通过卡夫卡API以任何方式获得。为了不超过磁盘限制,Kafka具有保留时间属性,可以在代理级别或主题级别设置这些属性。默认值为7天,因此,如果邮件是旧邮件,它将从主题中删除,任何使用者都无法使用。我想暂停或限制生产者的原因是,如果超过保留期或磁盘空间,我不想丢失事件,因此,如果我知道根据消费者信息暂停,那么这会有所帮助。我使用卡夫卡有很多原因,并且正在从直接REST架构转移,所以告诉我返回REST并不能回答我的问题。我想我的问题的答案是否定的,我想要的是不可能的。@Mannione先生,我实际上回答了你的问题,并告诉了你为什么做不到。最后一行只是一个建议。如果您不想接受它,请优雅地忽略它:)问题是,如果一个消费者的速度非常慢,那么由于磁盘大小限制,它可能会错过消息,在这个场景中,如果制作人意识到并暂停了,直到它赶上进度,或者直到它得到修复和扩展,那么这对我来说似乎是一个很好的特性。为了提高消耗率,可以进行并行化。增加分区的数量,让更多的消费者收听这些分区。是的,你所要求的是不可能的。通常人们通过增加消费者吞吐量来实现这一目标。另一个想法是为你的信息增加ttl。这样,消息将保留在kafka broker中,消费者可以利用自己的时间,制作者可以继续按自己的速率制作。但同样的,如果制作人总是以相同的速度继续制作,这是行不通的。我有一个问题,即即使我对消费者进行了缩放,这些消费者中的许多人共享同一个后端,而该后端有时也会出现问题,因此我认为有一种方法可以在出现这种情况时暂停制作人。我知道我可以暂停消费者,我可以这样做,但这不是我要问的。看来我所问的是不可能的。