【发布时间】:2016-01-14 13:41:33
【问题描述】:
我的Order 聚合根能够发出多个Event,例如OrderCreated,OrderPaid,OrderCancelled。将所有类型的订单事件存储到单个 kafka 主题中并将orderId 作为消息键,如建议的here 那样,这是一个好的设计吗?或者我应该为他们每个人创建单独的主题吗?
拥有单一主题的好处是可以保持事件的顺序,但消费者需要过滤一些事件。第二种方法的优点是消费者会更简单,因为他们可以订阅他们需要的确切主题,但是构造 Order 需要订阅多个主题,而它们不是以正确的顺序来自 kafka,因为它们来自不同的主题.
谢谢
【问题讨论】:
-
我在同一条船上。我可能会在单个主题下对聚合事件进行分组,就像您在存储事件和稍后重播时所做的那样,您可能想要处理单个“集合”,其中您拥有围绕聚合的所有必要事件。单个聚合的权限、冗余要求可能相同。
-
你做了什么决定?我也在这条船上。
-
在大多数情况下(事务日志),我最终选择了单个主题,因为我发现对事件进行排序的好处超过了过滤未使用事件的成本。
标签: domain-driven-design apache-kafka event-sourcing