NiFi пересылка / дублирование TCP Stream - PullRequest
1 голос
/ 11 марта 2019

Я должен дублировать двоичный поток TCP.

Итак, я настроил сервер NiFi 1.9.0, вставил процессор ListenTCP и процессор PutTCP, настроил правильные IP-адреса и порты и подключил их.

Пока все хорошо, пакеты были получены процессором ListenTCP, а также отправлены процессором PutTCP.

Но, похоже, NiFi как-то возится с данными, отправленные пакеты не являютсяточно так же, как получил.Я ожидал, что NiFi будет просто пересылать все 1: 1, но что-то происходит, и я не могу выяснить, что.

Я играл с настройками набора символов, максимального размера партии и средства пакетной обработки сообщений на процессоре ListenTCPа также с Delemiter и набором символов исходящих сообщений на процессоре PutTCP.

Я также перепутал с процессором MergeContent, но он не работал должным образом.

Здесь вы можете увидетьРазница между полученными (красными) и отправленными данными (захваченными с помощью tcpflow).

Ссылка на изображение enter image description here

Другая проблема заключается в том, что яна самом деле я не знаю, какие данные я обрабатываю, в документации говорится:

Эти файлы журналов находятся в машиночитаемом двоичном формате, который описывается в файле XML с именем ebm.xml.

и

Потоковые события в двоичном формате на основе TCP.

У меня есть доступ к файлу ebm.xml,но не уверенкак я могу использовать это.

Кто-нибудь знает, как я могу заставить NiFi просто пересылать все?Я новичок в NiFi, поэтому я мог упустить некоторые возможности ...

1 Ответ

1 голос
/ 12 марта 2019

Процессор ListenTCP считывает данные из потока, используя символ новой строки в качестве логического разделителя сообщений.Например, если поток имеет:

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

Это приведет к чтению chunk1, chunk2 и chunk3 во внутреннюю очередь.

Когда он записывает их обратно, он использует исходящее сообщение.разделитель.Таким образом, файл исходящего потока будет иметь вид:

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

К сожалению, он больше ориентирован на получение текстовых данных, таких как журналы, которые обычно разделяются строкой.Куски должны проходить без изменений как byte [], но обычно двоичные данные не имеют этих логических границ новой строки, поэтому я не уверен, насколько хорошо это работает для этого.

...