当前位置: 首页 > 知识库问答 >
问题:

apache avro工具无法解码Logstash avro输出

岳志义
2023-03-14

我是Logstash和Avro的初学者。我们正在建立一个系统,logstash作为Kafka队列的制作人。然而,我们遇到了这样一个问题:由Logstash生成的avro序列化事件无法由apache提供的avro工具jar(版本1.8.2)解码。此外,我们注意到Logstash和avro工具的序列化输出有所不同。

我们有以下设置:

  • logstash 5.5版
  • logstash avro编解码器版本3.2.1
  • Kafka版本0.10.1
  • avro tools jar 1.8.2版

例如,考虑以下模式:

{
"name" : "avroTestSchema",
"type" : "record",
"fields" : [ {
  "name" : "testfield1",
  "type" : "string"
  },
  {
  "name" : "testfield2",
  "type" : "string"
  }
]
}

和以下json字符串

{"testfield1":"somestring","testfield2":"anotherstring"}

当使用Logstash序列化时。日志存储配置文件:

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):

FHNvbWVzdHJpbmcaYW5vdGhlcnN0cmluZw==  

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

java -jar avro-tools-1.8.2.jar jsontofrag --schema-file TestSchema.avsc message.json

输出

somestringanotherstring

命令:

java -jar avro-tools-1.8.2.jar fromjson --schema-file TestSchema.avsc message.json

输出:

Objavro.codenullavro.schema▒{"type":"record","name":"avroTestSchema","fields":[{"name":"testfield1","type":"string"},{"name":"testfield2","type":"string"}]}▒▒▒▒&70▒▒Hs▒U2somestringanotherstring▒▒▒▒&70▒▒Hs▒U

所以我们的问题是:我们如何配置Logstash以使输出与apache avro-tools jar兼容?

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

共有1个答案

轩辕啸
2023-03-14

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

github上提供了fork:https://github.com/Rubyan/logstash-codec-avro

要设置(或取消设置)base 64编码,请将其添加到您的logstash配置文件中:

output {
     stdout {
        codec => avro {
            schema_uri => "schema.avsc"
            base64_encoding => false
        }
    }
}
 类似资料:
  • 问题内容: 我的文件在第一行都有编码定义器,就像我的 正如我在相关问题上提到的那样,我用来返回api文档。由于我通过以下方式定义编码: 一切正常,当我调用我的API服务时,除了 由pprint由字典形成的字符串 外 , 没有任何编码问题 __ 由于我在字典中的某些值中使用土耳其语字符,因此pprint将其转换为等效的字符,例如: 我的纯文本输出如下: 我尝试将pprint输出解码或编码为不同的编码

  • tags:输入法 安装 安装步骤如下: 进入搜狗输入法官网,下载 Linux 64位版本 http://pinyin.sogou.com/linux/?r=pinyin 最新版本已经支持 Ubuntu12.04、14.04及16.04,而且对 linux mint 18 的支持非常好。 在终端中执行命令: sudo dpkg -i sogoupinyin_2.1.0.0086_amd64.deb

  • 我有一个maven项目(link),我想在上面运行代码覆盖率。 我在主项目pom文件上运行了命令,但没有生成报告。相反,我得到的警告是 有人能建议我如何用这个pom文件生成代码覆盖率报告吗。我正在使用apache-maven-3.3。9和testNG。

  • 本文向大家介绍Java编码辅助工具Lombok用法详解,包括了Java编码辅助工具Lombok用法详解的使用技巧和注意事项,需要的朋友参考一下 前言 在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等。这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率。 如何在IntelliJ IDEA中引

  • 我已经在spring工具套件中创建了一个spring项目。 我的代码是 正如您在这一行中看到的,我已经导入了GetMapping。 pom.xml

  • 我刚刚安装了android studio,但gradle show的错误如下。插件版本为7.0,Gradle版本为7.0.2。此外,我试图下载到另一个gradle版本,但仍然无法完成构建,它显示了相同的错误。 配置根项目我的应用程序时出现问题。 无法解析配置“: classpath”的所有工件。无法解析com.android.tools.build: gradle: 7.0.0。项目要求: