【问题标题】:Apache Kafka: How to check, that an event has been fully handled?Apache Kafka:如何检查事件是否已完全处理?
【发布时间】:2019-01-22 09:18:50
【问题描述】:

在通过 Apache Kafka 等事件/消息代理解耦两个系统时,我遇到了一个问题。该问题与后端中的前端触发操作有关:

如果发布者既不知道“身份”也不知道消费后端的数量,生产者(前端服务)如何知道已发布的事件已被所有后端服务(作为消费者)正确处理?

确切地说:用户可以使用前端 UI 更改例如他们的电子邮件地址。关联服务将该“更改请求”事件发布到 Kafka 中的适当主题。然后 UI 表单被“锁定”以防止后续的更改请求,直到每个消费者都完全处理了更改事件。但目前尚不清楚如何检测这种状态。

【问题讨论】:

    标签: events apache-kafka


    【解决方案1】:

    在 Kafka 术语中,生产者和消费者都不被视为后端 - 它们都是连接到通常被视为后端的代理的客户端。

    通过acks 设置,生产者将知道它已成功生成消息。消费者将读取一条消息,然后在稍后的时间点,它的偏移量将更新到与它读取的最后一条消息相对应的点。但是,生产者和消费者之间通常没有交互,而且他们通常完全不知道彼此。

    【讨论】:

    • 所以,撇开 Kafka 的细节不谈:有哪些方法可以实现“伪同步”架构,以便事件的发射器知道该事件已被所有适当的侦听器处理(消费)?选项1:生产者一维护一个消费者列表(反过来使用某种发现来介绍自己)。每个消费者在原始事件被处理后触发一个“完成”事件,生产者订阅相应的主题。选项 2:事件由所有消费者按顺序处理,最终消费者发出“全部完成”事件。看起来像一个 ESB/BPM 工具。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多