【问题标题】:apache NiFi convert JSON to avroapache NiFi 将 JSON 转换为 avro
【发布时间】:2020-10-01 17:15:46
【问题描述】:

如何在 apache NiFi 中将 JSON 转换为 Avro?

即JSON 是使用getTwitter?

以前的版本似乎支持ConvertJSONToAvro。 对我来说,现在看来应该使用 convertRecord 处理器:

即使用面向记录的处理来使用 JSON 树阅读器读取 JSON 并将其写入 Avro。 但是在哪里/如何指定架构?特别是对于从 Twitter 获得的这种复杂模式。 NiFi 是否会以某种方式自动猜测正确的架构?

编辑

事实上,发生了一些相当明显的事情:

 ConvertRecord Failed to process StandardFlowFileRecord will route to failure: ${schema.name} did not provide appropriate Schema Name

即转换记录成功地解析了 json,但是在尝试应用 avro 编写器时它失败了。那么我怎样才能从推文中获得 avro 表示呢?

【问题讨论】:

    标签: json twitter apache-nifi avro


    【解决方案1】:

    您应该能够推断架构并使用现代记录处理器将其自动转换为 Avro。 Abdelkrim Hadjidj has a great write up 关于它,但总结一下:

    现代方法

    在您在ConvertRecord 中使用的JsonPathReaderJsonTreeReader 实现中使用Schema Inference 功能。这将允许它推断模式,然后通过schema.nameavro.schema 属性将其传递给AvroRecordSetWriter。还有一个模式推理缓存(使用提供的 volatile 实现,除非您有其他要求)来提高性能。

    旧方法

    使用InferAvroSchema 处理器解析传入数据并生成 Avro 架构。

    注意:由于空间限制,该处理器不再包含在 NiFi 的默认构建中,但您可以手动构建 nifi-kite-nar,然后将其部署到 $NIFI_HOME/extensions/ 目录以加载它功能。

    【讨论】:

    • 这就是我上面写的。 1. 我确实在 convertRecordProcessor 中使用 JSON Tree Reader 和 InferSchema 模式(大概这很好用)。但是,我也使用 WriteAvroRecord 作为第二步。我的作者的配置:imgur.com/55lYdkk 我尝试使用 allof (inherit, schema.name, schema.text) 但不知何故我无法访问推断的模式 - 因此失败。所以可以分享一下两者的设置吗?使用 schema.name 需要注册表,并且以某种方式推断的架构似乎没有在那里发布。
    • 使用:“继承”模式访问策略有效。但是:如果事件、媒体等字段包含媒体字段并导致无法重新定义:org.apache.nifi.mediaType 作为默认生成/推断的 avro 模式似乎重叠,则会失败。我不确定如何最好地处理这个问题。
    • @GeorgHeiler 对此有何更新?最后对你有用的是什么?
    • 请查看 github 仓库。在那里你可以找到工作代码github.com/geoHeil/streaming-reference
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多