Domain driven design kafka中每个聚合根事件的单个或多个主题(流)

Domain driven design kafka中每个聚合根事件的单个或多个主题(流),domain-driven-design,apache-kafka,event-sourcing,Domain Driven Design,Apache Kafka,Event Sourcing,我的订单聚合根目录能够发出几个事件,例如订单创建,订单支付,订单取消。按照建议,将所有类型的订单事件存储到单个卡夫卡主题中,并将orderId作为消息键,这是一种好的设计吗?或者我应该为他们每个人创建一个单独的主题 拥有单一主题的好处是保持了事件的顺序,但消费者需要在事件结束时过滤一些事件。第二种方法的优点是消费者更简单,因为他们可以订阅他们需要的确切主题,但构建顺序需要订阅多个主题,而他们不是按照正确的顺序来自卡夫卡,因为他们来自不同的主题 谢谢我不确定是否有对/错的问题,但这是我的两便士:

我的
订单
聚合根目录能够发出几个
事件
,例如
订单创建
订单支付
订单取消
。按照建议,将所有类型的订单事件存储到单个卡夫卡主题中,并将
orderId
作为消息键,这是一种好的设计吗?或者我应该为他们每个人创建一个单独的主题

拥有单一主题的好处是保持了事件的顺序,但消费者需要在事件结束时过滤一些事件。第二种方法的优点是消费者更简单,因为他们可以订阅他们需要的确切主题,但构建
顺序
需要订阅多个主题,而他们不是按照正确的顺序来自卡夫卡,因为他们来自不同的主题


谢谢

我不确定是否有对/错的问题,但这是我的两便士:

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

希望这对您的项目有帮助,并且外观良好。

我也有同感。我可能会在单个主题下对聚合事件进行分组,就像存储事件和稍后重播一样,您可能希望处理单个“集合”,其中包含围绕聚合的所有必要事件。对于单个聚合,权限和冗余要求可能是相同的。您决定了什么?我也在这条船上。在大多数情况下,我都只涉及一个主题(事务日志),因为我发现排序事件的好处大于筛选未使用事件的成本。