【问题标题】:Is this avro message valid?此 avro 消息有效吗?
【发布时间】:2023-03-25 22:00:01
【问题描述】:

我有一些来自 kafka 提供程序的示例 Avro 消息,看起来是这样开始的:

00000000  4f 62 6a 01 04 16 61 76  72 6f 2e 73 63 68 65 6d  |Obj...avro.schem|
00000010  61 ef bf bd 24 7b 22 74  79 70 65 22 3a 22 72 65  |a...${"type":"re|

ef bf bd 24 我希望是模式的长度,即 2332 字节。我无法确认 zigzag varint (为什么永远不会是负数的长度是 zigzaged 的​​?)是正确的值。我认为它在 200K 范围内。

我相信这就是为什么我在使用 avro-tools jar 来 getmeta、getschema 或转换为 json 时遇到问题的原因。

这是 Avro Tools 版本 1.8.2 或带有 java 1.8.0_102-b14 的平台 Mac OS 的特定已知问题吗?

这看起来像是被错误编码了吗?因为所有使用这些工具的调用都给了我:

$ java -jar ~/Downloads/avro-tools-1.8.2.jar tojson dt20170607hr08_1496793109907_11_8229967.bin.1
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.IllegalArgumentException
    at java.nio.ByteBuffer.allocate(ByteBuffer.java:334)
    at org.apache.avro.io.BinaryDecoder.readBytes(BinaryDecoder.java:288)
    at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:112)
    at org.apache.avro.file.DataFileStream.<init>(DataFileStream.java:84)
    at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:71)
    at org.apache.avro.tool.Main.run(Main.java:87)
    at org.apache.avro.tool.Main.main(Main.java:76)

【问题讨论】:

  • 你找出问题所在了吗?在这里遇到类似的问题
  • @mamdouhalramadan 不,最终发生的事情是我要求生成 avro 的人仔细检查所有内容,然后我们删除了这些文件,修改了架构,重新开始,然后事情更像是预计。

标签: avro avro-tools


【解决方案1】:

看起来您在 Avro 文件中有一条记录。生成 Avro 文件的系统正在运行旧版本。我对运行 1.7.7 的 Nifi 有类似的问题。通过将两条记录合并到 Avro 文件中,我们能够解决这个问题。

Avro 1.8.2 修复了该错误。

1.7.7 和 1.8.0/1.8.1 都有单条记录问题。

https://issues.apache.org/jira/browse/AVRO-1888

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2016-11-10
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多