protobuf版本:3.9.1
tidb: v3.0.0
kafka消费者接收到的binlog数据OK,如下图:
binlog.proto文件定义:
java解析代码:
// value是从kafka得到的binlog日志,字符串形式。
BinLogInfo.Binlog binlog = BinLogInfo.Binlog.parseFrom(value.getBytes());
出现异常:
com.google.protobuf.InvalidProtocolBufferException: CodedInputStream encountered a malformed varint.
at com.google.protobuf.InvalidProtocolBufferException.malformedVarint(InvalidProtocolBufferException.java:98)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readRawVarint64SlowPath(CodedInputStream.java:1130)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readRawVarint64(CodedInputStream.java:1117)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readInt64(CodedInputStream.java:760)
at com.tnp.search.proto.BinLogInfo$Binlog.(BinLogInfo.java:7524)
at com.tnp.search.proto.BinLogInfo$Binlog.(BinLogInfo.java:7466)
at com.tnp.search.proto.BinLogInfo$Binlog$1.parsePartialFrom(BinLogInfo.java:8467)
at com.tnp.search.proto.BinLogInfo$Binlog$1.parsePartialFrom(BinLogInfo.java:8461)
at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:158)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
at com.tnp.search.proto.BinLogInfo$Binlog.parseFrom(BinLogInfo.java:7820)
at com.tnp.search.provider.synchronize.process.KafkaMqConsumerListener.dealMessage(KafkaMqConsumerListener.java:92)
at com.tnp.search.provider.synchronize.process.KafkaMqConsumerListener.lambda$init$0(KafkaMqConsumerListener.java:62)
at java.lang.Thread.run(Thread.java:748)
异常位置:
疑问: proto文件是按照官方提供的 https://pingcap.com/docs-cn/v3.0/reference/tools/tidb-binlog/binlog-slave-client/#%E9%85%8D%E7%BD%AE-kafka-drainer 编写的,和go语言解析不同的是java的proto文件没有如下标红的参数:
请问为啥java解析的时候出现异常? 或者提供一份java版本的proto文件。