Чем процессор RouteOnContent отличается от RouteOnAttribute и RouteText: преимущества и недостатки каждого из них для маршрутизации FlowFile в Apache NiFi, варианты использования каждого из них с примерами.
Маршрутизация на основе контента
Как мы уже отмечали в прошлой статье, маршрутизация FlowFile в в Apache NiFi может быть на основе контента, т.е. содержимого, или атрибутов. Атрибуты представляют собой пары ключ-значение, которые связаны с пользовательскими данными. Каждый FlowFile имеет несколько атрибутами, которые меняются в течение его жизненного цикла, позволяя маршрутизировать FlowFile по конвейеру обработки данных.
Маршрутизация на основе контента в Apache NiFi реализуется с помощью процессора RouteOnContent, который позволяют применять регулярные выражения или другие проверки для принятия решений о направлении FlowFile в отношение. Например, фильтрация логов в зависимости от уровня логирования (ERROR, WARN, INFO), обработка данных разных форматов, когда JSON, XML, CSV файлы будут обрабатываться по-разному в зависимости от их содержания.
Процессор RouteOnContent применяет регулярные выражения к содержимому FlowFile и направляет копию FlowFile в каждое место назначения, регулярное выражение которого совпадает. Регулярные выражения добавляются как определяемые пользователем свойства, где имя свойства — это имя отношения, а значение — регулярное выражение для сопоставления с содержимым FlowFile. Определяемые пользователем свойства поддерживают язык выражений атрибутов, но результаты интерпретируются как буквальные значения, а не как регулярные выражения. Таким образом, этот способ маршрутизации FlowFile полезен, когда нужно направить данные на основе конкретной информации, которая содержится в теле сообщения. К примеру, JSON-документ надо направлять его в разные потоки в зависимости от значения определенного поля.
Маршрутизация на основе контента достаточно гибкая, поскольку позволяет принимать решения на основе фактических данных, в т.ч. когда атрибутов недостаточно или важны детали в содержимом FlowFile. Однако, производительность процессора RouteOnContent ниже по сравнению с RouteOnAttribute, поскольку анализ содержимого более ресурсоемкий, чем работа с метаданными, особенно для больших файлов. Кроме того, регулярные выражения и другие методы анализа содержимого обычно сложнее обработки атрибутов.
Маршрутизация на основе атрибутов
Процессор RouteOnAttribute маршрутизирует FlowFile на основе их атрибутов с использованием языка выражений NiFi. Дата-инженер добавляет свойства с допустимыми выражениями языка выражений NiFi в качестве значений. Каждое выражение должно возвращать значение типа Boolean (true или false). Подробнее о процессоре RouteOnAttribute мы писали в прошлой статье.
Например, FlowFile может быть направлен по разным путям в зависимости от источника или типа данных, указанных в атрибутах. Это подходит, когда подходит, когда решения о маршрутизации зависят от метаданных, а не от содержимого самих данных. Например, FlowFile, загруженные из интернета, должны направляться на обработку по одному маршруту, а из базы данных – по другому. Для этого надо проанализировать значение атрибута source у FlowFile, которое может быть «web» или «database», и маршрутизировать поток данных на основе этих метаданных.
Главным достоинством маршрутизации на основе атрибутов является высокая производительность, поскольку анализ метаданных обычно выполняется быстрее и менее ресурсоемко, чем содержимого. Кроме того, с процессором RouteOnAttribute в NiFi довольно просто работать, поскольку атрибуты просто изменять и поддерживать.
Однако, если атрибуты неверно указаны или не содержат всех необходимых данных для точной маршрутизации, FlowFile может быть ошибочно направлен не в то отношение.
Процессор RouteText в NiFi
В Apaache NiFi есть еще процессор RouteText, который маршрутизирует текстовые данные на основе набора правил, определенных пользователем. Каждая строка входящего FlowFile сравнивается со значениями, указанными в свойствах, определенных пользователем. Механизм, с помощью которого текст сравнивается с этими свойствами, определяется стратегией сопоставления. Затем данные маршрутизируются в соответствии с этими правилами, маршрутизируя каждую строку текста по отдельности.
Процессор RouteText маршрутизирует текстовый контент на основе заданных условий. Он полезен для анализа строк текстовых данных, особенно когда надо выполнять сложные проверки с использованием регулярных выражений или других текстовых паттернов. Это подходит, когда нужно анализировать текстовые данные построчно и принимать решения на основе этого анализа. Например, есть CSV-файлы, и надо маршрутизировать строки на основе значений в определенных столбцах, направляя строки, содержащие определенные ключевые слова или фразы, в разные отношения.
Таким образом, процессор RouteText позволяет гибко настраивать правила маршрутизации с использованием регулярных выражений, чтобы обрабатывать широкий спектр текстовых данных. Он довольно просто настраивается и способен обрабатывать большие объемы данных, обеспечивая высокую производительность при маршрутизации. Процессор RouteText немного похож на RouteOnContent, поскольку они оба маршрутизацизируют FlowFile на основе содержимого. Однако, RouteText работает с текстовыми данными, динамически меняя маршрутизацию данных каждой строки, а RouteOnContent может работать с различными типами содержимого. Поэтому RouteText позволяет задавать условия маршрутизации с использованием регулярных выражений, применяемых только к текстовым данным. Процессор RouteOnContent также использует регулярные выражения, но имеет более широкие возможности для определения условий на основе содержимого, поскольку может работать не только с текстовыми данными.
Эффективность и точность работы процессора RouteText сильно зависят от правильно составленных регулярных выражений. А при сложных регулярных выражениях или больших объемах данных может возникнуть нагрузка на ресурсы и снизиться производительность.
Таким образом, у каждого из трех рассмотренных процессоров маршрутизации FlowFile в Apache NiFi есть свой сценарий использования. Покажем их различия в таблице.
Процессор | Вариант использования | Преимущества | Недостатки | Вариант использования |
RouteOnContent | Маршрутизация на основе содержимого FlowFile | Маршрутизация данных любого формата, в т.ч. когда атрибутов недостаточно | Низкая производительность при обработке файлов большого размера | Когда нужно точно и гибко настроить маршрутизацию данных любого формата |
RouteOnAttribute | Маршрутизация на основе атрибутов (метаданных) FlowFile | Высокая производительность | Если атрибуты неверно указаны или не содержат всех необходимых данных для точной маршрутизации, FlowFile может быть ошибочно направлен не в то отношение | Когда маршрут обработки определяется метаданными |
RouteText | Маршрутизация на основе построчного анализа текстовых данных FlowFile | Очень гибкая динамическая маршрутизация текстовых данных для каждой строки | Только файлы текстовых форматов (TXT, CSV, JSON, XML и пр.).
Низкая производительность при обработке больших файлов |
Когда данные текстовые и каждую строку нужно по-разному обрабатывать |
Узнайте больше про администрирование и использование Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники