kafka中每个Aggregate Root事件的单个或多个主题(流)

时间:2015-10-15 22:39:05

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

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

拥有单一主题的专家是维持事件的顺序,但消费者需要在他们的结尾过滤一些事件。第二种方法的专家是消费者会更简单,因为他们可以订阅他们需要的确切主题,但构建Order需要订阅多个主题,而他们不是来自正确序列的kafka,因为他们来自不同的主题。

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定是否有正确/错误的问题,不过这是我的两个便士'值得的:

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

希望对您的项目有所帮助和好看。