NiFi转发/复制TCP流

时间:2019-03-11 19:42:01

标签: tcp stream apache-nifi

我应该复制一个二进制TCP流。

因此,我设置了一个NiFi 1.9.0服务器,分别安装了ListenTCP处理器和PutTCP处理器,配置了正确的IP和端口并进行了连接。

到目前为止,这些数据包已由ListenTCP处理器接收,并且也由PutTCP处理器转发。

但是NiFi似乎以某种方式弄乱了数据,发送的数据包与接收的数据包不完全相同。我希望NiFi能够将所有内容按1:1的顺序转发,但是正在发生某些事情,我无法找出原因。

我一直在ListenTCP处理器上使用“字符集”,“最大批处理大小”和“批处理消息Delemiter”设置,并在PutTCP处理器上使用“外发消息Delemiter”和“字符集”。

我还弄乱了MergeContent处理器,但没有使其正常工作。

在这里您可以看到已接收数据(红色)和已发送数据(使用tcpflow捕获)之间的差异。

Link to picture enter image description here

另一个问题是我真的不知道我正在处理的数据,它在文档中说:

  

这些日志文件采用机器可读的二进制格式,该格式由名为ebm.xml的XML文件描述。

  

流式事件采用基于TCP的二进制格式。

我确实可以访问ebm.xml文件,但不确定如何使用它。

有人知道如何让NiFi轻松转发所有内容吗? 我是NiFi的新手,所以我可能会错过一些可能的事情...

1 个答案:

答案 0 :(得分:1)

ListenTCP处理器使用换行符作为逻辑消息分隔符从流中读取数据。例如,如果流具有:

<chunk1><new-line><chunk2><new-line><chunk3><new-line>

这将导致将chunk1,chunk2和chunk3读取到内部队列中。

将它们写回时,将使用传出消息定界符。因此传出的流文件将是:

<chunk1><outgoing-delim><chunk2><outgoing-delim><chunk3><outgoing-delim>

不幸的是,它更适合于接收文本数据,例如通常以行分隔的日志。这些数据块应原封不动地作为byte []传递,但是通常二进制数据不会具有这些逻辑换行边界,因此我不确定它是否能很好地工作。