通过单向网络/数据二极管/受限网络将一个 NiFi 集群连接到另一个集群

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

我需要在受限网络环境中连接两个 Apache NiFi 实例/集群。基本上整个交换必须在单向网络/数据二极管上工作,它只支持从客户端到服务器的 TCP 包和来自服务器的 ACK 包。 FlowFile 属性和内容都应按原样传输。

Apache NiFi 提供 站点到站点功能,将一个实例/集群连接到另一个,正是我正在寻找的。它提供多种协议实现,例如原始套接字或 HTTP(S)。 然而,由于它也包括从服务器到客户端的数据交换,遗憾的是它不能在单向网络/数据二极管上工作。

除了站点到站点,NiFi 还提供使用 TCP 传输数据的处理器,即 PutTCPListenTCP 处理器对。但是,PutTCP 仅传输 FlowFile 内容而不传输 FlowFile 属性。此外,ListenTCP 不会导致将每个 FlowFile 的内容传输到一个具有相同内容的 FlowFile 中,而是使用定义的分隔符拆分内容。

是否有简单的方法通过单向网络/数据二极管将 FlowFiles(即属性和内容)从一个 NiFi 实例/集群传输到另一个 NiFi 实例/集群?

tcp apache-nifi firewall gateway flowfile
1个回答
0
投票

从 NiFi 1.21.0 开始,似乎没有针对上述问题的内置解决方案,除了使用允许执行任意代码的任一处理器(例如 ExecuteScript 处理器)提供自定义实现,或提供自定义处理器.

受 ListenTCP / PutTCP 启发的处理器对可以按原样传输 FlowFile 属性和内容,可以解决上述问题。 有一个现有但停滞不前的社区项目,旨在解决这个问题。 我最终从那个创建“nifi-flow-over-tcp”的项目中分叉出来,该项目从那时起就不断发展。遇到类似问题时,请随意使用/为项目做出贡献。

它提供了一个PutFlowToTCPListenFlowFromTCP处理器对,它们使用一个简单的基于TCP的协议,通过普通TCP套接字传输FlowFile属性和内容。

它基本上将 FlowFile 编码为一种格式,提供属性字节长度、内容字节长度,然后是属性(如 utf-8 JSON)和内容字节。在接收端,数据被解码并创建一个包含所有属性和内容的新流文件。但是请注意,由于 NiFi 处理器 API 的实现限制,不会保留 FlowFile 的 uuid。

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