是否应为新实体与属性更新事件设置两个不同的Kafka Topic?
Kafka Topic设计:单Topic vs 分Topic处理实体与属性更新事件
是否要为新实体创建(比如新任务)和属性更新(比如任务分配新经办人)这两类事件设置不同的Kafka Topic?
方案一:单Topic + 带eventType的统一Schema
可以使用单个Topic,通过事件Schema中的eventType字段区分事件类型,示例如下:
{ "eventType": "CREATED", "id": 123, "name": "Bugfix 123", "assigneeId": null }
{ "eventType": "ASSIGNED", "id": 123, "name": "Bugfix 123", "assigneeId": 456 }
方案二:两个独立Topic
如果存在完全不关心新任务创建、只需要处理经办人分配事件的消费者,这种场景下使用两个独立Topic更合适——消费者可以只订阅自己关注的Topic,避免消费不必要的消息。
核心权衡点:顺序保障
选择单Topic的关键理由是顺序保障:
如果按taskId分区,单一Topic可确保同一任务的
task.created事件始终先于task.assignee.updated事件到达。而在两个独立Topic中,消费者若无外部同步逻辑则无法协调顺序,竞态条件会成为实际问题。– Claude Sonnet
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

