为Kafka中的消息添加类型?

Ale*_*ung 2 messaging message-queue apache-kafka

我们开始在后端重新开发中使用 Kafka,并且有一个关于如何构建我们生产和消费的消息的快速问题。

想象一下,我们有一个用户微服务来处理用户的 CRUD 操作。作为一种可能性提出的两种结构是:

1)四个kafka主题,每个操作一个。消息值将只包含执行操作所需的数据,即

topic: user_created
message value: {
    firstName: 'john'
    surname: 'smith'
}

topic: user_deleted
message value: c73035d0-6dea-46d2-91b8-d557d708eeb1 // A UUID

and so on
Run Code Online (Sandbox Code Playgroud)

2) 用户相关事件的单个主题,消息上有一个属性,描述要采取的操作以及所需的数据,即

// User created
topic: user_events
message value: {
    type: 'user_created',
    payload: {
        firstName: 'john'
        surname: 'smith'
    }
}

// User deleted
topic: user_events
message value: {
    type: 'user_deleted',
    payload: c73035d0-6dea-46d2-91b8-d557d708eeb1 // A UUID
}
Run Code Online (Sandbox Code Playgroud)

我赞成所描述的第一个系统,尽管我对 Kafka 的缺乏经验使我无法强烈争论为什么。我们非常重视来自更有经验的用户的任何意见。

小智 5

Kafka 消息没有与之关联的类型。

使用 topic-per-event-type,您将不得不担心与从不同主题读取的同一实体相关的事件的排序。仅出于这个原因,我建议将所有事件放在同一主题中。这样,客户端只需使用单个主题即可完全跟踪每个实体的状态。