Управление работой процессоров в Apache NiFi (вкладка Scheduling)

Apache NiFi предоставляет возможность управлять временем работы процессоров: определять стратегию планирования, время запуска, а также указывать длительность работы процессора. Перечисленные параметры задаются в настройках процессора на вкладке «Scheduling».

Стратегия планирования (Scheduling Strategy)

Можно указать один из трех режимов планирования:

Apache NiFi Processor Scheduling Strategy

Запуск по таймеру (Timer driven). Является режимом по умолчанию для всех процессоров. В таком режиме процессор будет запускаться регулярно в указанные Будет запланировано регулярное выполнение процессора. Интервал, с которым запускается процессор, указывается в поле «Run Schedule». Например, можно указать «10 sec» или «25 mins». Если указано знчение «0 sec», то процессор будет работать непрерывно.

Запуск по событию (Event driven). В настоящее время режим является экспериментальным и поддержан не во всех процессорах. В таком режиме процессор будет запускаться только при получении данных от других процессоров. Расписание при таком режиме не настраивается, так как

Запуск с использованием планировщика CRON. При использовании режима планирования с использованием планировщика CRON, для процессор работает по расписанию. Отличие от режима управления таймером в том, что CRON обеспечивает значительно большую гибкость за счет возможности использования большого количества вариантов запуска. Расписание для планировщика CRON, представляет собой строку из шести обязательных полей и одного необязательного поля, каждое из которых разделено пробелом. Поля и их допустимые значения описаны в таблице ниже.

ПолеДопустимые значения
Секунды0-59
Минуты0-59
Часы0-23
День месяца1-31
Месяц1-12 или JAN-DEC
День недели1-7 или SUN-SAT
Год (опционально)отсутствует, 1970-2099


Значение можно задать одним из следующих способов:

  • Число. Указывается одно или несколько допустимых значений. Можно ввести более одного значения, используя список, разделенный запятыми.
  • Диапазон. Указывается диапазон значений с использованием синтаксиса «число» — «число».
  • Инкремент. Указывается приращение с помощью синтаксиса «начальное значение» / «приращение». Например, в поле «Минуты» 0/15 указывает минуты 0, 15, 30 и 45.

Есть также несколько допустимых специальных символов, которые тоже можно использовать для задания расписания:

  • * — Обозначает, что для этого поля все значения будут актуальны.
  • ? — Обозначает, что конкретное значение не указано. Этот специальный символ действителен в полях Дни месяца и Дни недели.
  • L — Обозначает последнее появление дня недели в месяце. Например, 1L означает последнее воскресенье месяца.

Примеры использования расписания CRON в Apache NiFi:

  • 0 0 13 * * ? Процессор будет запускаться каждый день в 13:00.

    Apache NiFi CRON Driven Scheduling (example 1)
  • 0 20 14 ? * MON-FRI Процессор будет запускаться в 14:20 с понедельника по пятницу.

    Apache NiFi CRON Driven Scheduling (example 2)
  • 0 15 10? * 6L 2011-2017 Процессор будет запускаться в 10:15 утра, в последнюю пятницу каждого месяца, в период с 2011 по 2017 год.

    Apache NiFi CRON Driven Scheduling (example 3)
  • 0 30 15 17 11 ? 2020 Процессор будет запущен один раз в установленное время — 15:30 17-го ноября 2020 года.

    Apache NiFi CRON Driven Scheduling (example 4)

Количество потоков (Concurrent Tasks)

На вкладке «Scheduling» можно задать также параметр «Concurrent tasks». Он определяет сколько потоков будет использовать процессор. Другими словами, сколько сущностей (FlowFiles) процессор должен обрабатывать одновременно. Увеличение этого значения обычно позволяет процессору обрабатывать больший объем данных за одно и то же время, но нужно помнить, что происходит это за счет использования системных ресурсов, которых может оказаться недостаточно для использования другими процессорами.

Apache NiFi Scheduling Concurrent Tasks

По сути, этот параметр обеспечивает распределение ресурсов между процессорами. Параметр доступен для большинства процессоров, но есть некоторые типы процессоров, которые могут обрабатывать только одну сущность в один момент времени.

Узлы (Nodes)

При использовании Apache NiFi в кластере можно использовать параметр «Execution». Параметр используется для определения того, какой узел (узлы) кластера процессор будет использовать для выполнения. Иначе говоря, настройка определяет узел, на котором будет работать процессор.

Apache NiFi Scheduling Cluster Nodes Execution
При выборе «All nodes» процессор будет работать на всех узлах кластера. При выборе «Primary node» процессор будет работать только на первичном узле.

Длительность выполнения (Run Duration)

В правой части вкладки «Scheduling» находится ползунок для выбора продолжительности запуска. Данный параметр определяет, как долго процессор будет работать каждый раз, когда он запускается. Слева от ползунка он помечен как «Lower latency», а в правой части «Higher throughput».

Apache NiFi Run Duration

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

При копировании материалов ссылка на сайт обязательна. Вопросы, замечания, предложения и комментарии к статьям можно направлять на адрес: info@datanetworks.ru