Kafka邮件标题是放置事件类型名称的正确位置吗?

时间:2019-03-22 16:02:22

标签: apache-kafka

在为单个主题生成多个单一域事件类型并且消费者仅使用事件类型的子集的情况下,我需要一种采取行动之前读取事件类型的好方法。 我看到2个选项:

  1. 将事件类型(例如“ ORDER_PUBLISHED”)放入消息正文(有效负载)本身,这就像代理不可知论方法,并且具有其他优点。但是会涉及解析每条消息,只是为了了解事件类型。
  2. 利用Kafka消息头,无需消耗有效负载即可解析消息。

上下文是事件源。小命令,小有效载荷。没有巨大的物体可以解析。高朗所有消息都是protobufs。 gRPC。

在这种情况下典型的工作流程是什么。

我尝试用Google搜索这个主题,但是在Header用例和良好实践方面却发现不多。 很高兴听到何时以及如何使用Kafka消息标题以及何时不使用它们。

1 个答案:

答案 0 :(得分:1)

显然,对于适用于同一实体/聚合 (reference) 的不同事件类型,应该使用相同的主题。示例:BookingCreated、BookingConfirmed、BookingCancelled 等都应该转到同一主题,以(请原谅双关语)保证交付的顺序(在这种情况下,预订 ID 是消息键)。

当消费者获得这些事件之一时,它需要识别事件类型,解析有效负载,并相应地路由到处理逻辑。 事件类型是允许进行此识别的消息元数据

因此,我认为自定义 Kafka 消息标头是指示事件类型的最佳位置。我并不孤单:

  • Felipe Dutra:“Kafka 允许您将元数据作为消息的标题。因此,使用它来放置有关消息、版本、类型、correlationId 的信息。如果您有事件链,还可以添加opentracing的correlationId"

  • GE ERP system 有一个标有“event-type”的标题,用于向 kafka 主题(例如“ProcessOrderEvent”)显示“发布的事件的类型”。

  • other solution 提到在他们的 Kafka 集成中“每条消息中都包含具有事件类型的标题‘事件’”。

标题是 Kafka 中的新内容。此外,据我所知,Kafka 书籍侧重于 1.7 万个 Kafka 配置选项和 Kafka 拓扑。不幸的是,我们很难找到太多关于如何使用适当的语义将事件驱动架构映射到 Kafka 消息代理的元素上的信息。