Как ускорить потоковую обработку: лучшие практики для администратора кластера Apache NiFi

Apache NiFi администратор кластера примеры курсы обучение, администрирование Apache NiFi лучшие практики примеры курсы обучение, Apache NiFi дата-инженер курсы обучения, инженерия данных курсы примеры обучение, инженер данных Big Data Apache NiFi примеры курсы обучение, Школа Больших Данных Учебный центр Коммерсант

В этой статье для обучения дата-инженеров и администраторов кластера Apache NiFi разберем лучшие практики настройки этого популярного маршрутизатора потоковых данных. Какие настройки задать в операционной системе Linux и что исправить в конфигурациях самого Apache NiFi, чтобы ускорить обработку потоковых данных.

Что настроить в Linux: 6 конфигураций

Как и большинство серверных решений, Apache NiFi чаще всего развертывается на базе операционной системы Linux. Однако, типичные значения параметров этой ОС по умолчанию не всегда хорошо подходят для приложений с интенсивным вводом-выводом, таких как NiFi. Чтобы улучшить производительность этого популярного маршрутизатора потоковых данных, рекомендуется внести следующие изменения в настройки операционной системы:

  • Увеличить количество файловых дескрипторов, т.к. NiFi в любой момент может иметь очень большое количество открытых потоков ввода-вывода, т.е. файловых дескрипторов. Подробно об этом мы писали здесь и здесь. Файловый дескриптор — это неотрицательное целое число, которое ядро ОС возвращает процессу, создавшему новый поток ввода-вывода. Доступ ко всем потокам ввода-вывода реализуется через файловые дескрипторы. Чтобы избежать сбоев из-за их недостатка, следует увеличить лимиты, отредактировав файл /etc/security/limits.conf, добавив туда строки
*  hard  nofile  50000
*  soft  nofile  50000
  • Увеличить количество потоков в процессах, также отредактировав файл /etc/security/limits.conf:
*  hard  nproc  10000
*  soft  nproc  10000

Некоторые дистрибутивы ОС Linux дополнительно требуют редактирования файла /etc/security/limits.d/90-nproc.conf. Если необходимо, в него также надо добавить строку:

*  soft  nproc  10000
  • Увеличить количество доступных портов TCP-сокетов. Это особенно важно, если поток NiFi будет устанавливать и отключать большое количество сокетов за небольшой период времени. Это можно сделать с помощью команды
sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
  • Установить время ожидания для сокетов в состоянии TIMED_WAIT при закрытии. Чтобы сокеты быстрее становились доступными после закрытия, для ядра Linux 6 следует выполнить команду sudo sysctl —w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = «1», а для ядра 3.0 – команду sudo sysctl —w net.netfilter.nf_conntrack_tcp_timeout_time_wait = «1».
  • Запретить использование диска в качестве оперативной памяти. В Linux-системах есть параметр swappiness, который определяет, когда задействовать SWAP – область на диске, которая может быть использована системой как оперативная память. Например, в Ubuntu по умолчанию это значение равно 60, т.е. как только процессы начинают потреблять более 60% доступной серверу оперативной памяти, жесткий диск начинает использоваться как RAM. Однако, память, в отличие от диска, является недолговечной и, в случае сбоя сохраненные в ней данные теряются. Для Apache NiFi такое неприемлемо. Поэтому следует задать vm.swappiness = 0 в файле /etc/sysctl.conf.
  • Для разделов, обрабатывающих различные репозитории NiFi, следует отключить временную метку файлов atime, которая содержит время последнего обращения к файлу с использованием cat, vim, less или других инструментов чтения или отображения содержимого файла. Отключение этой временной метки может вызвать значительное увеличение пропускной способности. Для этого надо отредактировать файл /etc/fstab, добавив для соответствующих разделов параметр noatime.

Что настроить в самом Apache NiFi

