Apache Kafka:如何检查事件是否已完全处理?

6
我在使用像Apache Kafka这样的事件/消息代理解耦两个系统时遇到了一个问题。该问题与前端触发后端操作有关:
如果发布者不知道消费后端的“身份”或数量,那么生产者(前端服务)如何知道已经正确处理所有后端服务(作为消费者)所发布的事件?
具体而言,用户可以使用前端 UI 更改其电子邮件地址。相关服务将“更改请求”事件发布到 Kafka 中的适当主题。然后,UI 表单被“锁定”,以防止后续的更改请求,直到每个消费者已完全处理更改事件,但如何检测此状态仍不明确。
2个回答

2
您可以使用另一个主题来发布已处理的作业。因此,您的前端将发布到一个主题,一旦完成,您的后端将发布到另一个主题。

1
在Kafka术语中,生产者和消费者都不被视为后端 - 它们都是连接到代理的客户端,代理通常被认为是后端。
通过acks设置,生产者将知道它已成功地生成了一条消息。消费者将读取消息,然后在稍后的时间点,其偏移量将更新为对应于它读取的最后一条消息的位置。但是,生产者和消费者通常没有交互,并且它们通常完全不知道彼此的存在。

因此,将Kafka的具体内容放在一边:有哪些方法可用于实现“伪同步”架构,以便事件的发射器知道所有适当的侦听器已处理(消耗)该事件?选项1:生产者维护消费者列表(反过来使用某种发现来进行介绍)。每个消费者在处理完原始事件后触发“完成”事件,生产者订阅适当的主题。 选项2:事件按顺序由所有消费者处理,最终消费者发出“全部完成”事件。看起来像ESB / BPM工具。 - user4685790

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接