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

Single or multiple topic (stream) per Aggregate Root event in kafka

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

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

谢谢

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

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

希望对您的项目有所帮助,让您的项目看起来更漂亮。