apache NiFi 将 JSON 转换为 avro

apache NiFi convert JSON to avro

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

即JSON是使用getTwitter获得的?

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

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

编辑

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

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

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

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

现代方法

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

旧方法

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

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