我正在使用logstash avro插件。
我的客户端是一个java应用程序。我有几个使用'long'作为类型的模式,每次发送它时我都会在反序列化后看到错误的值。我想logstash avro插件中有一些溢出。 它有什么变通方法吗?每当我有很大的价值时,我都不想发送字符串...
以下是我案例的代码段。我有一个有效的.avsc架构,其中包含以下字段:
{
"name": "scoringId",
"type": "long",
},
然后我在java端生成了avro生成的DTO,我转换为ByteArray。 我的kafka配置没问题,它使用了ByteArraySerializer:
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteArraySerializer::class.java)
在logstash中,我有这样的输入:
input {
kafka {
bootstrap_servers => 'kafkaserver:9092'
topics => ["bart.vector"]
codec => avro { schema_uri => "C:\logstash-6.1.2\vectorInfoDWH.avsc" }
client_id => "logstash-vector-tracking"
}
}
它使用avro插件。因此,我可以访问所有字段并获得正确的值,除了long(和时间戳,因为它们被翻译为long)。
有什么想法吗?
答案 0 :(得分:0)
问题在于序列化反序列化。从java端将消息转换为base64是一种解决方案。