Apache NiFi содержит 2 файла конфигурации (bootstrap.conf и nifi.properties), которые находятся в папке conf. Эти файлы позволяют указать основные настройки для самого приложения NiFi, а также для среды JVM, где оно работает. Файл bootstrap.conf содержит различные параметры конфигурации, позволяющие оптимизировать среду JVM для NiFi. В зависимости от возможностей сервера (памяти, скорости обработки, доступных потоков, ОС и пр.) можно настроить параметры JVM, чтобы получить максимальную отдачу от доступных системных ресурсов. В частности, параметр java.arg.2=-Xms512m управляет минимальным (или начальным) объемом памяти, выделенным для пространства кучи JVM. А java.arg.3=-Xmx512m управляет максимальным объемом памяти, который разрешено использовать JVM. Чем больше потоковых файлов ожидается, тем больше должно быть значение этих параметров. Аналогичное замечание характерно и при включении в поток NiFi ресурсоемких процессоров. Оценить, достаточно ли памяти, выделенной для JVM, можно в GUI NiFi, открыв панель «Диагностика системы».

Параметр java.arg.13=-XX:+UseG1GC сообщает JVM, какую сборку мусора использовать во время выполнения. Текущие версии NiFi используют эту конфигурацию, но более старые версии могут не работать. Поэтому рекомендуется проверить этот параметр, а также учитывать версию Java, чтобы убедиться в совместимости конфигурационных параметров. Небольшие значения параметров кучи JVM могут привести к более частому выполнению сборки мусора, что является ресурсоемкой процедурой и тормозит обработку данных.

При первоначальной настройке NiFi хосту назначается количество потоков по умолчанию. В частности, максимальное количество потоков, управляемых таймером, и максимальное количество потоков, управляемых событиями. Эти настройки можно найти в GUI, в общих настройках контроллера. Обычно для параметра максимальное количество потоков, управляемых событиями, можно оставить значение 5, поскольку большинство процессоров управляются таймером. Для максимального количества потоков, управляемых таймером, рекомендуется установить это значение в 2-4 раза больше количества ядер хоста. Например, если хост имеет 30 ядер, надо установить значение от 60 до 120. Этот параметр настраивает максимальное количество потоков, которые может использовать NiFi на всех процессорах.

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

При работе с NiFi рекомендуется избегать ненужных изменений файлов, учитывая, когда изменяются метаданные и контент FlowFile. Напомним, фактическое содержимое потокового файла помещается на диск в репозиторий ContentRepository, а в самом FlowFile находится только указатель на это содержимое. При запуске процессора, который изменяет базовое содержимое FlowFile, этот контент должен быть извлечен с диска, обновлен, скопирован и затем записан обратно на диск. Указатель FlowFile на контент также будет обновлен, чтобы ссылаться на обновленное содержимое, что требует записи потокового файла на диск. Кроме того, дополнительное место занимает сохранение исходной версии содержимого FlowFile, а также информации о его происхождении.

Для оптимизации потоковой обработки больших файлов, особенно видео или текста CSV, JSON или XML, когда 1 файл представляет собой несколько отдельных записей, не следует загружать весь файл в память. Вместо этого нужно разбить большой файл на отдельные потоковые файлы, используя соответствующие процессоры, например, ConvertRecord, которые позволяет обрабатывать файл с помощью потоковой передачи. В частности, службы и процессоры контроллеров RecordReader и RecordWriter позволяют преобразовывать события из/в JSON, CSV, XML, AVRO, используя реестр схем Apache NiFi.

Наконец, следует убедиться, что на отдельных узлах достаточно памяти для обработки ожидаемого количества, типа и размера файлов, а в репозиториях потоковых файлов и контента достаточно места на диске. Также имеет смысл проверить отсутствие обратного давления, о чем мы рассказываем здесь. Про другие полезные практики настройки Apache NiFi читайте в нашей новой статье.

Узнайте больше про тонкости администрирования и эксплуатации Apache NiFi  для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html
  2. https://marklogic.github.io/nifi/performance-considerations
Поиск по сайту