我应该复制一个二进制TCP流。
因此,我设置了一个NiFi 1.9.0服务器,分别安装了ListenTCP处理器和PutTCP处理器,配置了正确的IP和端口并进行了连接。
到目前为止,这些数据包已由ListenTCP处理器接收,并且也由PutTCP处理器转发。
但是NiFi似乎以某种方式弄乱了数据,发送的数据包与接收的数据包不完全相同。我希望NiFi能够将所有内容按1:1的顺序转发,但是正在发生某些事情,我无法找出原因。
我一直在ListenTCP处理器上使用“字符集”,“最大批处理大小”和“批处理消息Delemiter”设置,并在PutTCP处理器上使用“外发消息Delemiter”和“字符集”。
我还弄乱了MergeContent处理器,但没有使其正常工作。
在这里您可以看到已接收数据(红色)和已发送数据(使用tcpflow捕获)之间的差异。
另一个问题是我真的不知道我正在处理的数据,它在文档中说:
这些日志文件采用机器可读的二进制格式,该格式由名为ebm.xml的XML文件描述。
和
流式事件采用基于TCP的二进制格式。
我确实可以访问ebm.xml文件,但不确定如何使用它。
有人知道如何让NiFi轻松转发所有内容吗? 我是NiFi的新手,所以我可能会错过一些可能的事情...
答案 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 []传递,但是通常二进制数据不会具有这些逻辑换行边界,因此我不确定它是否能很好地工作。