gpt4 book ai didi

apache-kafka - 在 Kafka 中使用事件携带状态传输方法时如何确保一致性

转载 作者:行者123 更新时间:2023-12-04 05:13:16 26 4
gpt4 key购买 nike

让我们假设一个像这样的简化场景:

  • 两个 Kafka 主题 , 用户 订单三微服务 用户服务 , 订购服务航运服务 .
  • 当通过下单服务下单时,订单创建 事件添加到 订单主题并由 收听海运服务 .该服务需要获取用户信息才能发送订单。根据我的要求,我不能对用户服务进行 REST 调用,而是使用有状态的方法。也就是说,海运服务是一个 Kafka Streams 应用程序,它监听用户主题,具有 由本地商店支持的 KTable 带有完整的用户表信息。因此,在处理订单时,它已经具有本地可用的用户信息。

  • 然而,这种方法的一个问题是 航运服务中本地用户信息的一致性 ,例如:
  • 用户在用户服务中更新其送货地址,更新其本地 SQL 数据库并在用户主题中发布具有此更改的事件。
  • 用户下订单,因此 order-service 将其发布在订单主题中。
  • 无论出于何种原因,运输服务都可以在从用户主题读取 UserUpdated 信息之前处理来自订单主题的 OrderCreated 事件,因此它将使用不再有效的地址。

  • 在这种事件携带状态转移场景中,我如何保证运输服务始终具有更新的用户信息?

    最佳答案

    如果需要排序保证,则需要将用户信息更新和订单写入同一主题(尤其是同一分区),因为 Kafka 仅保证单个分区内的顺序。

    您可以将此主题称为“user_action”,并使用唯一的用户 ID 作为键(用户信息更新和用户订单都是用户操作)。在您的情况下,所有三个服务都将使用“user_action”主题。用户服务只考虑用户更新,订单服务只考虑订单,配送服务同时考虑两者。

    这篇博文也可能有所帮助:https://www.confluent.io/blog/put-several-event-types-kafka-topic/

    关于apache-kafka - 在 Kafka 中使用事件携带状态传输方法时如何确保一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55426426/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com