【问题标题】:Parsing kafka protobuf event through string deserialization通过字符串反序列化解析kafka protobuf事件
【发布时间】:2018-05-18 17:14:57
【问题描述】:

我在 kafka 上接收 protobuf 消息,消费者被配置为使用

反序列化事件
value.deserializer = org.apache.kafka.common.serialization.StringDeserializer

如果我通过传递反序列化事件字符串的字节数组来使用com.google.protobuf.ParserparseFrom(byte[] data) 方法,该方法会抛出以下异常:

com.google.protobuf.InvalidProtocolBufferException: While parsing a protocol message, the input ended unexpectedly in the middle of a field.  This could mean either than the input has been truncated or that an embedded message misreported its own length.

如果我改为使用

反序列化 kafka 事件
value.deserializer = org.apache.kafka.common.serialization.ByteArrayDeserializer

并直接将接收到的字节数组传递给parseFrom,protobuf被正确解析,没有任何异常。

为什么第二种方法有效,而第一种方法无效?

【问题讨论】:

    标签: java apache-kafka protocol-buffers


    【解决方案1】:

    您正在使用字符串反序列化器,它需要某些特殊字符来定义消息的限制。它试图反序列化一个 STRING,但他只收到一堆字节,其格式是消费者根本不期望的。

    您有一个使用ByteArraySerializer 序列化的生产者,因此您的消费者必须使用ByteArrayDeserializer 对其进行反序列化。

    如果您真的想以字符串格式自动反序列化,请尝试使用 org.apache.kafka.common.serialization.StringSerializer 生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多