消息的键和值的不同模式类型
Different schema types for message's key and value
我想知道是否允许使用 JSON 键模式和 AVRO 值模式生成消息。
生产者记录的混合匹配模式类型是否有限制?
模式注册表是否禁止它?
这被认为是一种不好的做法吗?
您可以对键使用 UTF-8 文本,对值使用 Avro。你可以同时拥有两者作为 Avro。当我尝试使用 Kafka REST 并且密钥不是 avro 格式而消息是时,我无法使用消费者。基于此 issue 看起来情况仍然如此,但是如果您实施自己的生产者和消费者,您可以决定 encode/decode 以何种方式。
你必须小心钥匙。基于key,消息被发送到特定的分区,在大多数情况下消息应该是按时间顺序排列的,但这只有在它们到达同一个分区时才能实现。如果您有 userId
或任何其他标识符,您可能希望将此用户的所有事件发送到同一分区,因此请使用 userId
作为键。我不会使用 json 作为键,除非你的键基于几个字段,但你必须小心,不要以不同分区上的消息结束。
消息混合没有这种限制。 Kafka 存储字节;它不关心序列化,但主题的随机消费者可能不知道如何使用数据,因此对两者都使用 Avro(或 Protobuf)是个好主意
我想知道是否允许使用 JSON 键模式和 AVRO 值模式生成消息。
生产者记录的混合匹配模式类型是否有限制?
模式注册表是否禁止它? 这被认为是一种不好的做法吗?
您可以对键使用 UTF-8 文本,对值使用 Avro。你可以同时拥有两者作为 Avro。当我尝试使用 Kafka REST 并且密钥不是 avro 格式而消息是时,我无法使用消费者。基于此 issue 看起来情况仍然如此,但是如果您实施自己的生产者和消费者,您可以决定 encode/decode 以何种方式。
你必须小心钥匙。基于key,消息被发送到特定的分区,在大多数情况下消息应该是按时间顺序排列的,但这只有在它们到达同一个分区时才能实现。如果您有 userId
或任何其他标识符,您可能希望将此用户的所有事件发送到同一分区,因此请使用 userId
作为键。我不会使用 json 作为键,除非你的键基于几个字段,但你必须小心,不要以不同分区上的消息结束。
消息混合没有这种限制。 Kafka 存储字节;它不关心序列化,但主题的随机消费者可能不知道如何使用数据,因此对两者都使用 Avro(或 Protobuf)是个好主意