Обзор NiFi ADB Connector
Обзор
NiFi ADB Connector обеспечивает высокоскоростную параллельную запись данных между NiFi и Arenadata DB (ADB).
В пользовательском интерфейсе NiFi для создания NiFi ADB Connector доступны объекты разработки Arenadata:
-
процессор PutGreengageRecord — доступен начиная с ADS 3.9.0.1.b1(PutGreenplumRecord до версии ADS 3.9.1.2.b1);
-
процессор GetGreengageRecord — доступен начиная с ADS 4.0.0.b1;
-
сервис контроллера StandardGpfdistService — доступен начиная с ADS 3.9.0.1.b1.
Архитектура NiFi ADB Connector
Ниже на рисунке показано взаимодействие объектов NiFi ADB Connector между собой.
StandardGpfdistService — сервис контроллера для подключения к сегментам ADB, использующий механизм читающей внешней таблицы с использованием протокола gpfdist.
StandardGpfdistService подключается к ADB через сервис пула подключений к базе данных GreengageDBCPConnectionPool.
Gpfdist — утилита Greengage DB для чтения и записи данных из файлов, расположенных на удаленных серверах. Она установлена на всех хостах кластера ADB и обеспечивает параллельную загрузку данных, распределяя их между сегментами равномерно или согласно заданному ключу распределения данных.
Описание конфигурационных параметров сервиса StandardGpfdistService приведено ниже.
Для управления данными к сервису StandardGpfdistService могут быть подключены процессоры:
-
PutGreengageRecord — записывает данные в Greengage DB.
Для обеспечения контроля над загрузкой сегментов Greengage DB и распределением потоков нагрузки между узлами NiFi используется модель параллелизма.
Процессоры создают параллельные потоки данных и передают их на сегменты Greengage DB. Обработка записей выполняется асинхронно относительно HTTP-потока gpfdist.
Описание конфигурационных параметров процессора PutGreengageRecord приведено ниже.
-
GetGreengageRecord — загружает данные из Greengage DB.
Процессоры на каждом узле NiFi создают определенное количество задач, которые выполняются параллельно и выгружают фрагменты данных из сегментов Greengage DB. Количество потоков процессора, которые будут обрабатывать эти задачи, можно настроить с помощью параметра Concurrent Tasks на вкладке SCHEDULING.
Процессоры поддерживают режим пошаговой выгрузки, при котором каждый цикл процессора читает только вновь появившиеся диапазоны данных, вместо того чтобы перечитывать всю таблицу. Такой подход снижает нагрузку на Greengage DB и NiFi, уменьшает объем передаваемых данных и делает повторное опрашивание предсказуемым для сценариев реального времени.
Описание конфигурационных параметров процессора GetGreengageRecord приведено ниже.
PutGreengageRecord
Ниже приведены параметры процессора PutGreengageRecord.
| Параметр | Обязательность | Описание | Значение по умолчанию |
|---|---|---|---|
Record Reader |
true |
Ссылка на запуск одного из сервисов контроллера: CSVReader, AvroReader или другого, в зависимости от источника входных данных |
— |
Gpfdist Service |
true |
Ссылка на запущенный сервис контроллера StandardGpfdistService |
— |
Schema Name |
false |
Имя схемы, куда будут загружены данные |
null |
Table Name |
true |
Имя таблицы, в которую будут загружены данные |
— |
Table Columns |
true |
Столбцы таблицы, куда будут загружены данные |
— |
Greengage Segment Concurrency Multiplier |
false |
Целочисленный множитель для параллелизма сегментов Greengage DB, количество потоков загрузки на сегмент. Возможные значения:
|
1 |
Maximum Record Processor Threads |
false |
Максимальное количество потоков, используемых для обработки записей. Этот параметр должен быть установлен с учетом значений:
|
8 |
Flow File Batching Enabled |
false |
При установке параметра в значение |
false |
Flow Files Batch Size |
false |
Максимальный общий размер (в байтах) объектов FlowFile, включаемых в одну загрузку. Мягкое ограничение: последний FlowFile может его превышать |
10 MB |
GetGreengageRecord
Ниже приведены параметры процессора GetGreengageRecord.
| Параметр | Обязательность | Описание | Значение по умолчанию |
|---|---|---|---|
Gpfdist Service |
true |
Ссылка на запущенный сервис контроллера StandardGpfdistService |
— |
Schema Name |
false |
Имя схемы, куда будут загружены данные |
null |
Table Name |
true |
Имя таблицы, в которую будут загружены данные |
— |
Table Columns |
true |
Столбцы таблицы, в которые будут загружены данные |
— |
Record Writer |
true |
RecordSetWriterFactory, которая будет использоваться для записи записей |
— |
Node Parallel Factor |
false |
Количество параллельных задач/внешних таблиц для выгрузки данных на узел |
1 |
Read Batch Record Count |
false |
Количество записей, которые будут считаны за один раз из очереди буфера, содержащей уже десериализованные записи, при генерации объектов FlowFile. Чем больше это значение, тем быстрее будут генерироваться FlowFile, при условии, что очереди буфера имеют достаточную емкость |
10000 |
Record Buffer Size Per Task |
false |
Размер буфера обрабатываемых разобранных записей CSV на задачу |
10000 |
Pull Buffer Records Timeout |
false |
Максимальный таймаут (в миллисекундах) для ожидания появления хотя бы одной записи в очереди буфера при генерации объектов FlowFile. Чем меньше таймаут, тем быстрее текущий поток NiFi освободит задачу и ресурсы. Не рекомендуется устанавливать это значение более 100-500 мс, чтобы не замедлять получение записей из очередей буфера, так как другие задачи могут уже иметь готовые данные |
100 |
Max FlowFiles Per Trigger |
false |
Максимальное количество объектов FlowFile, создаваемых за один вызов метода выгрузки параллельным потоком NiFi. Это ограничение помогает экономить ресурсы процессора и уменьшать частые переключения контекста между потоками NiFi, выполняющими задачи выгрузки |
10 |
Maximum-value Columns Names |
false |
Список имен столбцов через запятую. После настройки процессор будет отслеживать максимальное значение для каждого указанного столбца, которое было возвращено с момента запуска процессора. Требования к указанным в списке столбцам:
|
— |
StandardGpfdistService
Ниже приведены параметры сервиса контроллера StandardGpfdistService.
| Параметр | Обязательность | Описание | Значение по умолчанию |
|---|---|---|---|
Listening Port |
true |
Порт для прослушивания входящих запросов gpfdist |
80 |
Database Connection Pooling Service |
true |
Ссылка на настроенный сервис контроллера DBCPConnectionPool |
— |
Maximum Gpfdist Request Processor Threads |
false |
Максимальное количество потоков, используемых для обработки запроса gpfdist |
8 |
Minimum Gpfdist Server Threads |
false |
Минимальное количество потоков, используемых для запуска сервера gpfdist |
1 |
Maximum Gpfdist Server Threads |
false |
Максимальное количество потоков, используемых для запуска сервера gpfdist |
8 |
Maximum Gpfdist Server Threads Idle Timeout |
false |
Максимальное время простоя потоков сервера gpfdist в миллисекундах |
60000 |
Total Nifi Nodes |
true |
Общее количество узлов кластера NiFi |
1 |
Gpfdist Per Greengage Segment Stream Max Buffer Size |
false |
Максимальный объем данных, который может быть буферизован в памяти для одного потока записи gpfdist на сегмент Greengage DB до применения backpressure. Это ограничивает количество данных "in-flight" (в процессе выполнения) при записи данных в Greengage DB через gpfdist |
32 MB |
Gpfdist Per Greengage Segment Stream Enqueue Timeout |
false |
Максимальное время ожидания при попытке добавить данные в буфер потока записи gpfdist для сегмента Greengage DB. Если время ожидания превышено, операция завершается с ошибкой, чтобы предотвратить бесконечное блокирование при backpressure |
200 ms |
GreengageDBCPConnectionPool
GreengageDBCPConnectionPool — сервис для подключения к ADB. Представляет собой сервис пула подключений к базе данных.
Поддерживаемые типы данных
Сопоставление типов данных ADB с типами полей записей NiFi приведено ниже.
| Тип данных ADB | Тип данных поля записи NiFi | Комментарий |
|---|---|---|
BIT |
BOOLEAN |
— |
BOOLEAN |
BOOLEAN |
— |
SMALLINT |
SHORT, INT |
Размер значения должен быть меньше 2 байт |
INTEGER |
INT |
— |
BIGINT |
BIGINT, LONG |
— |
REAL |
FLOAT |
— |
DOUBLE |
DOUBLE |
— |
NUMERIC(p, s) |
DECIMAL |
— |
CHAR(n) |
STRING |
— |
VARCHAR(n) |
STRING |
— |
ENUM |
STRING |
— |
BYTEA |
BYTE[], STRING |
Для типа STRING значение должно быть записано в шестнадцатеричном формате, например: |
DATE |
DATE |
— |
TIME(n) |
TIME |
— |
TIMESTAMP(n) |
TIMESTAMP |
— |
TIMESTAMPTZ(n) |
TIMESTAMP |
— |
MONEY |
DECIMAL, STRING, DOUBLE, FLOAT |
— |
UUID |
STRING |
— |
JSONB |
STRING |
— |
HSTORE |
STRING, MAP(STRING, STRING) |
Для типа STRING значение должно быть в формате |
ARRAY |
STRING, STRING[] |
Для типа STRING значение должно быть в формате |
|
ПРИМЕЧАНИЕ
Настройка и использование NiFi ADB Connector в ADS при помощи интерфейса NiFi описаны в статье Пример записи данных в ADB. |