【问题标题】:Single or multiple topic (stream) per Aggregate Root event in kafkakafka 中每个聚合根事件的单个或多个主题(流)
【发布时间】:2016-01-14 13:41:33
【问题描述】:

我的Order 聚合根能够发出多个Event,例如OrderCreatedOrderPaidOrderCancelled。将所有类型的订单事件存储到单个 kafka 主题中并将orderId 作为消息键,如建议的here 那样,这是一个好的设计吗?或者我应该为他们每个人创建单独的主题吗?

拥有单一主题的好处是可以保持事件的顺序,但消费者需要过滤一些事件。第二种方法的优点是消费者会更简单,因为他们可以订阅他们需要的确切主题,但是构造 Order 需要订阅多个主题,而它们不是以正确的顺序来自 kafka,因为它们来自不同的主题.

谢谢

【问题讨论】:

  • 我在同一条船上。我可能会在单个主题下对聚合事件进行分组,就像您在存储事件和稍后重播时所做的那样,您可能想要处理单个“集合”,其中您拥有围绕聚合的所有必要事件。单个聚合的权限、冗余要求可能相同。
  • 你做了什么决定?我也在这条船上。
  • 在大多数情况下(事务日志),我最终选择了单个主题,因为我发现对事件进行排序的好处超过了过滤未使用事件的成本。

标签: domain-driven-design apache-kafka event-sourcing


【解决方案1】:

我不确定是否有正确/错误的问题,但这是我的两便士的价值:

  • 我的经验法则是每个有界上下文的主题,以在易于管理和听众收到的事件数量之间取得平衡
  • 事件无论如何都需要排序,以便它们以正确的顺序存储在 EventStore 中。将 sequenceId 添加到您的事件并使用 Resequencer(例如在 Camel 中)以确保侦听器以正确的顺序处理事件。

希望对您的项目有所帮助和美观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多