首页 > 解决方案 > Kafka 序列化/反序列化复杂对象

问题描述

我需要生产者序列化并发送一个包含字节缓冲区(视频块)和字符串的自定义对象:

public class NvrWSBinaryMessage {
  private String messageUuid;
  private final ByteBuffer payload;
...

并让消费者正确反序列化。

我还没有找到为具有 ByteBuffer 的对象创建自定义序列化器/反序列化器的正确方法。我试图将对象作为字节数组发送,但没有成功。

标签: apache-kafkakafka-serializer

解决方案


您可以将ByteBufferSerializer/ByteBufferDeserializer用于您的 kafka 客户端(生产者/消费者),但是,这将要求您将其ByteBuffer payload作为 kafka 消息/记录值和String messageUuid密钥发送。序列化 2.8 文档

如果您没有这种灵活性,那么我建议在您要作为记录值发送的对象上利用 jackson 注释(类似于referenceJsonSerializer ),并为您的客户使用/ JsonDeserializer

序列化会将对象转换为字节码格式,因此在将保存字节作为要序列化的值而无需任何额外配置的情况下传递对象时会变得很棘手。注释用于消除任何序列化歧义,从而允许 Kafka 提供的序列化程序毫无问题地完成工作。


推荐阅读