消息的键和值的不同模式类型

问题描述

我想知道是否允许使用JSON密钥架构和AVRO值架构生成消息。

生产者记录的混合和匹配模式类型是否受到限制?

架构注册表是否禁止它? 这被认为是不好的做法吗?

解决方法

混合消息没有这种限制。 Kafka存储字节;它不关心序列化,但是该主题的随机使用者可能不知道如何使用数据,因此对这两种方法使用Avro(或Protobuf)都是一个好主意

,

您可以将UTF-8文本用作键,将Avro用作值。您可以同时拥有Avro。当我尝试使用Kafka REST且消息发送时密钥不是avro格式时,我无法使用使用者。基于issue的情况似乎仍然如此,但是如果您实现自己的生产者和消费者,则可以决定以哪种方式进行编码/解码。

您必须小心按键。基于密钥,消息将发送到特定的分区,在大多数情况下,消息应按时间顺序排列,但是只有将消息转到相同的分区才能实现。如果您有userId或任何其他标识符,则可能要将该用户的所有事件发送到同一分区,因此请使用userId作为键。除非您的密钥是基于几个字段,否则我不会使用json作为密钥,但是您必须小心,不要以不同分区上的消息结尾。