Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过字符串反序列化解析kafka protobuf事件_Java_Apache Kafka_Protocol Buffers - Fatal编程技术网

Java 通过字符串反序列化解析kafka protobuf事件

Java 通过字符串反序列化解析kafka protobuf事件,java,apache-kafka,protocol-buffers,Java,Apache Kafka,Protocol Buffers,我在kafka上接收protobuf消息,消费者被配置为使用 value.deserializer = org.apache.kafka.common.serialization.StringDeserializer 如果我通过传递反序列化事件字符串的字节数组使用parseFrom(byte[]data)方法com.google.protobuf.Parser,该方法会引发以下异常: com.google.protobuf.InvalidProtocolBufferException: Whi

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

value.deserializer = org.apache.kafka.common.serialization.StringDeserializer
如果我通过传递反序列化事件字符串的字节数组使用
parseFrom(byte[]data)
方法
com.google.protobuf.Parser
,该方法会引发以下异常:

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.
如果我将卡夫卡事件反序列化为

value.deserializer = org.apache.kafka.common.serialization.ByteArrayDeserializer
并直接将由此接收到的字节数组传递给parseFrom,protobuf被正确解析,没有任何异常


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

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

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

如果确实希望以字符串格式自动反序列化,请尝试使用
org.apache.kafka.common.serialization.StringSerializer生成