Проще говоря, NiFi был построен для автоматизации обмена данными между системами. Хотя термин «поток данных» используется в различных контекстах, мы используем его здесь для обозначения автоматизированного и управляемого потока информации между системами. Эта проблемная область существует с тех пор, как предприятия имели более одной системы, где некоторые системы создавали данные, а некоторые из них потребляли данные. Возникшие проблемы и способы их решения широко обсуждались и формулировались.
Некоторые из проблем высокого уровня потока данных включают в себя:
Сбой системы:
Сбои в сети, сбой дисков, сбой программного обеспечения, люди делают ошибки.
Доступ к данным превышает возможности потребления:
Иногда данный источник данных может опередить некоторую часть цепочки обработки или доставки — для решения проблемы требуется всего одно слабое звено.
Граничные условия — это просто предложения
Вы всегда будете получать слишком большие, слишком маленькие, слишком быстрые, слишком медленные, поврежденные, неправильные или неправильные данные.
То, что шумит один день становится сигналом следующего
Приоритеты организации меняются — быстро. Включение новых потоков и изменение существующих должно быть быстрым.
Системы развиваются с разной скоростью
Протоколы и форматы, используемые данной системой, могут изменяться в любое время и часто независимо от систем вокруг них. Поток данных существует, чтобы соединить то, что по сути является массивно распределенной системой компонентов, которые свободно или вообще не предназначены для совместной работы.
Соблюдение и безопасность
Законы, правила и политика меняются. Соглашения между предприятиями меняются. Взаимодействие системы с системой и взаимодействия пользователя с системой должно быть безопасным, надежным и подотчетным.
Постоянное улучшение происходит в производстве
Часто невозможно даже приблизиться к репликации производственных сред в лаборатории.
На протяжении многих лет поток данных был одним из необходимых бед в архитектуре. Хотя сейчас существует ряд активных и быстро развивающихся движений, делающих поток данных гораздо более интересным и жизненно важным для успеха конкретного предприятия. К ним относятся такие вещи, как; Сервис-ориентированная архитектура [soa] , рост API [api] [api2] , Internet of Things [iot] и Big Data [bigdata], Кроме того, уровень строгости, необходимой для соблюдения требований, конфиденциальности и безопасности, постоянно растет. Даже несмотря на появление всех этих новых концепций, шаблоны и потребности потока данных остаются в значительной степени одинаковыми. Основными отличиями являются масштаб сложности, скорость изменения, необходимая для адаптации, и то, что в масштабе крайний случай становится обычным явлением. NiFi создан для того, чтобы помочь справиться с этими современными проблемами передачи данных.
Основные понятия NiFi
Основные концепции дизайна NiFi тесно связаны с основными идеями основанного на потоке программирования [fbp] . Вот некоторые из основных концепций NiFi и их соответствие FBP:
NiFi Term | FBP Term | Описание |
---|---|---|
FlowFile | Информационный пакет | FlowFile представляет каждый объект, проходящий через систему, и для каждого из них NiFi отслеживает карту строк атрибутов пары ключ/значение и связанное с ним содержимое, равное нулю или более байтов. |
FlowFile Процессор | Черный ящик | Процессоры фактически выполняют работу. В терминах [eip] процессор выполняет некоторую комбинацию маршрутизации, преобразования или передачи данных между системами. Процессоры имеют доступ к атрибутам данного FlowFile и его потока контента. Процессоры могут работать с нулевым или более FlowFiles в заданной единице работы и либо зафиксировать эту работу, либо выполнить откат. |
соединение | Ограниченный буфер | Соединения обеспечивают фактическую связь между процессорами. Они действуют как очереди и позволяют различным процессам взаимодействовать с различной скоростью. Эти очереди могут быть расположены по приоритетам динамически и могут иметь верхние границы нагрузки, что обеспечивает противодавление. |
Регулятор потока | планировщик | Контроллер потока поддерживает знание о том, как процессы соединяются и управляет потоками и их распределением, которые используют все процессы. Flow Controller выступает в качестве посредника, облегчающего обмен FlowFiles между процессорами. |
Группа процессов | подсеть | Группа процессов — это определенный набор процессов и их соединений, которые могут получать данные через входные порты и отправлять данные через выходные порты. Таким образом, группы процессов позволяют создавать совершенно новые компоненты просто путем объединения других компонентов. |
Эта модель проектирования, также похожая на [seda] , обеспечивает много полезных последствий, которые помогают NiFi быть очень эффективной платформой для построения мощных и масштабируемых потоков данных. Вот некоторые из этих преимуществ:
- Хорошо подходит для визуального создания и управления ориентированными графами процессоров
- По своей природе асинхронный, что обеспечивает очень высокую пропускную способность и естественную буферизацию даже при колебаниях скорости обработки и скорости потока.
- Предоставляет модель с высокой степенью параллелизма, и разработчику не нужно беспокоиться о типичных сложностях параллелизма.
- Способствует разработке связных и слабо связанных компонентов, которые затем могут быть повторно использованы в других контекстах, и продвигает тестируемые единицы
- Соединения с ограниченными ресурсами делают критически важные функции, такие как противодавление и сброс давления, очень естественными и интуитивно понятными
- Обработка ошибок становится такой же естественной, как «счастливый путь», а не как «грубый охват»
- Точки, в которых данные входят и выходят из системы, а также то, как они проходят, хорошо понятны и легко отслеживаются.
NiFi Архитектура
NiFi выполняется в JVM в операционной системе хоста. Основные компоненты NiFi на JVM являются следующими:
Веб сервер
Цель веб-сервера — разместить API управления и контроля NiFi на основе HTTP.
Регулятор потока
Контроллер потока является мозгом операции. Он предоставляет потоки для запуска расширений и управляет расписанием того, когда расширения получают ресурсы для выполнения.
Расширения
Существуют различные типы расширений NiFi, которые описаны в других документах. Ключевым моментом здесь является то, что расширения работают и выполняются в JVM.
FlowFile Repository
Репозиторий FlowFile — это место, где NiFi отслеживает состояние того, что он знает о данном FlowFile, который в настоящее время активен в потоке. Реализация хранилища является подключаемой. Подход по умолчанию — постоянный журнал записи, расположенный в указанном разделе диска.
Репозиторий контента
Репозиторий содержимого — это место, где находятся действительные байты содержимого данного FlowFile. Реализация хранилища является подключаемой. Подход по умолчанию — довольно простой механизм, который хранит блоки данных в файловой системе. Можно указать более одного места хранения файловой системы, чтобы задействовать разные физические разделы для уменьшения конкуренции на любом томе.
Хранилище прованс
В хранилище Provenance хранятся все данные о событиях происхождения. Конструкция хранилища является подключаемой, при этом реализация по умолчанию использует один или несколько томов физического диска. Внутри каждого местоположения данные события индексируются и доступны для поиска.
NiFi также может работать в кластере.
Начиная с версии NiFi 1.0, используется парадигма кластеризации Zero-Master. Каждый узел в кластере NiFi выполняет одни и те же задачи с данными, но каждый работает с различным набором данных. Apache ZooKeeper выбирает один узел в качестве координатора кластера, и ZooKeeper автоматически выполняет отработку отказа. Все узлы кластера сообщают пульс и информацию о состоянии координатору кластера. Координатор кластера отвечает за отключение и подключение узлов. Кроме того, каждый кластер имеет один основной узел, также выбранный ZooKeeper. Как менеджер DataFlow вы можете взаимодействовать с кластером NiFi через пользовательский интерфейс любого узла. Любое внесенное вами изменение реплицируется на все узлы кластера, что позволяет использовать несколько точек входа.
Эксплуатационные ожидания и характеристики NiFi
NiFi предназначен для полного использования возможностей базовой хост-системы, на которой он работает. Эта максимизация ресурсов особенно сильна в отношении процессора и диска.
Для IO
Пропускная способность или задержка, которую можно ожидать, сильно различаются в зависимости от конфигурации системы. Учитывая, что для большинства основных подсистем NiFi существуют подключаемые подходы, производительность зависит от реализации. Но, для чего-то конкретного и широко применимого, рассмотрим готовые реализации по умолчанию. Все они сохраняются с гарантированной доставкой и делают это с использованием локального диска. Так что, будучи консервативным, предположим, что скорость чтения / записи примерно 50 МБ / с на скромных дисках или томах RAID на типичном сервере. В этом случае NiFi для большого класса потоков данных должен эффективно пропускать пропускную способность 100 МБ / с. Это связано с тем, что линейный рост ожидается для каждого физического раздела и хранилища контента, добавляемых в NiFi. Это будет узким местом в некоторый момент в хранилище FlowFile и хранилище провенанса. Мы планируем предоставить шаблон для тестирования производительности и тестирования производительности, который будет включен в сборку, что позволит пользователям легко протестировать свою систему и определить, где есть узкие места и в какой момент они могут стать фактором. Этот шаблон также должен облегчить системным администраторам внесение изменений и проверку воздействия.
Для процессора
Контроллер потока действует как механизм, определяющий, когда конкретному процессору предоставляется поток для выполнения. Процессоры пишутся так, чтобы вернуть поток, как только они закончили выполнение задачи. Контроллеру потока может быть присвоено значение конфигурации, указывающее доступные потоки для различных пулов потоков, которые он поддерживает. Идеальное количество используемых потоков зависит от ресурсов хост-системы с точки зрения количества ядер, от того, работает ли эта система и на других сервисах, и от характера обработки в потоке. Для типичных потоков с интенсивным вводом-выводом разумно сделать доступными многие десятки потоков.
Для оперативной памяти
NiFi живет в JVM и, таким образом, ограничен объемом памяти, предоставляемым JVM. Сборка мусора JVM становится очень важным фактором как для ограничения общего практического размера кучи, так и для оптимизации того, насколько хорошо приложение работает с течением времени. При регулярном чтении одного и того же контента задания NiFi могут потребовать интенсивного ввода-вывода. Настройте достаточно большой диск для оптимизации производительности.
Обзор высокого уровня основных функций NiFi
В этих разделах представлен обзор основополагающих принципов NiFi с высоты 20 000 футов, чтобы вы могли понять общую картину Apache NiFi и некоторые из ее наиболее интересных функций. Категории ключевых функций включают управление потоками, простоту использования, безопасность, расширяемую архитектуру и гибкую модель масштабирования.
Управление потоками
Гарантированная доставка
Основная философия NiFi заключается в том, что даже в очень больших масштабах гарантированная доставка является обязательным условием. Это достигается за счет эффективного использования специально созданного постоянного журнала записи с опережением записи и хранилища содержимого. Вместе они спроектированы таким образом, чтобы обеспечить очень высокую скорость транзакций, эффективное распределение нагрузки, копирование при записи и воспроизведение с преимуществами традиционного чтения / записи на диск.
Буферизация данных с обратным давлением и сбросом давления
NiFi поддерживает буферизацию всех данных в очереди, а также возможность оказывать обратное давление, когда эти очереди достигают указанных пределов, или устаревать данные, когда они достигают определенного возраста (его значение исчезло).
Очередь с приоритетом
NiFi позволяет установить одну или несколько схем приоритизации для того, как данные извлекаются из очереди. По умолчанию сначала используется самый старый, но бывают случаи, когда данные должны быть извлечены сначала самыми новыми, самыми большими сначала или какой-либо другой пользовательской схемой.
QoS для конкретного потока (задержка в пропускной способности, допустимые потери и т. Д.)
Есть точки потока данных, где данные абсолютно критичны и не терпят потерь. Есть также моменты, когда он должен быть обработан и доставлен в течение нескольких секунд, чтобы иметь какое-либо значение. NiFi позволяет мелкозернистому потоку специфическую конфигурацию этих проблем.
Простота использования
Визуальное управление и контроль
Потоки данных могут стать довольно сложными. Будучи в состоянии визуализировать эти потоки и выразить их визуально может помочь значительно уменьшить эту сложность и определить области, которые должны быть упрощены. NiFi позволяет не только визуально создавать потоки данных, но и в реальном времени. Вместо того, чтобы «разработать и развернуть» это гораздо больше, как литье глины. Если вы вносите изменения в поток данных, это изменение немедленно вступает в силу. Изменения мелкозернистые и изолированы от пораженных компонентов. Вам не нужно останавливать весь поток или набор потоков только для того, чтобы внести определенные изменения.
Шаблоны потока
Потоки данных, как правило, в значительной степени ориентированы на шаблоны, и, хотя зачастую существует много разных способов решения проблемы, очень полезно иметь возможность поделиться этими передовыми методами. Шаблоны позволяют экспертам в данной области создавать и публиковать свои проекты потоков, а другие могут извлекать из этого пользу и сотрудничать с ними.
Провенанс данных
NiFi автоматически записывает, индексирует и делает доступными данные о происхождении, когда объекты проходят через систему даже через разветвления, разветвления, преобразования и многое другое. Эта информация становится чрезвычайно важной для поддержки соответствия, устранения неполадок, оптимизации и других сценариев.
Восстановление/Запись подвижного буфера мелкозернистой истории
Репозиторий контента NiFi разработан, чтобы выступать в роли подвижного буфера истории. Данные удаляются только по мере старения хранилища содержимого или по мере необходимости в пространстве. Это в сочетании с возможностью обеспечения происхождения данных обеспечивает невероятно полезную основу для обеспечения возможности перехода по клику на контент, загрузки контента и воспроизведения — все в определенной точке жизненного цикла объекта, которая может охватывать даже поколения.
Безопасность
Система в систему
Поток данных настолько хорош, насколько он безопасен. NiFi в каждой точке потока данных предлагает безопасный обмен посредством использования протоколов с шифрованием, таких как 2-way SSL. Кроме того, NiFi позволяет потоку шифровать и дешифровать контент и использовать общие ключи или другие механизмы по обе стороны уравнения отправителя / получателя.
Пользователь в систему
NiFi обеспечивает двухстороннюю аутентификацию SSL и обеспечивает подключаемую авторизацию, так что он может должным образом контролировать доступ пользователя и на определенных уровнях (только для чтения, менеджер потока данных, администратор). Если пользователь вводит в поток конфиденциальное свойство, такое как пароль, оно немедленно шифруется на стороне сервера и никогда больше не отображается на стороне клиента даже в зашифрованном виде.
Мульти-арендатор Авторизация
Уровень полномочий данного потока данных применяется к каждому компоненту, что позволяет пользователю с правами администратора иметь детальный уровень контроля доступа. Это означает, что каждый кластер NiFi способен удовлетворить требования одной или нескольких организаций. По сравнению с изолированными топологиями, мультитенантная авторизация обеспечивает модель самообслуживания для управления потоками данных, позволяя каждой команде или организации управлять потоками с полным осознанием остальной части потока, к которому они не имеют доступа.
Расширяемая архитектура
Расширение
NiFi по своей сути создан для расширения и как таковая является платформой, на которой процессы потока данных могут выполняться и взаимодействовать предсказуемым и воспроизводимым образом. Точки расширения включают в себя: процессоры, службы контроллеров, задачи отчетности, приоритеты и пользовательские интерфейсы клиентов.
Изоляция Classloader
Для любой системы на основе компонентов проблемы с зависимостями могут возникать быстро. NiFi решает эту проблему, предоставляя пользовательскую модель загрузчика классов, гарантируя, что каждый пакет расширений подвержен очень ограниченному набору зависимостей. В результате расширения могут быть построены без малейшего беспокойства относительно того, могут ли они конфликтовать с другим расширением. Концепция этих пакетов расширения называется «Архивы NiFi» и более подробно обсуждается в Руководстве разработчика.
Протокол обмена данными между сайтами
Предпочтительным протоколом связи между экземплярами NiFi является протокол Site-to-Site (S2S). S2S позволяет легко, эффективно и безопасно передавать данные из одного экземпляра NiFi в другой. Клиентские библиотеки NiFi могут быть легко встроены и объединены в другие приложения или устройства для связи с NiFi через S2S. Как протокол на основе сокетов, так и протокол HTTP (S) поддерживаются в S2S в качестве основного транспортного протокола, что позволяет встроить прокси-сервер в связь S2S.
Гибкая модель масштабирования
Масштабирование (кластеризация)
NiFi предназначен для масштабирования за счет использования кластеризации многих узлов вместе, как описано выше. Если один узел подготовлен и настроен для обработки сотен МБ в секунду, тогда скромный кластер может быть настроен для обработки ГБ в секунду. Это затем вызывает интересные проблемы балансировки нагрузки и восстановления после сбоя между NiFi и системами, из которых он получает данные. Может помочь использование протоколов на основе асинхронных очередей, таких как службы обмена сообщениями, Kafka и т. Д. Использование функции «сайт-сайт» от NiFi также очень эффективно, так как это протокол, который позволяет NiFi и клиенту (включая другой кластер NiFi) общаться друг с другом, обмениваться информацией о загрузке и обмениваться данными о конкретных уполномоченных. порты.
Увеличение и уменьшение
NiFi также разработан для очень гибкого увеличения и уменьшения. С точки зрения увеличения пропускной способности с точки зрения структуры NiFi, при настройке можно увеличить число одновременных задач на процессоре на вкладке «Планирование». Это позволяет одновременно выполнять больше процессов, обеспечивая большую пропускную способность. С другой стороны спектра вы можете идеально уменьшить NiFi, чтобы он подходил для работы на периферийных устройствах, где требуется небольшая площадь из-за ограниченных аппаратных ресурсов. Чтобы конкретно решить проблему сбора первой мили и варианты использования, вы можете найти более подробную информацию здесь: https://cwiki.apache.org/confluence/display/NIFI/MiNiFi относительно работы над дочерним проектом Apache NiFi, MiNiFi (произносится). «minify», [min-uh-fahy]).