首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logstash输出不能由apache avro工具解码。

Logstash输出不能由apache avro工具解码。
EN

Stack Overflow用户
提问于 2017-08-15 12:36:10
回答 1查看 1.3K关注 0票数 0

我对Logstash和Avro都是初学者。我们正在建立一个系统,用logstash作为卡夫卡队列的生产者。但是,我们遇到的问题是,由Logstash生成的avro序列化事件无法被apache提供的avro-tools jar (版本1.8.2)解码。此外,我们注意到Logstash和avro-tools的序列化输出不同.

我们有以下设置:

  • logstash版本5.5
  • logstash avro编解码器3.2.1版
  • 卡夫卡0.10.1版
  • avro-tools jar版本1.8.2

例如,请考虑以下模式:

代码语言:javascript
复制
{
"name" : "avroTestSchema",
"type" : "record",
"fields" : [ {
  "name" : "testfield1",
  "type" : "string"
  },
  {
  "name" : "testfield2",
  "type" : "string"
  }
]
}

和下面的json字符串:

代码语言:javascript
复制
{"testfield1":"somestring","testfield2":"anotherstring"}

当使用Logstash序列化时。Logstash配置文件:

代码语言:javascript
复制
input {
  stdin {
    codec => json
  }
}

filter {
 mutate {
    remove_field => ["@timestamp", "@version"]
  }
}

output {
  kafka {
    bootstrap_servers => "localhost:9092"
    codec => avro {
      schema_uri => "/path/to/TestSchema.avsc"
    }
    topic_id => "avrotestout"
  }
  stdout {
    codec => rubydebug
  }
}

输出(使用cat):

代码语言:javascript
复制
FHNvbWVzdHJpbmcaYW5vdGhlcnN0cmluZw==  

当使用avro工具序列化时。命令:

代码语言:javascript
复制
java -jar avro-tools-1.8.2.jar jsontofrag --schema-file TestSchema.avsc message.json

输出

代码语言:javascript
复制
somestringanotherstring

命令:

代码语言:javascript
复制
java -jar avro-tools-1.8.2.jar fromjson --schema-file TestSchema.avsc message.json

产出:

代码语言:javascript
复制
Objavro.codenullavro.schema▒{"type":"record","name":"avroTestSchema","fields":[{"name":"testfield1","type":"string"},{"name":"testfield2","type":"string"}]}▒▒▒▒&70▒▒Hs▒U2somestringanotherstring▒▒▒▒&70▒▒Hs▒U

因此,我们的问题是:如何配置Logstash,使输出与apache tools jar兼容?

更新:我们发现生成的logstash输出是base64编码的。但是,无法找到发生这种情况的地方,以及如何使它与avro工具兼容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 10:58:26

正如更新中提到的,我们发现标准的Logstash编解码器向Avro输出添加了一个非可选的base64编码。我们发现这是不可取的。因此,我们分叉编解码器,并使这种编码可配置。我们对此进行了测试,并在我们的几个系统上进行了开箱操作。

叉子可在github:https://github.com/Rubyan/logstash-codec-avro上使用

若要设置(或取消设置) base64编码,请将其添加到logstash文件中:

代码语言:javascript
复制
output {
     stdout {
        codec => avro {
            schema_uri => "schema.avsc"
            base64_encoding => false
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45692954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档