如何在 Apache NiFi 中解析和转换二进制数据结构?

问题描述 投票:0回答:1

我正在使用 Apache NiFi,我需要解析和转换传入的二进制数据,这些数据遵循每条消息的格式字符串

'<BBHBBHHHHHHh'
(20 字节)定义的特定结构(类似于 Python 的
struct
模块格式字符串)。数据表示一系列不同类型的字段(无符号字符、无符号短整型、有符号短整型),我需要提取这些值以便在 NiFi 流中进行进一步处理。使用 python 从 mqtt 中使用并使用 struct 将其转换为 json 非常容易,但是如何在 nifi 中做到这一点?我设法使用 mqtt 但无法解码。将来我每秒会收到许多这样的 20 字节数据包,我希望它稳定且高性能。

我知道 NiFi 主要处理基于文本或更通用的数据结构,例如 JSON 或 XML,并且我正在寻找在 NiFi 中处理这种二进制数据解析的最佳方法,如果可能的话,无需依赖外部脚本或工具。

这是我迄今为止考虑或尝试过的:

  1. 基于记录的处理器,例如
    ConvertRecord
    ,但我不确定如何为二进制数据配置记录读取器。
  2. 脚本处理器,例如
    ExecuteScript
    InvokeScriptedProcessor
    ,但我担心 Jython 或 Groovy 中处理二进制数据结构的性能和复杂性。
  3. 外部工具或脚本,我希望避免使用这些工具或脚本,以便将处理保留在 NiFi 的托管环境中。
  • 将此类二进制数据解析集成到 NiFi 数据流中的最佳实践或模式。

您的经验中的任何建议或见解将不胜感激! 如果 nifi 不是合适的工具,我对其他工具持开放态度,我确实研究过 flink,但这看起来很复杂,我喜欢 nifi 的流程思想。我也研究过 redis gears,但从 api 开发来看,它看起来不稳定。

json mqtt apache-nifi binary-data
1个回答
0
投票

这很奇怪,但最有效的变体是使用 ExecuteGroovyScript (或 ScriptedProcessor,但在性能上相同 ScriptedProc 有一些附加选项)或外部脚本和 ExecuteStreamCommand。但我认为 ExecuteGroovyScript 是不太复杂的解决方案。 更通用的解决方案编写 ScriptedReader 并根据测试使用 ConverRecord 它不是那么性能,但更通用的解决方案编写 ScriptedReader 您可以比在您选择的任何过程中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.