2. Настройка программы
2.1. Настройка технических средств
Серверы, на которых устанавливается Типовое ПО «Витрина данных», должны соответствовать техническим характеристикам указанным в документе «Техническое описание системы» раздел Рекомендуемые технические и программные средства, в котором приводятся требования к серверному оборудованию (CPU, RAM, HDD и т.д.), программному обеспечению и каналам связи.
Необходимые настройки для серверов описаны в документе «Руководство по установке», в котором приводятся требования к серверам, доступности портов для каждого сервера, настройка протоколов, наличие библиотек и т.д.
2.2. Настройка программных средств
Все предварительные действия необходимые перед установкой программы, процесс установки и проверка корректной установки программы описан в документе «Руководство по установке» в разделе «Подготовка к установке».
Внимание
Программные средства настраиваются в зависимости от используемой конфигурации. Состав компонентов приведен в разделе Состав компонентов в дистрибутиве документа «Техническое описание системы».
2.2.1. Настройка ProStore
2.2.1.1. Настройка Сервиса исполнения запросов (query-execution)
Конфигурация инстанса узла Сервиса исполнения запросов (query-execution) Prostore представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.
Файл конфигурации содержит логику и порядок работы Сервиса исполнения запросов.
Для наглядности конфигурация сервиса исполнения запросов разделена на отдельные секции.
Пример файла конфигурации Prostore приведен в разделе Конфигурация ноды документации Prostore.
2.2.1.2. Настройка коннекторов
Следующие коннекторы требуют настройки конфигурации:
Kafka-Clickhouse reader connector;
Kafka-Clickhouse writer connector;
Kafka-Postgres reader connector;
Kafka-Postgres writer connector;
Kafka Jet writer connector.
Конфигурация коннектора представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.
Пример файла конфигурации Prostore приведен в разделе Конфигурация коннекторов документации Prostore.
2.2.2. Настройка СМЭВ QL Сервера
2.2.2.1. Конфигурирование сервера
Конфигурирование СМЭВ QL сервера выполняется путем изменения параметров настроек, определенных в файлах credentials.yaml и application.yaml.
application.yaml - конфигурирует поведение сервера;
credentials.yaml - конфигурирует представление сервера.
2.2.2.1.1. Конфигурация файла application.yml
ktor:
deployment:
port: "$PORT:8080"
application:
modules:
- ru.gov.digital.smevql.ApplicationKt.mainModule
sources:
directory: "$SOURCES_DIR:sources"
models:
directory: "$MODELS_DIR:models"
states:
directory: "$STATES_DIR:states"
swagger:
file: smevql-openapi.yaml # путь к файлу openapi спецификации
servers:
- "http://127.0.0.1:8080/smevql/api/v1"
storage: # Блок параметров хранения информации
adapter: redis # На текущий момент поддерживается только redis
pool: # Настройка подключений к redis
- host: 127.0.0.1
port: 6379
max-pool-size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis
password: "" # Пароль
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black-list: [ ] # Указывает список потребителей, для которых доступ запрещен
white-list: [ ] # Указывает список потребителей, для которых доступ разрешен
request:
strategy: delegate # Стратегия исполнения запросов delegate|atomic
timeout: 20s # Таймаут исполнения запросов
base-path: smevql/api/v1 # Префикс для всех роутов
max-nested-level: 5 # Предельная вложенность запрашиваемых ресурсов
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
enabled: true # флаг влюкчения проверок лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records-ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request-in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read-timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
delta:
commit-interval: 60s # Интервал фиксации дельты источника при изменении данных
force-commit-interval: 30m # Интервал принудительной фиксации дельт всех источников
state:
max-nested-event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max-updated-rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
index-recommendations: # Рекомендации по аналитике
enabled: true # Флаг включения формирования рекомендаций
period: 7D # Период формирования. 7 дней
concurrency: 10 # Количество параллельных корутин сохранения статистики
# Массив описания standalone таблиц
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 3 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
storage-queue:
host: "$QUEUE_HOST:localhost"
port: "$QUEUE_PORT:5432"
database: "$QUEUE_DATABASE:smevql"
schema: "$QUEUE_SCHEMA:smevqlqueue"
user: "$QUEUE_USER:"
password: "$QUEUE_PASSWORD:"
environment: "$ENVIRONMENT:dev"
agent: # Параметры конфигурирования агента ПОДД
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate-enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial-number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
Настройка конфигурации СМЭВ QL сервера осуществляется путем редактирования параметров настроек в файле application.yml,
в котором могут быть настроены следующие секции:
sources- определение директории хранения источников;models- определение директории хранения моделей;states- определение директории хранения состояний;swagger- настройка файла openapi спецификации;storage- управление подключением к внутреннему хранилищу данных СМЭВ-QL;access- блок настроек доступа к выполнению операций чтения данных и операций стейт-машины;request- блок настроек исполнения запросов;delta- управление принудительными коммитами дельт витрин данных;state- установка ограничений в машинах-состояний;index_recommendations- рекомендации по аналитике;push- настройки отправки push уведомлений; -environment- определяет значение среды разработки;agent- параметры конфигурирования агента ПОДД;signature- блок настроек механизма подписания.
2.2.2.1.1.1. Секция storage
В секции storage настраиваются параметры хранения информации, например:
storage: # Блок параметров хранения информации
adapter: redis # На текущий момент поддерживается только redis
pool: # Настройка подключений к redis
- host: 127.0.0.1
port: 6379
max_pool_size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis
password: "" # Пароль
Параметры конфигурации
adapter- система хранения данных, на текущий момент поддерживается только redis;pool- указание host и port для подключения к хранилищу данных;host- адрес хоста;port- порт хоста;max_pool_size- максимальный размер пула соединений;user- имя пользователя для авторизации в системе хранения данных;password- пароль для авторизации в системе хранения данных.
2.2.2.1.1.2. Секция access
В секции access настраивается доступ к выполнению операций чтения данных и операций стейт-машины.
Допускается задание черного или белого списка.
Например:
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
white_list: [ ] # Указывает список потребителей, для которых доступ разрешен
Параметры конфигурации
black_list- перечень мнемоник ИС Потребителей, которым запрещен доступ к СМЭВ QL. Не заполняется, если заполнен white_list!white_list- перечень мнемоник ИС Потребителей, которым разрешен доступ к СМЭВ QL. Не заполняется, если заполнен black_list!
2.2.2.1.1.3. Секция request
В секции request хранятся настройки исполнения запросов, например:
request:
timeout: 20s # Таймаут исполнения запросов
base_path: smevql/api/v1 # Префикс для всех роутов
max_nested_level: 5 # Предельная вложенность запрашиваемых ресурсов
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records_ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request_in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read_timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
Параметры конфигурации
timeout- таймаут исполнения запросов;base_path- префикс для роута запросов. Например,smevql/api/v1;max_nested_level- предельная вложенность запрашиваемых ресурсов;pagination- управление количеством элементов при ответе. Содержит следующие атрибуты:default- количество элементов на странице по умолчанию;max- максимальное количество элементов на странице;
logging- управление логированием «долгих» запросов. Содержит следующие атрибуты:duration- продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование. Например:20s;percentage- процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например,0.1- только каждый тысячный долгий запрос;
limits- установка ограничений на количество запросов. Содержит следующие атрибуты:total- общее допустимое количество запросов к серверу:value- целочисленное значение количества запросов, например:1000;period- на какой период устанавливается ограничение, например: 1D (на сутки)
mnemonic- допустимое для одного потребителя данных количество запросов к серверу:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
purpose- допустимое количество запросов к одному ресурсу (таблице, объекту)value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
user- допустимое количество запросов для пользователя:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
records_ttl- настройка хранения статистики по лимитам:day: 1M- период хранения дневной статистики;week: 1M- период хранения статистики за неделю;month: 1Y- период хранения статистики за месяц;year: 2Y- период хранения статистики за год;
async- блок настроек асинхронного выполнения запросов. Содержит следующие атрибуты:request_in- значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных;read_timeout- таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
2.2.2.1.1.4. Секция delta
В секции delta настраивается управление принудительными коммитами дельт витрин данных.
Например:
delta:
commit_interval: 60s # Интервал фиксации дельты источника при изменении данных
force_commit_interval: 30m # Интервал принудительной фиксации дельт всех источников
Параметры конфигурации
commit_interval- интервал фиксации дельты источника при изменении данных, например 60s;force_commit_interval- интервал принудительной фиксации дельт всех источников, например 30s.
Если commit_interval: 0 и force_commit_interval: 0, то для добавления/изменения/удаления данных в Prostore не используется
механизм открытия и закрытия дельт, а данные меняются прямым запросом.
При этом возникают следующие ограничения:
в бекап текущей реализации данные, софрмированние вне дельт, не попадают;
в результаты запросов к материализованным представлениям данные, софрмированние вне дельт, не попадают;
в рамках подписок данные, софрмированние вне дельт, не передаются.
2.2.2.1.1.5. Секция state
В секции state устанавливаются ограничения в стейт машинах.
Например:
state:
max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
Параметры конфигурации
max_nested_event- максимально допустимая вложенность связанных переходов стейт машины, например 5;max_updated_rows- максимальное количество обновляемых строк при событии стейт машины, например 1.
2.2.2.1.1.6. Секция index_recommendations
В секции index_recommendations настраиваются рекомендации по аналитике, например:
index_recommendations: # Рекомендации по аналитике
period: 7D # Период формирования. 7 дней
Параметры конфигурации
period- устанавливается период формирования аналитики, например 7 дней.
2.2.2.1.1.7. Секция standalone-tables
В секции standalone-tables настраиваются данные standalone таблиц.
Например:
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
readable-table- название readable таблицы;writable-table- название writable таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной таблице.
2.2.2.1.1.8. Секция proxy-tables
В секции proxy-tables настраиваются данные прокси-таблиц.
Например:
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
table- название прокси таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной прокси таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной прокси таблице.
2.2.2.1.1.9. Секция push
В секции push содержатся настройки сервиса формирования push-уведомлений.
Например:
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 3 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
Параметры конфигурации
notification_path- шаблон пути агента, на который необходимо отправлять нотификации;state_machine_enabled- признак публикации нотификаций на основе событий стейт машины;retry- настройки попыток отправок нотификаций.
2.2.2.1.1.10. Секция agent
В секции agent указываются параметры подключения к Агенту СМЭВ4 поставщика, например:
agent: # Параметры конфигурирования агента ПОДД
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
Параметры конфигурации
host- хост агента;port- порт приема api-gateway запросов;mnemonic- мнемоника агента СМЭВ4.
2.2.2.1.1.11. Секция signature
В секции signature настраивается управление механизмом цифровой подписи.
Например:
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate_enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial_number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
Параметры конфигурации
enable- включение (true), отключение (false) подписи ответов и проверки подписей других источников;validate_enabled- признак предоставления дополнительного URL проверки подписи (доступность вызова REST-метода проверки подписи);algorithm- алгоритм формирования подписи. На текущий момент доступен только GOST3410_2012_256;serial_number- серийный номер ключа подписи;alias- алиас ключа, заполняется либо серийный номер, либо алиас;notarius- настройки подключения (host и port) к модулю криптографии notarius.
2.2.2.1.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
mnemonic: smev_ql_mnemonic
instance: smev_ql_instance
Параметры конфигурации
version- номер версии СМЭВ QL;mnemonic- мнемоника СМЭВ QL, по этому параметру осуществляется идентификация СМЭВ QL сервер во внешних системах и ПОДД;instance- наименование инстанса СМЭВ QL.
2.2.2.1.3. Общий сценарий выполнения
Администратор системы открывает на редактирование нужный файл (
credentials.yamlи/илиapplication.yaml) настроек СМЭВ QL сервер и меняет требуемые параметры.Перезапускает приложение для применения новых настроек. Для этого открывает консоль утилиты работы со СМЭВ QL и выполняет команду:
./smevql restart
2.2.3. Настройка СМЭВ3-адаптера
2.2.3.1. Конфигурация СМЭВ3-адаптер (application.yml)
Файл application.yml – основной конфигурационный файл CМЭВ3-адаптера,
в котором задана логика и порядок работы адаптера:
получение входящих запросов, их обработка;
настройка подключения к СМЭВ и FTP-серверу СМЭВ3, к Prostore через REST-запросы;
настройка алгоритма формирования и проверки электронной подписи(ЭП) и т.д.
2.2.3.1.1. Пример файла application.yml
vertx:
#Настройки вертикса
#тут можно указать все настройки из документации для vertx
props:
# метрики
metricsOptions:
enabled: true
# тип метрик, например prometheusOptions | jmxMetricsOptions
prometheusOptions:
enabled: true
startEmbeddedServer: true
embeddedServerOptions:
#порт для сервера с метриками
port: 9033
web-client:
max-pool-size: 20
spring:
liquibase:
enabled: false
main:
allow-bean-definition-overriding: true
smev:
#url смэва
endpointUrl: http://localhost:7979/api/v1/soap/
keystoreType: "DUMMY"
keystoreFile: x
keystorePass: x
privateKeyAlias: x
privateKeyPass: x
certificateAlias: x
signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
# алгоритм подписи
signatureAlgorithm: "DUMMY"
#метод подписи
digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
#версия схемы смев
#availiabe 1.2 and 1.3
version: 1.3
#верификация входящих сообщений
incomingVerificationEnabled: false
#подпись исходящих сообщений
outgoingSigningEnabled: false
#таймаут отправки сообщения в смев
timeout: 30000
#время между попытками перепосылки в смев
retry-timeout: 30000
#максимальный размер очереди, ожидающей отправки сообщений
webMaxWaitQueueSize: -1
#пул коннектов
webMaxPoolSize: 20
receiver:
# количество вертиклов
instances: 1
receiver-property:
-
#селектор из смэв
selector:
namespace: a
root-element-name: b
#пебл шаблон, который будет обрабатываться для определенного selector
template: smev3-adapter/templates/smev.xml.peb
#задержка между запросами, в случае если очередб пуста
idle-delay: PT1m
# файл, который будет отправлен в случае ошибки
fallback-response: smev3-adapter/templates/fallback.xml
-
idle-delay: PT1m
selector:
namespace: urn://x-artefacts-testperson/1.0
root-element-name: TestPersonRequest
template: smev3-adapter/templates/smev.xml.peb
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
default-schema: demo_view
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
retryPolicy:
baseSleepTime: 1000
maxRetries: 3
maxSleepTime: 3000
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
migration:
zk-enabled: ${MIGRATION_ZK_ENABLE:false}
paramstorage:
base-path: '/smev/paramstorage'
deltastorage:
base-path: '/smev/deltastorage'
sign:
#алгоритм подписи файла
digest-algorithm: 1.2.643.7.1.1.2.2
blob:
# настройки подключения к BLOB адаптеру
blob-source:
host: 'localhost'
port: 8080
path:
ftp-destination:
#хост фтп смева
host: localhost
#порт фтп смева
port: 21
#корневой каталог
#path: aaa/bbb/ccc
#пользователь
user: user
#пароль
password: 123
rest:
#вкл/выкл
enabled: false
#порт на котором будет запущена рестовая ручка
port: 8080
# путь get запроса
get: /le
#путь post запроса
post: /le
#обрабатываемый шаблон
template: smev3-adapter/templates/smev.xml.peb
#рассылка смев
scheduler:
#вкл/выкл
enabled: false
#интервал между запусками
interval: PT30s
#обрабатываемый шаблон
template: smev3-adapter/templates/pfr-delta.peb
pool:
#корутин пул для обработки смев шаблонов
reader-executor: 20
#корутин пул для обработки шедулера
schedule-executor: 1
logExecutor: 20
logging:
level:
root: info
ru:
rtlabs:
smev:
logging: trace
request-response:
smev-request: true
smev-response: true
backup:
zk-path: ${SMEV3_BACKUP_ZK_PATH:/${environment.name}/smev3-adapter}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${S3A_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
timeout: ${BACKUP_TIMEOUT:PT180s}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
# Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
2.2.3.2. Параметры конфигурации
Настройка конфигурации CМЭВ3-адаптера осуществляется путем редактирования параметров настроек в файле application.yml.
Обязательными параметрами для настройки CМЭВ3-адаптера являются секции: smev, receiver, datasource. Остальные параметры следует
оставить без изменения и настраивать только для решения определенных бизнес-задач.
Pebble-шаблоны для настройки задаются в секциях: receiver-property, rest и scheduler.
Для каждого вида сведений, предоставляемых Витриной, следует создавать отдельное сопоставление receiver и устанавливать значения
receiver-property. Остальные параметры следует оставить без изменения.
В файле конфигурации могут быть настроены следующие секции:
vertx– настройка параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/).spring– подключение к фреймворку spring boot (используется для разработки);smev– настройки подключения к CМЭВ3-адаптеру;receiver- настройка взаимодействия СМЭВ-запросов с Peblle-шаблонами (для каждогоreceiverможно настроить количествоinstance);prostore-api-client- блок параметров конфигурирования взаимодействия с ProStore;datasource– параметры подключения к ProStore;environment- настройки окружения;zookeeper– параметры подключения к Zookeeper;migration– настройка параметров миграции сервисной базы данных CМЭВ3-адаптера**` в базу данных **Zookeeper;paramstorage– указывается корневой путь хранилища параметров;deltastorage– указывается корневой путь хранилища дельт;sign- настройка формирования и проверки электронной подписи(ЭП) в SOAP-пакетах СМЭВ3;blob- интеграция с BLOB-адаптер;rest- настройки подключения для возможности выполнения rest-запросов к СМЭВ3-адаптеру и получения ответов на них;scheduler- настройка планировщика заданий (запуск дельт по расписанию);pool- размер прерываемого кода;logging– настраивается логирование работы модуля;backup- настройки бекапирования;spf- Параметры подключения к сервису печатных форм (Указывается при использовании функции toSpf).
2.2.3.2.1. Секция vertx
Секция vertx предназначена для настройки параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/).
Для включения сбора метрик используйте следующий код:
vertx:
#Настройки вертикса
#тут можно указать все настройки из документации для vertx
props:
# метрики
metricsOptions:
enabled: true
# тип метрик, например prometheusOptions | jmxMetricsOptions
prometheusOptions:
enabled: true
startEmbeddedServer: true
embeddedServerOptions:
#порт для сервера с метриками
port: 9033
web-client:
max-pool-size: 20
2.2.3.2.2. Секция spring
Секция spring подключение к фреймворку spring boot (используется для разработки).
Например:
spring:
liquibase:
enabled: false
main:
allow-bean-definition-overriding: true
2.2.3.2.3. Секция smev
Секция smev отвечает за настройки подключения к СМЭВ3.
Например:
smev:
endpointUrl: http://127.0.0.1:7979/api/v1/soap/
keystoreType: "DUMMY"
keystoreFile: x
keystorePass: x
privateKeyAlias: x
privateKeyPass: x
certificateAlias: x
signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
signatureAlgorithm: "DUMMY"
digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
incomingVerificationEnabled: false
outgoingSigningEnabled: true
#таймаут отправки сообщения в смев
timeout: 30000
#время между попытками перепосылки в смев
retry-timeout: 30000
#максимальный размер очереди, ожидающей отправки сообщений
webMaxWaitQueueSize: -1
#пул коннектов
webMaxPoolSize: 20
В случае, когда СМЭВ3 не отвечает на запрос, в новой версии СМЭВ3-адаптера (секция smev), добавлена возможность, которая позволяет задать
время ожидания ответа (timeout) перед повторной отправкой запроса к СМЭВ3:
timeout- таймаут отправки сообщения в СМЭВ3;retry-timeout- время между повторной попыткой отправки запроса в СМЭВ3;webMaxWaitQueueSize- максимальный размер очереди, ожидающей отправки сообщений;webMaxPoolSize- пул коннектов.
Примечание
Для удобного отслеживания в лог-файлах всех запросов/ответов к СМЭВ3 в рамках одной бизнес-операции, в файл logback-json.xml добавлен параметр ReqMessageID.
При обработке ошибки от СМЭВ3, в лог-файл добавляется описание ошибки и код ошибки СМЭВ3 (в том случае, если СМЭВ3 вернул данный код в блоке description).
2.2.3.2.4. Секция receiver
Секция receiver предназначена для настройки параметров взаимодействия СМЭВ-запросов с peblle-шаблонами.
Например:
receiver:
receiver-property:
-
selector:
namespace: a
root-element-name: b
template: templates/smev.xml.peb
idle-delay: PT1m
fallback-response: templates/fallback.xml
-
selector:
namespace: urn://x-artefacts-testperson/1.0
root-element-name: TestPersonRequest
template: templates/smev.xml.peb
idle-delay: PT1s
Параметры настроек
namespace- пространство имен в XML.root-element-name- имя корневого элемента запроса обрабатываемого ВС (как указано в заявке на регистрацию ВС);templateимя файла, содержащего pebble-шаблон обработки запросов для данного ВС;idle-delay- периодичность опроса очереди СМЭВ3 для получения новых запросов (в формате ISO 8601).mtom-xop-postfix- включение бинарных данных посредством ссылкиxop, например:
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" ref="cid:320038b2-0485-4658-89cc-980b7c8b5193@smev_client"/>
Пример файла smev.xml.peb
<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
{% set my_blob = fromblob ("/Picture_13.jpg", "my_fname", "my_mime") %}
<photo>{{ toftp ("some test 1", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 2", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 3", "file2.txt", "text/plain") }}</photo>
<photo>{{ tomtom (my_blob, my_mime) }}</photo>
</TestPersonResponse>
Пример файла fallback.xml (Ответ при ошибке обработки запроса)
<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
<text>Произошла ошибка при обработке запроса: %error_message%</text>
</TestPersonResponse>
2.2.3.2.5. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.3.2.6. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.3.2.7. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
retryPolicy:
baseSleepTime: 1000
maxRetries: 3
maxSleepTime: 3000
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connect-string- адреса серверов для подключения к Zookeeper (разделитель -,);baseSleepTime- начальное значение таймаута ожидания при повторных запросах;maxRetries- максимальное количество повторных запросов;maxSleepTime- максимальное значение таймаута ожидания при повторных запросах.
2.2.3.2.8. Секция migration
Секция migration реализована настройка миграции зукипера для задачи бекапирования.
Например:
migration:
zk-enabled: ${MIGRATION_ZK_ENABLE:false}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false}.
2.2.3.2.9. Секция paramstorage
В секции paramstorage указывается корневой путь до сервера Zookeeper для механизма параметров (ключ-значение).
Например:
paramstorage:
base-path: '/smev/paramstorage'
2.2.3.2.10. Секция deltastorage
В секции deltastorage указывается корневой путь до сервера Zookeeper для механизма дельт.
Например:
deltastorage:
base-path: '/smev/deltastorage'
2.2.3.2.11. Секция sign
Секция sign предназначена для формирования и проверки электронной подписи (ЭП) в SOAP-пакетах СМЭВ3.
Например:
sign:
digest-algorithm: 1.2.643.7.1.1.2.2
Параметры настроек
digest-algorithm- алгоритм ключа проверки электронной подписи.
2.2.3.2.12. Секция blob
Секция blob предназначена для настройки взаимодействия модуля СМЭВ3-адаптер с:
BLOB-адаптером для считывания BLOB-полей (см. Взаимодействие через СМЭВ3-адаптер);
FTP-сервером СМЭВ3, на который модуль СМЭВ3-адаптер выгружает содержимое BLOB-полей и/или большие табличные данные.
Например:
blob:
# настройки подключения к BLOB адаптеру
blob-source:
host: 'localhost'
port: 8080
path:
ftp-destination:
#хост фтп смева
host: localhost
#порт фтп смева
port: 21
#корневой каталог
#path: aaa/bbb/ccc
#пользователь
user: user
#пароль
password: 123
Параметры настроек
blob-source- настройка подключения к BLOB-адаптеру;ftp-destination- настройка подключения к FTP-серверу СМЭВ3.
2.2.3.2.13. Секция rest
Секция rest предназначена для настройки возможности выполнения REST-запросов к СМЭВ3-адаптеру и получения ответов на них.
Например:
rest:
#вкл/выкл
enabled: false
#порт на котором будет запущена рестовая ручка
port: 8080
# путь get запроса
get: /le
#путь post запроса
post: /le
#обрабатываемый шаблон
template: smev3-adapter/templates/smev.xml.peb
2.2.3.2.14. Секция scheduler
Секция scheduler предназначена для настройки планировщика заданий в случае, если планируется использовать механизм отправки дельт
по расписанию.
Например:
scheduler:
enabled: true
interval: PT30s
template: templates/pfr-delta.peb
Параметры настроек
enabled- включение планировщика заданий;interval- интервал между отправкой дельт;template- путь к Pebble-шаблону;
2.2.3.2.15. Секция pool
В секции pool указывается размер прерываемого кода.
Например:
pool:
reader-executor: 20
schedule-executor: 1
restExecutor: 1
logExecutor: 20
2.2.3.2.16. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
request-response:
smev-request: false
smev-response: false
Параметры настроек
smev-request- логирование запросов;smev-response- логирование ответов.
2.2.3.2.17. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
zk-path: ${SMEV3_BACKUP_ZK_PATH:/${environment.name}/smev3-adapter}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${S3A_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
timeout: ${BACKUP_TIMEOUT:PT180s}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
Параметры настроек
zk-path- путь к корневой ноде zookeeper для бэкапирования, например{COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};commandTopic- топик команд бэкапирования, например:{BACKUP_COMMAND_TOPIC:adapter.command};backupTopic- топик для отправки забэкапированных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.3.2.18. Секция spf
В секции spf указываются параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.
Например:
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
Параметры настроек
host- адрес подключения, например{SPF_HOST:localhost};port- порт подключения, например:{SPF_PORT:8080};params- Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ.
2.2.4. Настройка CSV-Uploader
2.2.4.1. Конфигурация CSV-uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля CSV-uploader, в котором задана логика и порядок
работы загрузчика, а также другие настройки необходимые для корректной работы адаптера.
2.2.4.1.1. Пример файла application.yml
# Kafka Prostore
.kafkaUrl: &kafkaUrl ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
http-server:
# Порт для старта веб сервера
port: ${HTTP_PORT:8080}
# Включить веб-сервер
enabled: ${HTTP_ENABLED:true}
send:
# Размер отправляемой порции данных
chunk-row-count: ${CHUNK_ROW_COUNT:1000}
# Размер буфера на чтение файла
file-buffer-size: ${FILE_BUFFER_SIZE:1048576}
# Количество Job на чтение
read-job-count: ${READ_JOB_COUNT:4}
# Размер Channel для сериализации
serialize-channel-size: ${SERIALIZE_CHANNEL_SIZE:20}
# Количество Job на сериализацию
serialize-job-count: ${SERIALIZE_JOB_COUNT:4}
# Размер Job на отправку
send-channel-size: ${SEND_CHANNEL_SIZE:20}
# Количество Job на отправку
send-job-count: ${SEND_JOB_COUNT:4}
file-size:
# Ограничение на размер отправляемого файла (мегабайты)
restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}
logging.level:
root: info
ru.itone: debug
environment:
# Название окружения
name: ${ENVIRONMENT_NAME:test}
# Папка для ошибочных файлов
error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}
zookeeper:
# Адрес сервера zookeeper
connection-string: ${ZK_CONNECTION:localhost}
# Таймаут сессии
session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
# Таймаут подключения
connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
migration:
enabled: ${MIGRATION_ENABLE:false}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
zookeeper:
# Адрес сервера zookeeper для загрузки данных в простор
connection-string: ${ZK_PROSTORE_CONNECTION:locahost:2181}
validation:
enable: ${VALIDATION_ENABLE:true}
rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
# обязательность использования ФЛК
mandator: ${VALIDATION_MANDATOR:false}
upload:
# требуется токен для аутентификации на rest-uploader
jwt-auth: ${JWT_AUTH:false}
kafka:
create-topic:
# Количество партиций на загрузку через EDML
num-partitions: ${EDML_UPLOAD_NUM_PARTITIONS:1}
# Фактор репликации при создании топика
replication-factor: ${EDML_UPLOAD_REPLICATION_FACTOR:1}
topic:
# Топик для журналирования
journal-log: journal.log
flk-log: flk.log
consumer:
# Количество партиций на выгрузку через EDML
num-partitions: ${EDML_DOWNLOAD_NUM_PARTITIONS:1}
property:
bootstrap.servers: *kafkaUrl
group.id: csv-uploader
auto.offset.reset: earliest
enable.auto.commit: true
producer:
property:
bootstrap.servers: *kafkaUrl
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
metrics:
port: ${METRICS_PORT:9837}
backup:
zk-path: ${CSV_UPLOADER_BACKUP_ZK_PATH:/${environment.name}/csv-uploader/config}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
jet-connector:
use: ${JET_CONNECTOR_USE:false}
2.2.4.2. Параметры конфигурации
Настройка конфигурации CSV-uploader осуществляется путем редактирования параметров настроек в файле application.yml.
Некоторые настройки доступны для редактирования через пользовательский интерфейс модуля, например,
Настройка отображения количества записей и Запуск по расписанию в Журнале операций .
В файле конфигурации CSV-uploader могут быть настроены следующие секции:
kafkaUrl- URL для доступа к Kafka;http-server- настройки порта подключения;send- настройка отправки файлов;file-size- ограничение на размер отправляемого файла (мегабайты);logging.level- настройка сохранения лог-файла;environment- определяет значение среды разработки;zookeeper- настройка подключения Zookeeper;migration- настройка миграции зукипера для задачи бекапирования;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;prostore- адрес сервера zookeeper для загрузки данных в ProStore;validation- включение/выключение механизма валидации загрузки с помощью модуля REST-Uploader;upload- требование токена для аутентификации на REST-Uploader;kafka- настройка подключения к шине данных Apache Kafka;csv-parser- настройка парсинга CSV;metrics- настройка получения метрик;backup- настройка бэкапирования модуля;jet-connector- подготовлен для оптимизации задержек записи.
2.2.4.2.1. Секция kafkaUrl
В секция kafkaUrl указывается URL-адрес для доступа к Apache Kafka (ProStore).
Например:
.kafkaUrl: &kafkaUrl ${KAFKA_BOOTSTRAP_SERVERS:dev-dtm-one05.ru-central1.internal:9092}
Параметры конфигурации
KAFKA_BOOTSTRAP_SERVERS - URL-адрес для доступа к Apache Kafka (ProStore).
2.2.4.2.2. Секция http-server
Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http:
port: ${HTTP_PORT:8080}
enabled: ${HTTP_ENABLED:true}
Параметры конфигурации
port- порт для старта веб-сервера, напримерHTTP_PORT:8080;enabled- статус включения/отключения веб-сервера, напримерHTTP_ENABLED:true.
2.2.4.2.3. Секция send
В секции send настраивается отправка файлов.
Например:
send:
chunk-row-count: ${CHUNK_ROW_COUNT:1000}
file-buffer-size: ${FILE_BUFFER_SIZE:1048576}
read-job-count: ${READ_JOB_COUNT:4}
serialize-channel-size: ${SERIALIZE_CHANNEL_SIZE:20}
serialize-job-count: ${SERIALIZE_JOB_COUNT:4}
send-channel-size: ${SEND_CHANNEL_SIZE:20}
send-job-count: ${SEND_JOB_COUNT:4}
Параметры конфигурации:
chunk-row-count- размер отправляемой порции данных, напримерCHUNK_ROW_COUNT:100;file-buffer-size- размер буфера на чтение файла, напримерFILE_BUFFER_SIZE:1048576;read-job-count- количество Job на чтение, напримерREAD_JOB_COUNT:4;serialize-channel-size- размерChannelдля сериализации, напримерSERIALIZE_CHANNEL_SIZE:20;serialize-job-count- количество задач на сериализацию, напримерSERIALIZE_JOB_COUNT:4;send-channel-size- размер задач на отправку, напримерSEND_CHANNEL_SIZE:20;send-job-count- количество задач на отправку, напримерSEND_JOB_COUNT:4;
2.2.4.2.4. Секция file-size
Секция file-size отвечает за ограничение на размер отправляемого файла (указывется в мегабайтах).
file-size:
#
restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}
Параметры конфигурации
restriction- ограничение на размер отправляемого файла, напримерSEND_FILE_SIZE_RESTRICTION:1024.
2.2.4.2.5. Секция logging.level
В секции logging.level настраиваются записи логирования.
Например:
logging.level:
root: info
ru.itone: debug
2.2.4.2.6. Секция environment
В секции environment выбирается среда разработки (например, значение test, prod и т.д).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}
Параметры конфигурации
name- название окружения, напримерENVIRONMENT_NAME:test;error-folder- папка для ошибочных файлов, напримерENVIRONMENT_ERROR_FOLDER:error.
2.2.4.2.7. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к серверу Zookeeper.
Например:
zookeeper:
# Адрес сервера zookeeper
connection-string: ${ZK_CONNECTION:localhost}
# Таймаут сессии
session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
# Таймаут подключения
connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры конфигурации
connection-string- адрес сервера Zookeeper, напримерZK_CONNECTION:localhost;session-timeout-ms- таймаут сессии, напримерZK_SESSION_TIMEOUT_MS:30000;connection-timeout-ms- таймаут подключения, напримерZK_CONNECTION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.4.2.8. Секция migration
В секции migration реализована настройка миграции зукипера для задачи бекапирования.
Например:
migration:
enabled: ${MIGRATION_ENABLE:false}
Параметры настроек
enabled- включение миграции (по умолчанию выключена), например{MIGRATION_ENABLE:false}.
2.2.4.2.9. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.4.2.10. Секция prostore
В секции prostore указывается адрес сервера zookeeper для загрузки данных в Prostore.
Например:
prostore:
zookeeper:
connection-string: ${ZK_PROSTORE_CONNECTION:locahost:2181}
Параметры настроек
connection-string- адрес сервера Zookeeper для загрузки данных в Prostore, напримерZK_PROSTORE_CONNECTION:locahost:2181.
2.2.4.2.11. Секция validation
В секции validation реализован механизм настройки валидации ФЛК.
Например:
enable: ${VALIDATION_ENABLE:true}
rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
mandator: ${VALIDATION_MANDATOR:false}
Параметры конфигурации
enable- валидация включена (по умолчанию), например{VALIDATION_ENABLE:true};rest-uploader-url- URL к сервису rest-uploader для выполнения валидации, например{REST_UPLOADER_URL:http://localhost:8081};mandator- флаг использования ФЛК, например{VALIDATION_MANDATOR:false}.
2.2.4.2.12. Секция upload
В секции upload реализована настройка требования токена для аутентификации на REST-Uploader (если true, то при переключении на вкладку
Загрузка появляется модальное окно для задания токена в текстовом виде и кнопка Сохранить).
Например:
upload:
jwt-auth: ${JWT_AUTH:false}
Параметры конфигурации
jwt-auth- требование токена для аутентификации на REST-Uploader, например{JWT_AUTH:false}.
2.2.4.2.13. Секция kafka
В секции kafka настраиваются параметры подключения к шине данных Apache Kafka.
Например:
kafka:
create-topic:
num-partitions: ${EDML_UPLOAD_NUM_PARTITIONS:1}
replication-factor: ${EDML_UPLOAD_REPLICATION_FACTOR:1}
topic:
journal-log: journal.log
consumer:
num-partitions: ${EDML_DOWNLOAD_NUM_PARTITIONS:1}
property:
bootstrap.servers: *kafkaUrl
group.id: csv-uploader
auto.offset.reset: earliest
enable.auto.commit: true
producer:
property:
bootstrap.servers: *kafkaUrl
Параметры конфигурации
num-partitions- количество партиций на загрузку через EDML, напримерEDML_UPLOAD_NUM_PARTITIONS:1;replication-factor- фактор репликации при создании топика, напримерEDML_UPLOAD_REPLICATION_FACTOR:1.
2.2.4.2.14. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковыми в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
Дополнительное описание параметров
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.4.2.15. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.4.2.16. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
Параметры настроек
zk-path- путь к корневой ноде zookeeper для бэкапирования, например{COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};commandTopic- топик команд бэкапирования, например:{BACKUP_COMMAND_TOPIC:adapter.command};backupTopic- топик для отправки забэкапированных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.4.2.17. Секция jet-connector
Секция jet-connector предназначена для оптимизации задержек записи данных.
Например:
jet-connector:
use: ${JET_CONNECTOR_USE:false}
Параметры настроек
use- флаг активации jet-connector, например{JET_CONNECTOR_USE:false};
Режим/СУБД |
ADB |
ADP |
ADQM |
ADG |
|---|---|---|---|---|
Чтение |
Нет |
Нет |
Нет |
Нет |
Запись |
В перспективе |
Да |
Нет |
Нет |
Чтобы воспользоваться Jet-коннектор требуется вместо upload external table создавать readable external table, указывающую на топик,
как отражено в документации Prostore
В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Простора един для всех поддерживаемых СУБД. Конкретная СУБД указывается в настройках Простора.
Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.
При формировании запросов с табличными параметрами, в том числе при регистрации РЗ, необходимо явно перечислять поля таблиц, по которым будет выполняться фильтрация записей или объединение таблиц.
Переключение с jet-connector на kafka postgres writer и наоборот допускается при завершенных операциях загрузки данных.
Предупреждение
Jet-коннектор в настоящее время применим для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании Jet-коннектор с другими базами должна появиться ошибка.
2.2.5. Настройка ПОДД-адаптера - Модуль исполнения запросов
2.2.5.1. Конфигурация ПОДД-адаптера - Модуль исполнения запросов (application.yml)
Файл application.yml – основной конфигурационный файл ПОДД-адаптера - Модуль исполнения запросов, в котором задана
логика и порядок работы адаптера:
получение и обработка входящих запросов;
подключение к Сервису формирования документов (секция:
printable-forms-service);настройки логирования (секция:
logging), а также другие настройки необходимые для корректной работы адаптера.
Хинт пагинации FORCE_LLR определен в переменных среды.
2.2.5.1.1. Пример файла application.yml
В конфигурационном файле задаются настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8090}
environment:
name: ${ENVIRONMENT_NAME:test}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}
send:
channel-size: ${SEND_CHANNEL_SIZE:1}
compress: ${SEND_COMPRESS:none}
max-message-size: ${SEND_MAX_MESSAGE_SIZE:800000}
query:
data-source-type:
for-listagg: ${DATA_SOURCE_TYPE_LISTAGG:ADP}
statistics-request: ${DATA_SOURCE_TYPE_STATISTIC:ADP}
force-llr-for-order: ${FORCE_LLR_FOR_ORDER:true}
force-llr-for-all: ${FORCE_LLR_FOR_ALL:false}
llr-rows-limit: ${LLR_ROWS_LIMIT:200}
fetch-size: ${FETCH_SIZE:1000}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
printable-forms-service:
host: ${PFS_HOST:localhost}
port: ${PFS_PORT:8080}
pool-size: ${PFS_POOL_SIZE:10}
timeout: ${PFS_TIMEOUT:30}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
consumer:
query-request:
topic: ${kafka.external.topic.prefix}query.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
query-cancel-request:
topic: ${kafka.external.topic.prefix}cancel.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}cancel.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
metadata-request:
topic: ${kafka.external.topic.prefix}metadata.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}metadata.consumer
auto.offset.reset: earliest
enable.auto.commit: false
metadata-new-data-request:
topic: ${kafka.external.topic.prefix}metadata.newdata.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
auto.offset.reset: earliest
enable.auto.commit: false
statistics-request:
topic: ${kafka.external.topic.prefix}statistics.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
auto.offset.reset: earliest
enable.auto.commit: false
report-request:
topic: ${kafka.external.topic.prefix}procedure.query.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}report.rq.consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
query-result: ${kafka.external.topic.prefix}query.rs
query-error: ${kafka.external.topic.prefix}query.err
query-estimation-result: ${kafka.external.topic.prefix}query.estimation.rs
query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
query-cancel-error: ${kafka.external.topic.prefix}cancel.err
metadata-result: ${kafka.external.topic.prefix}metadata.rs
metadata-error: ${kafka.external.topic.prefix}metadata.err
metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
statistics-result: ${kafka.external.topic.prefix}statistics.rs
statistics-error: ${kafka.external.topic.prefix}statistics.err
report-result: ${kafka.external.topic.prefix}query.rs
report-error: ${kafka.external.topic.prefix}query.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
statistics:
enabled: ${STATISTICS_ENABLED:false}
timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
datamarts:
- name: demo_dev
tables:
- name: all_types
columns:
- varchar_c
- char_c
- bigint_c
logging:
request-response:
query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
pf-request: ${PF_REQUEST_LOG_ENABLED:false}
pf-response: ${PF_RESPONSE_LOG_ENABLED:false}
metrics:
port: ${METRICS_PORT:9837}
2.2.5.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль исполнения запросов осуществляется путем редактирования параметров настроек
в файле application.yml, где настраиваются секции:
http-server- указывается порт для подключения;environment- указывается название окружения (test,prodи т.д.);executor- настраивается размер пула для запросов;send- настраиваются ограничения на размер загружаемого файла;query- настройка выполнения запросов;zookeeper- подключения в Zookeeper;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;prostore- указываются настройки подключения к ProStore;printable-forms-service- настройки подключения к Сервис формирования документов;kafka- настройки параметров подключения к шине данных Apache Kafka;statistics- управление статистикой;logging- настройка сохранения лог-файла;metrics- настройка получения метрик.
2.2.5.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8090}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8090.
2.2.5.2.2. Секция environment
Секция environment предназначена для настройки параметров окружения.
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- название окружения (test, prod и т.д.), например:ENVIRONMENT_NAME:test.
2.2.5.2.3. Секция executor
Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20;max-execute-time- максимальное время выполнения задачи (сек), напримерEXECUTOR_MAX_EXECUTE_TIME:600;log-pool-size- размер используемого пула для журналирования запросов и ответов, напримерEXECUTOR_LOG_POOL_SIZE:20.
2.2.5.2.4. Секция send
В секции send настраиваются ограничения на размер загружаемого файла.
Например:
send:
channel-size: ${SEND_CHANNEL_SIZE:1}
compress: ${SEND_COMPRESS:none}
max-message-size: ${SEND_MAX_MESSAGE_SIZE:800000}
Параметры настроек
channel-size- размер канала на отправку сообщения, напримерSEND_CHANNEL_SIZE:10;compress- сжатие выгружаемых сообщений (none или zstd), напримерSEND_COMPRESS:none;max-message-size- максимальный размер отправляемого сообщения, напримерSEND_MAX_MESSAGE_SIZE:800000.
2.2.5.2.5. Секция query
В секции query выполняется настройка выполнения запросов.
Например:
query:
data-source-type:
for-listagg: ${DATA_SOURCE_TYPE_LISTAGG:ADP}
statistics-request: ${DATA_SOURCE_TYPE_STATISTIC:ADP}
force-llr-for-order: ${FORCE_LLR_FOR_ORDER:true}
force-llr-for-all: ${FORCE_LLR_FOR_ALL:false}
llr-rows-limit: ${LLR_ROWS_LIMIT:200}
fetch-size: ${FETCH_SIZE:1000}
Параметры настроек
data-source-type- выполнение запроса с LISTAGG на (ADB/ADP), напримерDATA_SOURCE_TYPE:ADB;force-llr-for-order- выполнение ORDER BY запроса c использованием пагинации, напримерFORCE_LLR_FOR_ORDER:true;force-llr-for-all- выполнение всех запросов через LLR, напримерFORCE_LLR_FOR_ALL:false;llr-rows-limit- ограничение выгрузки через ЛЛР, при использовании в запросе лимита со значением меньшим, чем указанное значение, напримерLLR_ROWS_LIMIT:200, будет использован режим LLR;fetch-size- размер выгрузки через JDBC, напримерFETCH_SIZE:1000.
Внимание
Для опции force-llr-for-order параметр false можно устанавливать только при развертывании витрины на единственной БД ADP.
2.2.5.2.6. Секция zookeeper
Секция zookeeper определяет настройки подключения к Zookeeper DS.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- подключение в Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.5.2.7. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.5.2.8. Секция printable-forms-service
Секция printable-forms-service определяет настройки подключения к Сервис формирования документов.
Например:
printable-forms-service:
host: ${PFS_HOST:localhost}
port: ${PFS_PORT:8080}
pool-size: ${PFS_POOL_SIZE:10}
timeout: ${PFS_TIMEOUT:30}
Параметры настроек
host- адрес сервера формирования документов, напримерPFS_HOST:localhost;port- порт сервера формирования документов, напримерPFS_PORT:8080;pool-size- размер пула соединений для ПФ, напримерPFS_POOL_SIZE:10;timeout- таймаут переподключения к сервису формирования документов (секунды), напримерPFS_TIMEOUT:30.
2.2.5.2.9. Секция kafka
В секции kafka настраиваются параметры подключения к шине данных Apache Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
consumer:
query-request:
topic: ${kafka.external.topic.prefix}query.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
query-cancel-request:
topic: ${kafka.external.topic.prefix}cancel.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}cancel.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
metadata-request:
topic: ${kafka.external.topic.prefix}metadata.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}metadata.consumer
auto.offset.reset: earliest
enable.auto.commit: false
metadata-new-data-request:
topic: ${kafka.external.topic.prefix}metadata.newdata.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
auto.offset.reset: earliest
enable.auto.commit: false
statistics-request:
topic: ${kafka.external.topic.prefix}statistics.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
auto.offset.reset: earliest
enable.auto.commit: false
report-request:
topic: ${kafka.external.topic.prefix}procedure.query.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}report.rq.consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
query-result: ${kafka.external.topic.prefix}query.rs
query-error: ${kafka.external.topic.prefix}query.err
query-estimation-result: ${kafka.external.topic.prefix}}query.estimation.rs
query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
query-cancel-error: ${kafka.external.topic.prefix}cancel.err
metadata-result: ${kafka.external.topic.prefix}metadata.rs
metadata-error: ${kafka.external.topic.prefix}metadata.err
metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
statistics-result: ${kafka.external.topic.prefix}statistics.rs
statistics-error: ${kafka.external.topic.prefix}statistics.err
report-result: ${kafka.external.topic.prefix}query.rs
report-error: ${kafka.external.topic.prefix}query.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
topic- префикс для топиков Агента СМЭВ4, напримерAGENT_TOPIC_PREFIX.
2.2.5.2.10. Секция statistics
Секция statistics предназначена для управления статистикой.
Например:
statistics:
enabled: ${STATISTICS_ENABLED:false}
timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
datamarts:
- name: demo_dev
tables:
- name: all_types
columns:
- varchar_c
- char_c
- bigint_c
Параметры конфигурации
enabled- включение (true)/ выключение (false) расчета статистики, напримерSTATISTICS_ENABLED:false;timeout-min- время обновления статистики (минуты), напримерSTATISTICS_TIMEOUT_MIN:60.
2.2.5.2.11. Секция logging
Секция logging предназначена для настройки параметров логирования.
Например:
logging:
request-response:
query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
pf-request: ${PF_REQUEST_LOG_ENABLED:false}
pf-response: ${PF_RESPONSE_LOG_ENABLED:false}
Параметры конфигурации
query-request- журналирование query запросов, напримерQUERY_REQUEST_LOG_ENABLED:false;query-response- журналирование query ответов, напримерQUERY_RESPONSE_LOG_ENABLED:false;pf-request- журналирование запросов на сервис формирования документов, напримерPF_REQUEST_LOG_ENABLED:false;pf-response- журналирование ответов от сервиса формирования документов, напримерPF_RESPONSE_LOG_ENABLED:false.
2.2.5.2.12. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.6. Настройка ПОДД-адаптер – Модуль MPPR
2.2.6.1. Конфигурация ПОДД-адаптера - Модуль MPPR (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
получение входящих запросов, их обработка, а также настройка подключения к ядру витрины (секция: prostore), настройка
метрик (секция: metrics), а также другие настройки необходимые для корректной работы адаптера.
2.2.6.1.1. Пример файла application.yml
http-server:
port: ${HTTP_PORT:8085}
environment:
name: ${ENVIRONMENT_NAME:test}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}
send:
channel-size: ${SEND_CHANNEL_SIZE:1}
timeout: ${SEND_TIMEOUT:30}
delete-topic: ${SEND_DELETE_TOPIC:true}
compress: ${SEND_COMPRESS:none}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
kafka:
message-limit: ${PS_MESSAGE_LIMIT:1000}
zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
statusEventTopic:
topic: ${PS_STATUS_EVENT_TOPIC:status.event}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppr-status-event
auto.offset.reset: earliest
enable.auto.commit: false
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
query-request:
topic: ${kafka.internal.topic.prefix}mppr.delegate.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
max.poll.interval.ms: 600000
delta-request:
topic: ${kafka.internal.topic.prefix}mppr.delta.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.delta.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
max.poll.interval.ms: 600000
download-data:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.x.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
producer:
query-result: ${kafka.external.topic.prefix}query.rs
query-error: ${kafka.external.topic.prefix}query.err
delta-result: ${kafka.external.topic.prefix}delta.rs
delta-error: ${kafka.external.topic.prefix}delta.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
metrics:
port: ${METRICS_PORT:9843}
logging:
scl.delta:
enabled: ${SCL_DELTA_ENABLED:false}
request-response:
delta-request: ${DELTA_REQUEST_LOG_ENABLED:false}
delta-response: ${DELTA_RESPONSE_LOG_ENABLED:false}
query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
2.2.6.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль MPPR осуществляется путем редактирования параметров настроек в файле
application.yml, где настраиваются секции:
http-server- указывается порт веб-сервера;environment- указывается название окружения (test,prodи т.д.);executor- предназначена для указания размера пула для запросов;send- настраиваются ограничения на размер загружаемого файла;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;prostore- настройка подключения к серверу и базе данных ProStore;kafka- настройки параметров подключения к шине данных Apache Kafka;metrics- настройка получения метрик;logging- настройки журналирования запросов и ответов;
2.2.6.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:8085}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8085.
2.2.6.2.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.6.2.3. Секция executor
Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20;max-execute-time- максимальное время выполнения задачи (сек), напримерEXECUTOR_MAX_EXECUTE_TIME:600;log-pool-size- размер пула используемого для журналирования запросов и ответов, напримерEXECUTOR_LOG_POOL_SIZE:20.
2.2.6.2.4. Секция send
В секции send настраиваются ограничения на размер загружаемого файла.
Например:
send:
channel-size: ${SEND_CHANNEL_SIZE:1}
timeout: ${SEND_TIMEOUT:30}
delete-topic: ${SEND_DELETE_TOPIC:true}
compress: ${SEND_COMPRESS:none}
Параметры настроек
channel-size- размер канала на отправку сообщения, напримерSEND_CHANNEL_SIZE:10;timeout- таймаут вычитывания данных из топика (сек), напримерSEND_TIMEOUT:30delete-topic- удаление внешнего топика после выгрузки, напримерSEND_DELETE_TOPIC:true;compress- сжатие выгружаемых сообщений (none или zstd), напримерSEND_COMPRESS:none.
2.2.6.2.5. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес ProStore, напримерPS_HOST:localhost;port- порт ProStore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к ProStore, напримерPS_MAX_POOL_SIZE:8.
2.2.6.2.6. Секция prostore
В секции prostore осуществляется настройка подключения к серверу и базе данных ProStore.
Например:
prostore:
kafka:
message-limit: ${PS_MESSAGE_LIMIT:1000}
zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
statusEventTopic:
topic: ${PS_STATUS_EVENT_TOPIC:status.event}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppr-status-event
auto.offset.reset: earliest
enable.auto.commit: false
Параметры настроек
message-limit- лимит сообщений, напримерPS_MESSAGE_LIMIT:1000;zk-url- адрес сервера Zookeeper для загрузки данных в ProStore, напримерPS_ZK_KAFKA_URL:localhost:2181.
2.2.6.2.7. Секция kafka
Секция kafka определяет настройки взаимодействия через ПОДД-адаптер между Поставщиком данных (producer) и
Получателем данных (consumer).
В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
consumer:
query-request:
topic: ${kafka.internal.topic.prefix}mppr.delegate.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
max.poll.interval.ms: 600000
delta-request:
topic: ${kafka.internal.topic.prefix}mppr.delta.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.delta.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
max.poll.interval.ms: 600000
download-data:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}mppr.x.query.consumer
auto.offset.reset: earliest
enable.auto.commit: false
max.poll.records: 1
producer:
query-result: ${kafka.external.topic.prefix}query.rs
query-error: ${kafka.external.topic.prefix}query.err
delta-result: ${kafka.external.topic.prefix}delta.rs
delta-error: ${kafka.external.topic.prefix}delta.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
topic- префикс для топиков Агента СМЭВ4, напримерAGENT_TOPIC_PREFIX.
2.2.6.2.8. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9843}
Параметры конфигурации
port- порт для метрик, напримерMETRICS_PORT:9843.
2.2.6.2.9. Секция logging
Секция logging предназначена для настройки журналирования запросов и ответов.
Например:
logging:
scl.delta:
enabled: ${SCL_DELTA_ENABLED:false}
request-response:
delta-request: ${DELTA_REQUEST_LOG_ENABLED:false}
delta-response: ${DELTA_RESPONSE_LOG_ENABLED:false}
query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
LOG_FORMAT - Логирование в формате (JSON/TEXT) - указывается в logback.xml.
2.2.7. Настройка ПОДД-адаптер-Модуль MPPW
2.2.7.1. Конфигурация модуля ПОДД-адаптер - Модуль MPPW (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
подключение к Агенту ПОДД, Брокеру сообщений Kafka, Zookeeper, а также настройка подключения к Prostore
(секция: prostore), настройка метрик (секция: metrics) и другие настройки необходимые для корректной работы адаптера.
2.2.7.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
tp:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
upload-topic-prefix: ${UPLOAD_TOPIC_PREFIX:tmp.w}
upload:
data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
retry:
attempts: 5
delay: 1m
http-server:
port: ${HTTP_PORT:8090}
environment:
name: ${ENVIRONMENT_NAME:test}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
scheduler:
delta-apply-request-timeout: ${DELTA_APPLY_REQUEST_TIMEOUT:60}
delta:
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout}}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
#enable/disable/period
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable}
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s
send:
channel-size: ${SEND_CHANNEL_SIZE:10}
timeout: ${SEND_TIMEOUT:60}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
key:
primary: ${PRIMARY_KEY_NAME:tmp_id}
type: ${PRIMARY_KEY_TYPE:BIGINT}
kafka:
message-limit: ${PS_MESSAGE_LIMIT:1000}
zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
properties:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
tp-request:
topic: ${kafka.internal.topic.prefix}mppw.tp
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-tp
auto.offset.reset: earliest
enable.auto.commit: false
upload-request:
topic: ${kafka.internal.topic.prefix}mppw.upload.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-upload
auto.offset.reset: earliest
enable.auto.commit: false
delta-apply-request:
topic: ${kafka.internal.topic.prefix}mppw.delta.in.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-delta
auto.offset.reset: earliest
enable.auto.commit: false
upload-data:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-data
auto.offset.reset: earliest
enable.auto.commit: false
producer:
tp-result: ${kafka.internal.topic.prefix}mppw.rs
upload-result: ${kafka.internal.topic.prefix}mppw.upload.rs
delta-apply-result: ${kafka.internal.topic.prefix}mppw.delta.in.rs
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
metrics:
port: ${METRICS_PORT:9843}
jet-connector:
use: ${JET_CONNECTOR_USE:true}
2.2.7.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль MPPW осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
tp- указываются настройки топиков для табличных параметров;upload- настройки загрузки через DATA-Uploader;http-server- указывается порт для подключения;environment- указывается название окружения (test,prodи т.д.);executor- настраивается размер пула для запросов;scheduler- настройки планировщика отложенных заданий;send- настраиваются ограничения на размер загружаемого файла;zookeeper- указываются настройки подключения к Zookeeper;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;prostore- указываются настройки генерации на создание и удаление writable table;kafka- настройки параметров подключения к шине данных Apache Kafka;metrics- настройка получения метрик;jet-connector- подготовлен для оптимизации задержек записи.
2.2.7.2.1. Секция tp
Секция tp предназначена для настройки префиксов топиков, откуда будут вычитываться и куда будут загружаться данные.
Например:
tp:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
upload-topic-prefix: ${UPLOAD_TOPIC_PREFIX:tmp.w}
Параметры конфигурации
data-topic-prefix- префикс топика, откуда будут вычитываться данные, напримерDATA_TOPIC_PREFIX:tp.data;upload-topic-prefix- префикс топика, куда будут загружаться данные для их последующей загрузки в витрину, напримерUPLOAD_TOPIC_PREFIX:tmp.w.
2.2.7.2.2. Секция upload
В секции upload - указываются настройки загрузки через DATA-Uploader.
Например:
upload:
data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
retry:
attempts: 5
delay: 1m
Параметры конфигурации
AGENT_TOPIC_PREFIX:- значение префикса для топиков. Топики взаимодействия с ПОДД-адаптером - Модуль исполнения запросов (см. Спецификация Модуля исполнения запросов);retry- повтор попытки загрузки;attempts- количество попыток;delay- период задержки (в минутах).
2.2.7.2.3. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:8090}
Параметры настроек
port- указывается порт веб-сервера, например:HTTP_PORT:8090.
2.2.7.2.4. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.7.2.5. Секция executor
Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20;max-execute-time- максимальное время выполнения задачи (в секундах), напримерEXECUTOR_MAX_EXECUTE_TIME:600.
2.2.7.2.6. Секция scheduler
Секция scheduler предназначена для настроек планировщика отложенных заданий.
Например:
scheduler:
delta-apply-request-timeout: ${DELTA_APPLY_REQUEST_TIMEOUT:60}
Параметры настроек
delta-apply-request-timeout- таймаут применения отложенной дельты, напримерDELTA_APPLY_REQUEST_TIMEOUT:60.
2.2.7.2.7. Секция delta
В секции delta настраивается параметр ожидания перед повторной попыткой открытия дельты при ошибке.
Например:
delta:
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout}}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
#enable/disable/period
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable}
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s
Параметры настроек
open-delay- параметр ожидания (в секундах) перед повторной попыткой открытия дельты в случае ошибки, напримерDELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout};open-attempts- количество попыток открытия дельты в случае ошибки, напримерDELTA_OPEN_ATTEMPTS:5;open-check- период проверки открытых дельт (в секундах), напримерDELTA_OPEN_CHECK:60;commit-attempts- количество попыток фиксации дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:5;commit-error-delay- период ожидания перед повторной попыткой фиксации дельты (в секундах), напримерDELTA_COMMIT_DELAY:1;rollback-attempts- количество попыток отката дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:3;rollback-error-delay- период ожидания перед повторной попыткой отката дельты (в секундах), напримерDELTA_COMMIT_DELAY:5;creating-delta-on-upload-request- создание дельты при запросе загрузки, напримерDELTA_CREATING_MODE:enable;period- период создания дельты при запросе загрузки (в секундах), напримерCREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300, используется только при mode=llw и creating-delta-on-upload-request=period;
Для параметра creating-delta-on-upload-request доступны значения:
enable- формируются дельты для загружаемых порций данных, данное значение используется для работы подписок;disable- формирование дельт отключено;period- исключается формирование дельт в процессе исполнения команд загрузки данных, вместо этого дельты периодически открываются и закрываются с периодом, указанным в данном параметре. При этом приложение запоминает датамарты по которым завершены инсерты за истекший период. Дельты открываются и закрываются только для датамартов, в которые происходила вставка данных.
Внимание
При потере связи коннектора с Prostore отмены операции не происходит автоматически и модуль MPPW получает ошибку.
После восстановления связи коннектора с Prostore и попытке загрузки данных в эту же таблицу возвращается ошибка о блокировке таблицы предыдущей операции вставки.
Для исправления ошибки Администратор должен вручную выполнить команду resume или erase в Prostore.
2.2.7.2.8. Секция send
В секции send настраиваются ограничения на размер загружаемого файла.
Например:
send:
channel-size: ${SEND_CHANNEL_SIZE:10}
timeout: ${SEND_TIMEOUT:60}
Параметры настроек
channel-size- размер канала на отправку сообщения, напримерSEND_CHANNEL_SIZE:10;timeout- таймаут вычитывания данных из топика (сек), напримерSEND_TIMEOUT:60.
2.2.7.2.9. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры конфигурации
connection-string- подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.7.2.10. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.7.2.11. Секция prostore
Секция prostore
Например:
prostore:
key:
primary: ${PRIMARY_KEY_NAME:tmp_id}
type: ${PRIMARY_KEY_TYPE:BIGINT}
kafka:
message-limit: ${PS_MESSAGE_LIMIT:1000}
zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
properties:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
Параметры настроек
primary- название первичного ключа, напримерtmp_id;type- тип первичного ключа, напримерBIGINT;message-limit- лимит сообщений, напримерPS_MESSAGE_LIMIT:1000;zk-url- адрес сервера Zookeeper для загрузки данных в Prostore, напримерPS_ZK_KAFKA_URL:localhost:2181.
2.2.7.2.12. Секция kafka
В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
consumer:
tp-request:
topic: ${kafka.internal.topic.prefix}mppw.tp
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-tp
auto.offset.reset: earliest
enable.auto.commit: false
upload-request:
topic: ${kafka.internal.topic.prefix}mppw.upload.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-upload
auto.offset.reset: earliest
enable.auto.commit: false
delta-apply-request:
topic: ${kafka.internal.topic.prefix}mppw.delta.in.rq
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-delta
auto.offset.reset: earliest
enable.auto.commit: false
upload-data:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-data
auto.offset.reset: earliest
enable.auto.commit: false
producer:
tp-result: ${kafka.internal.topic.prefix}mppw.rs
upload-result: ${kafka.internal.topic.prefix}mppw.upload.rs
delta-apply-result: ${kafka.internal.topic.prefix}mppw.delta.in.rs
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
AGENT_TOPIC_PREFIX- префикс для топиков Агента СМЭВ4, например.
2.2.7.2.13. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9843}
Параметры конфигурации
port- порт для метрик, напримерMETRICS_PORT:9843.
2.2.7.2.14. Секция jet-connector
Секция jet-connector предназначена для оптимизации задержек записи данных.
Например:
jet-connector:
use: ${JET_CONNECTOR_USE:false}
Параметры настроек
use- флаг активации jet-connector, например{JET_CONNECTOR_USE:false};
Режим/СУБД |
ADB |
ADP |
ADQM |
ADG |
|---|---|---|---|---|
Чтение |
Нет |
Нет |
Нет |
Нет |
Запись |
В перспективе |
Да |
Нет |
Нет |
Чтобы воспользоваться jet-connector требуется вместо upload external table создавать readable external table, указывающую на топик,
как отражено в документации Prostore
В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Prostore един для всех поддерживаемых СУБД. Конкретная СУБД указывается в настройках Prostore.
Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.
При формировании запросов в табличными параметрами, в том числе при регистрации РЗ, необходимо явно перечислять поля таблиц, по которым будет выполняться фильтрация записей или объединение таблиц.
Переключение с jet-connector на kafka postgres writer и наоборот допускается при завершенных операциях загрузки данных.
Предупреждение
jet-connector в настоящее время применим для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании jet-connector с другими базами должна появиться ошибка.
2.2.8. Настройка ПОДД-адаптер – Модуль импорта данных табличных параметров
2.2.8.1. Конфигурация модуля ПОДД-адаптер - Модуль импорта данных табличных параметров (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.
2.2.8.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8091}
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost:2181}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
key:
primary: tmp_id
type: BIGINT
standalone:
source: ${PS_STANDALONE_SOURCE:ADP}
# общие настройки подключения к Kafka
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
# параметры консьюмера сообщений
consumer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# параметры продюсера сообщений
producer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# параметры клиента администратора для удаления временных топиков
admin:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# блок настроек импорта данных табличных параметров
query:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.query
# топик запросов на исполнение после загрузки данных
response-topic: ${kafka.external.topic.prefix}query.rq
# топик с ошибками
error-topic: ${kafka.external.topic.prefix}query.err
# блок настроек отмены запросов
cancel:
# топик запросов на отмену исполнения
request-topic: ${kafka.external.topic.prefix}cancel.rq
# настройки кеша отмененных запросов
cache:
# начальный размер кеша
initial-capacity: 10000
# время вытеснения из кеша
expire-after-access: 60m
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.query.consumer
# дополнительные параметры продюсера ответов
producer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
# дополнительные параметры администрирования кафки
admin-properties: [ ]
# блок настроек сервиса загрузки данных mppw
mppw:
# топик запросов к сервису mppw
request-topic: ${kafka.internal.topic.prefix}mppw.tp
# топик ответов от сервиса mppw
response-topic: ${kafka.internal.topic.prefix}mppw.rs
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.response.consumer
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# дополнительные параметры продюсера ответов
producer-properties: [ ]
# блок настроек механизма очистки
delete:
# входящий топик запросов удаления ресурсов
request-topic: ${kafka.internal.topic.prefix}tp.delete.tmp
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delete.consumer
# блок настроек дельт
delta:
# префикс топиков с данными
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# признак необходимости удаления топиков
delete-topics: ${IMPORT_DELTA_DELETE_TOPICS:true}
# дополнительные параметры администрирования кафки
admin-properties: [ ]
# блок параметров поставщика данных
provider:
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.delta
# топик ответов
response-topic: ${kafka.internal.topic.prefix}delta.rq
# топик ошибок
error-topic: ${kafka.internal.topic.prefix}tp.upload.err
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delta.consumer
# дополнительные параметры продюсера ответов
producer-properties: [ ]
# блок параметров получателя данных
recipient:
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
# топик ответов
response-topic: ${kafka.internal.topic.prefix}delta.in
# топик ошибок
error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delta.in.consumer
# дополнительные параметры продъюсера ответов
producer-properties: [ ]
metrics:
# Порт сервера для получения метрик
port: ${METRICS_PORT:19843}
kafkaAdminClientName: kafkaAdminClient
2.2.8.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль импорта данных табличных параметров осуществляется путем редактирования параметров
настроек в файле application.yml, где настраиваются секции:
http-server- указывается порт веб-сервера;environment- название окружения (test,prodи т.д.);zookeeper– строка подключения к сервисной БД Zookeeper;prostore-api-client- блок параметров конфигурирования взаимодействия с Prostore;prostore- указываются настройки генерации на создание и удаление writable table;kafka- общие настройки подключения к Kafka;query- блок настроек импорта данных табличных параметров;mppw- блок настроек сервиса загрузки данных mppw;delete- блок настроек механизма очистки;delta- настройка работы с импортом дельт;metrics- настройка получения метрик.
2.2.8.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8091}
Параметры настроек
port- указывается порт веб-сервера, например:HTTP_PORT:8091.
2.2.8.2.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.8.2.3. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.
Например:
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost:2181}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- подключение к Zookeeper DS, напримерZOOKEEPER:t5-adsp-01.ru-central1.internal:2181;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.8.2.4. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.8.2.5. Секция prostore
В секции prostore указываются настройки генерации на создание и удаление writable table.
Например:
prostore:
key:
primary: tmp_id
type: BIGINT
standalone:
source: ${PS_STANDALONE_SOURCE:ADP}
Параметры настроек
primary- название первичного ключа, напримерtmp_id;type- тип первичного ключа, напримерBIGINT;source- источник для standalone таблицы (ADB/ADP), напримерPS_STANDALONE_SOURCE:ADP.
2.2.8.2.6. Секция kafka
Секция kafka хранит общие настройки подключения к Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
# параметры консьюмера сообщений
consumer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# параметры продюсера сообщений
producer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# параметры клиента администратора для удаления временных топиков
admin:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры настроек
max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;group.id- GroupId для подписчика;auto.offset.reset- смещение при первом запуске приложения;enable.auto.commit- Вкл/выкл автоматический коммит;consumer- параметры консьюмера сообщений;producer– параметры продюсера сообщений.
2.2.8.2.7. Секция query
Секция query хранит блок настроек импорта данных табличных параметров.
Например:
query:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.query
# топик запросов на исполнение после загрузки данных
response-topic: ${kafka.external.topic.prefix}query.rq
# топик с ошибками
error-topic: ${kafka.external.topic.prefix}query.err
# блок настроек отмены запросов
cancel:
# топик запросов на отмену исполнения
request-topic: ${kafka.external.topic.prefix}cancel.rq
# настройки кеша отмененных запросов
cache:
# начальный размер кеша
initial-capacity: 10000
# время вытеснения из кеша
expire-after-access: 60m
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.query.consumer
# дополнительные параметры продюсера ответов
producer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
# дополнительные параметры администрирования кафки
admin-properties: [ ]
Параметры настроек
request-topic- топик запросов;response-topic- топик запросов на исполнение после загрузки данных;error-topic- топик с ошибками;cancel- блок настроек отмены запросов;initial-capacity- начальный размер кеша;expire-after-access- время вытеснения из кеша;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов;producer-properties- дополнительные параметры продюсера ответов;admin-properties- дополнительные параметры администрирования Kafka.
2.2.8.2.8. Секция mppw
Секция mppw хранит блок настроек сервиса загрузки данных MPPW.
mppw:
# топик запросов к сервису mppw
request-topic: ${kafka.internal.topic.prefix}mppw.tp
# топик ответов от сервиса mppw
response-topic: ${kafka.internal.topic.prefix}mppw.rs
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.response.consumer
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# дополнительные параметры продюсера ответов
producer-properties: [ ]
Параметры настроек
request-topic- топик запросов к сервису MPPW;response-topic- топик ответов от сервиса MPPW;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов;producer-properties- дополнительные параметры продюсера ответов.
2.2.8.2.9. Секция delete
Секция delete хранит блок настроек механизма очистки.
Например:
delete:
# входящий топик запросов удаления ресурсов
request-topic: ${kafka.internal.topic.prefix}tp.delete.tmp
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delete.consumer
Параметры настроек
request-topic- топик запросов к сервису MPPW;response-topic- топик ответов от сервиса MPPW;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов.
2.2.8.2.10. Секция delta
Секция delta предназначена для настройки дельт.
Например:
delta:
# префикс топиков с данными
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# признак необходимости удаления топиков
delete-topics: ${IMPORT_DELTA_DELETE_TOPICS:true}
# дополнительные параметры администрирования кафки
admin-properties: [ ]
# блок параметров поставщика данных
provider:
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.delta
# топик ответов
response-topic: ${kafka.internal.topic.prefix}delta.rq
# топик ошибок
error-topic: ${kafka.internal.topic.prefix}tp.upload.err
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delta.consumer
# дополнительные параметры продюсера ответов
producer-properties: [ ]
# блок параметров получателя данных
recipient:
# топик запросов
request-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
# топик ответов
response-topic: ${kafka.internal.topic.prefix}delta.in
# топик ошибок
error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
# дополнительные параметры консьюмера запросов
consumer-properties:
group.id: ${kafka.internal.topic.prefix}import.tp.delta.in.consumer
# дополнительные параметры продюсера ответов
producer-properties: [ ]
Параметры настроек
data-topic-prefix- префикс топиков с данными;delete-topics- признак необходимости удаления топиков;admin-properties- дополнительные параметры администрирования Kafka;provider- блок параметров поставщика данных;recipient- блок параметров получателя данных;request-topic- топик запросов;response-topic- топик запросов на исполнение после загрузки данных;error-topic- топик с ошибками;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов;producer-properties- дополнительные параметры продюсера ответов.
2.2.8.2.11. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
# Порт сервера для получения метрик
port: ${METRICS_PORT:9843}
kafkaAdminClientName: kafkaAdminClient
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9843.
2.2.9. Настройка ПОДД-адаптер – Модуль группировки данных табличных параметров
2.2.9.1. Конфигурация модуля ПОДД-адаптер – Модуль группировки данных табличных параметров (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.
2.2.9.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8092}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
# параметры консьюмера сообщений
consumer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# параметры продъюсера сообщений
producer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Параметры администрирования. Используется для health-check
admin:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# Время пересоздания kafka producer, в минутах
refreshPeriod: ${DATA_PRODUCER_RECREATE_PERIOD:3m}
# блок настроек группировки данных табличных параметров
query:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# топик с данными табличных параметров
data-topic: ${kafka.external.topic.prefix:}query.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix:}tp.upload.query
# блок настроек отмены запросов
cancel:
# топик запросов на отмену исполнения
request-topic: ${kafka.external.topic.prefix:}cancel.rq
# настройки кеша отмененных запросов
cache:
# начальный размер кеша
initial-capacity: 10000
# время вытеснения из кеша
expire-after-access: 60m
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}group.tp.consumer
# дополнительные параметры продъюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
delta:
table-params:
# топик с данными табличных параметров
data-topic: ${kafka.external.topic.prefix}delta.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta
# топик с ошибками обработки
error-topic: ${kafka.internal.topic.prefix}tp.upload.err
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}delta.tp.consumer
# дополнительные параметры продъюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
result:
# топик с данными
data-topic: ${kafka.external.topic.prefix}delta.in.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
# топик с ошибками обработки
error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}delta.in.tp.consumer
# дополнительные параметры продъюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
metrics:
# Порт сервера для получения метрик
port: ${METRICS_PORT:9843}
kafkaAdminClientName: kafkaAdminClient
2.2.9.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера – Модуль группировки данных табличных параметров осуществляется путем редактирования параметров настроек
в файле application.yml, где настраиваются секции:
kafkaUrl– адрес сервера Kafka для Агента СМЭВ4;http-server- указывается порт веб-сервера;kafka– настройки сервера Kafka;group- настройка публикации сгруппированных чанков табличных параметров;query- блок настроек группировки данных табличных параметров;delta- указываются настройки группировки дельт;environment- название окружения (test,prodи т.д.);zookeeper- указываются настройки подключения к Zookeeper;metrics– настройка получения метрик.
2.2.9.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8092}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8092.
2.2.9.2.2. Секция kafka
Секция kafka предназначена для настройки сервера Kafka.
Например:
kafka:
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
# параметры консьюмера сообщений
consumer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Смещение при первом запуске приложения
auto.offset.reset: earliest
# параметры продюсера сообщений
producer:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
# Параметры администрирования. Используется для health-check
admin:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры настроек
max-concurrent-handle- максимальное количество обработчиков входящих запросов, например{KAFKA_MAX_CONCURRENT_HANDLE:1000};commit-interval- периодичность фиксации оффсета обработанных сообщений, например{KAFKA_COMMIT_INTERVAL:5s};eventLoopPool- размер пула event loop. напримерVERTX_POOL_EVENTLOOPPOOL:10;internal- настройка количества определяется адрес сервера Kafka и префикс топика;consumer- параметры потребителя сообщений;producer- параметры поставщика сообщений.
2.2.9.2.3. Секция group
Секция group отвечает за публикацию сгруппированных чанков табличных параметров.
group:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# Время пересоздания kafka producer, в минутах
refreshPeriod: ${DATA_PRODUCER_RECREATE_PERIOD:3m}
Параметры настроек
refreshPeriod- Время пересоздания kafka producer, в минутах.
2.2.9.2.4. Секция query
Секция query предназначена для настроек группировки данных табличных параметров.
Например:
query:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
# топик с данными табличных параметров
data-topic: ${kafka.external.topic.prefix:}query.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix:}tp.upload.query
# блок настроек отмены запросов
cancel:
# топик запросов на отмену исполнения
request-topic: ${kafka.external.topic.prefix:}cancel.rq
# настройки кеша отмененных запросов
cache:
# начальный размер кеша
initial-capacity: 10000
# время вытеснения из кеша
expire-after-access: 60m
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}group.tp.consumer
# дополнительные параметры продъюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры настроек
data-topic- топик с данными табличных параметров;notification-topic- топик нотификаций на загрузку табличных параметров;cancel- блок настроек отмены запросов;request-topic- Время пересоздания kafka producer, в минутах;cache- настройки кеша отмененных запросов;initial-capacity– начальный размер кеша;expire-after-access- время вытеснения из кеша;consumer-properties- дополнительные параметры потребителя запросов;producer-properties- дополнительные параметры поставщика ответов.
2.2.9.2.5. Секция delta
В секции delta указываются настройки группировки дельт.
Например:
delta:
table-params:
# топик с данными табличных параметров
data-topic: ${kafka.external.topic.prefix}delta.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta
# топик с ошибками обработки
error-topic: ${kafka.internal.topic.prefix}tp.upload.err
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}delta.tp.consumer
# дополнительные параметры продьюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
result:
# топик с данными
data-topic: ${kafka.external.topic.prefix}delta.in.tp
# топик нотификаций на загрузку табличных параметров
notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
# топик с ошибками обработки
error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
# дополнительные параметры консьюмера запросов
consumer-properties:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}delta.in.tp.consumer
# дополнительные параметры продъюсера ответов
producer-properties:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры настроек
data-topic- топик с данными табличных параметров;notification-topic- топик нотификаций на загрузку табличных параметров;error-topic- топик с ошибками обработки;consumer-properties- дополнительные параметры потребителя запросов;producer-properties- дополнительные параметры поставщика ответов.
2.2.9.2.6. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.9.2.7. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.9.2.8. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
# Порт сервера для получения метрик
port: ${METRICS_PORT:9843}
kafkaAdminClientName: kafkaAdminClient
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9843.
2.2.10. Настройка ПОДД-адаптер – Avro-defragmentator
2.2.10.1. Конфигурация модуля ПОДД-адаптер - Avro-defragmentator (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.
2.2.10.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
application:
path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
destination_chunk_max_record_count: ${APPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500}
request_life_time: 24
garbage_period: 24
zookeeper:
connectionString: ${APPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost}
sessionTimeoutMs: ${APPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000}
connectionTimeoutMs: ${APPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000}
chroot: ${APPLICATION_ZOOKEEPER_CHROOT:/adapter}
environment:
name: ${ENVIRONMENT_NAME:test}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
group-id: ${KAFKA_CONSUMER_GROUPID:defragmentator-consumer}
topic: ${kafka.external.topic.prefix}query.tp.bin
producer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
topic: ${kafka.external.topic.prefix}query.tp
logging:
level:
ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}
metrics:
port: ${METRICS_PORT:9837}
2.2.10.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Avro-defragmentator осуществляется путем редактирования параметров настроек в файле
application.yml, где настраиваются секции:
application- настройка модуля в части указания топиков взаимодействия и размера обрабатываемых данных;environment- указывается название окружения (test,prodи т.д.);kafka- настройка подключения к серверу Kafka для Поставщика и Получателя данных;logging- настройка параметров логирования модуля;metrics- настройка получения метрик.
2.2.10.2.1. Секция application
Секция application предназначена для настройки ПОДД-адаптера - Avro-defragmentator в части указания топиков
взаимодействия и размера обрабатываемых данных.
Например:
application:
path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
destination_chunk_max_record_count: ${APPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500}
request_life_time: 24
garbage_period: 24
zookeeper:
connectionString: ${APPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost}
sessionTimeoutMs: ${APPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000}
connectionTimeoutMs: ${APPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000}
chroot: ${APPLICATION_ZOOKEEPER_CHROOT:/adapter}
Параметры настроек
path– рабочая папка на локальном диске, в которой будут создаваться подпапки для сохранения чанков, напримерAPPLICATION_PATH:/var/lib/podd-avro-defragmentator;destination_chunk_max_record_count- максимальное количество строк в сообщении для destination_topic, напримерAPPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500;request_life_time- время жизни запроса, пока идет сборка;garbage_period- время жизни отдельных, несобранных порций данных;connectionString- строка подключения к zookeeper, напримерAPPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost;sessionTimeoutMs- таймаут сессии, напримерAPPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000;connectionTimeoutMs- таймаут подключения, напримерAPPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000;chroot- путь до каталога сохранения в ZK, напримерAPPLICATION_ZOOKEEPER_CHROOT:/test.
2.2.10.2.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.10.2.3. Секция kafka
Секция kafka предназначена для настройки модуля в части указания адреса сервера Kafka для Поставщика данных (producer) и Получателя данных (consumer).
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
group-id: ${KAFKA_CONSUMER_GROUPID:defragmentator-consumer}
topic: ${kafka.external.topic.prefix}query.tp.bin
producer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
topic: ${kafka.external.topic.prefix}query.tp
Параметры настроек
consumer- настройка адреса сервера Kafka для Получателя данных;bootstrap-servers- адрес кафки для консьюмеров, напримерKAFKA_CONSUMER_BOOTSTRAPSERVERS:localhost:9092;group-id- группа для консьюмеров;producer- настройка адреса сервера Kafka для Поставщика данных;bootstrap-servers- адрес кафки для продюсеров, напримерKAFKA_PRODUCER_BOOTSTRAPSERVERS:localhost:9092.
2.2.10.2.4. Секция logging
Секция logging предназначена для настройки параметров логирования.
Например:
logging:
level:
ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}
2.2.10.2.5. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9837.
2.2.11. Настройка Модуля группировки чанков
2.2.11.1. Конфигурация Модуля группировки чанков репликации (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором описаны подключение к сервису Kafka,
порт веб-сервера, и настройки журналирования запросов и ответов.
2.2.11.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8084}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
delta-apply-request: ${kafka.external.topic.prefix}delta.in.rq
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}podd-adapter-group-repl
auto.offset.reset: earliest
enable.auto.commit: false
producer:
refresh-interval: 60s
delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
logging:
scl.delta:
enabled: ${SCL_DELTA_ENABLED:false}
metrics:
port: ${METRICS_PORT:9837}
2.2.11.2. Параметры конфигурации
Настройка конфигурации Модуля группировки чанков репликации осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
http-server- указывается порт веб-сервера;kafka- настройки параметров подключения к шине данных Apache Kafka;logging- настройки журналирования запросов и ответов;metrics- настройка порта для получения метрик.
2.2.11.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:8084}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8084.
2.2.11.2.2. Секция kafka
Секция kafka определяет настройки взаимодействия через ПОДД-адаптер между Поставщиком данных (producer) и
Получателем данных (consumer).
Здесь же задаются настройки параметров подключения к шине данных Apache Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
delta-apply-request: ${kafka.external.topic.prefix}delta.in.rq
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}podd-adapter-group-repl
auto.offset.reset: earliest
enable.auto.commit: false
producer:
refresh-interval: 60s
delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
topic- префикс для топиков агента ПОДД, напримерAGENT_TOPIC_PREFIX;max-concurrent-handle- максимальное количество обработчиков входящих запросов, напримерKAFKA_MAX_CONCURRENT_HANDLE:100;commit-interval- периодичность фиксации оффсета обработанных сообщений, напримерKAFKA_COMMIT_INTERVAL:5s.
2.2.11.2.3. Секция environment
В секции environment выбирается среда разработки (например, значение test, prod и т.д).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры конфигурации
name- название окружения, напримерENVIRONMENT_NAME:test.
2.2.11.2.4. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- Подключение к Zookeeper DS, напримерZZOOKEEPER_DS_ADDRESS:localhost;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.11.2.5. Секция logging
Секция logging предназначена для настройки журналирования запросов и ответов.
Например:
logging:
scl.delta:
enabled: ${SCL_DELTA_ENABLED:false}
Параметры конфигурации
enabled- Журналировать события SCL delta, например:SCL_DELTA_ENABLED:false.
LOG_FORMAT - Логирование в формате (JSON/TEXT) - указывается в logback.xml.
2.2.11.2.6. Секция metrics
Секция metrics предназначена для настроек порта получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- Порт для получения метрик, например{METRICS_PORT:9837}.
2.2.12. Настройка DATA-Uploader – Модуль исполнения асинхронных заданий
2.2.12.1. Конфигурация модуля DATA-Uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
обеспечение обработки очереди файлов, настройка подключения к ядру витрины (секция: prostore), а также другие
настройки необходимые для корректной работы модуля.
2.2.12.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${SERVER_PORT:8082}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
upload:
concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
mode: ${UPLOAD_MODE:mppw} # mppw|llw
llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
pool:
size: ${UPLOAD_POOL_SIZE:16}
retry:
attempts: 5
delay: 1m
data-storage:
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
active:
timeout: ${ACTIVE_TIMEOUT:60}
time-to-live: ${ACTIVE_TTL:180}
delta:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:60}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
response:
time-to-live: ${RESPONSE_TTL:36000}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
mppw-consumer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: data.uploader.group
auto.offset.reset: earliest
enable.auto.commit: true
mppw-producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
data-producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
data-topic-prefix: ${kafka.internal.topic.prefix}mppw.upload.data
mppw-upload-rq-topic: ${kafka.internal.topic.prefix}mppw.upload.rq
mppw-upload-rs-topic: ${kafka.internal.topic.prefix}mppw.upload.rs
metrics:
port: ${METRICS_PORT:9837}
2.2.12.2. Параметры конфигурации
Настройка конфигурации DATA-Uploader осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт сервера;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore.redis- настройка подключения к Redis;upload- указываются настройки параллельной загрузки данных;data-storage- директория хранения файлов для типаdir;environment- определяет значение среды разработки;zookeeper- определяет настройки подключения к Zookeeper;csv-parser- настройка парсера CSV-файлов;active- настройки интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности;delta- настройка обработок загрузок и отправок заданий на загрузку дельт;response- настройка времени хранения ответов по заданию в Redis;kafka- настройка распределений отправки топиков;metrics- настройка получения метрик.
2.2.12.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.12.2.2. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.12.2.3. Секция redis
Секция redis определяет настройки подключения к Redis.
Например:
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
Параметры настроек
type- тип подключения к Redis (STANDALONE/CLUSTER), напримерREDIS_TYPE:STANDALONE;connection-string- указывается список серверов для подключения (перечисление через запятую), напримерREDIS_CONNECTION_STRING:redis://localhost:6379;password- пароль для подключения, напримерREDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81;max-pool-size- устанавливается максимальный размер пула, напримерREDIS_MAX_POOL_SIZE:6;max-pool-waiting- устанавливается максимальный размер пула ожидающих команд, напримерREDIS_MAX_POOL_WAITING:24;max-waiting-handlers- устанавливается максимальный размер ожидающих обработчиков, напримерREDIS_MAX_WAITING_HANDLERS:32;
2.2.12.2.4. Секция upload
Секция upload определяет настройки параллельной загрузки данных.
Например:
upload:
concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
mode: ${UPLOAD_MODE:mppw} # mppw|llw
llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
pool:
size: ${UPLOAD_POOL_SIZE:16}
retry:
attempts: 5
delay: 1m
Параметры настроек
concurrency- общее количество параллельных задач загрузки, например100;send-concurrency- количество параллельных отправок данных в кафку для каждого файла, например10;poll-interval- интервал опроса очереди сообщений на загрузку, например500ms;mode- режим загрузки, напримерUPLOAD_MODE:mppw;возможные значения:
mppw/llw;llw-batch- число записей в одной команде upsert/delete, напримерUPLOAD_LLW_BATCH:1000, используется только при mode=llw;creating-delta-on-upload-request- создание дельты при запросе загрузки, напримерDELTA_CREATING_MODE:enable, используется только при mode=llw;возможные значения:
enable/disable/period;period- период создания дельты при запросе загрузки (в секундах), напримерCREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300, используется только при mode=llw и creating-delta-on-upload-request=period;check-uniqueness- флаг выполнения проверки уникальности первичных ключей;pool/size- размер пула загрузки, напримерUPLOAD_POOL_SIZE:16;retry- повтор попытки загрузки;attempts- количество попыток;delay- период задержки (в минутах).
2.2.12.2.5. Секция data-storage
В секции data-storage указывается директория хранения файлов для типа dir.
Например:
data-storage:
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
Параметры настроек
type- тип файлов, напримерDATA_STORAGE_TYPE:dir;возможные значения: redis / dir / s3;
dir- директория хранения файлов для типа dir, напримерDATA_STORAGE_DIR:/tmp;s3- настройки облачного хранилища S3;endpoint- адрес конечной точки, напримерS3_ENDPOINT:http://127.0.0.1:9000/;bucket- имя бакета, напримерS3_BUCKET:dataregion- регион хранилища;access-key- пользователь, под которым происходит взаимодействие с s3, напримерS3_USER:minioadmin;secret-key- пароль пользователя для взаимодействия с s3, напримерS3_PASSWORD:minioadmin.
2.2.12.2.6. Секция environment
В секции environment выбирается среда разработки (например, значение test, prod и т.д).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры конфигурации
name- название окружения, напримерENVIRONMENT_NAME:test.
2.2.12.2.7. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- Подключение к Zookeeper DS, напримерZZOOKEEPER_DS_ADDRESS:localhost;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.12.2.8. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.12.2.9. Секция active
В секции active настраиваются интервалы между попытками перехода в активное состояние и времени жизни ключа флага
активности.
Например:
active:
timeout: ${ACTIVE_TIMEOUT:60}
time-to-live: ${ACTIVE_TTL:180}
Параметры настроек
timeout- интервал между попытками перехода в активное состояние;time-to-live- время жизни ключа флага активности.
2.2.12.2.10. Секция delta
Секция delta предназначена для указания настройки обработок загрузок и отправок заданий на загрузку дельт.
Например:
delta:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:60}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
Параметры настроек
timeout- максимальный интервал времени между первой считанной записью цикла загрузки и отправкой заданий на загрузку дельт, напримерDELTA_TIMEOUT:300;row-max-count- максимальное количество обработанных записей для старта отправки заданий на загрузку дельт, напримерDELTA_CHUNK_ROWS:10000;chunk-row-max-count- количество сообщений в одном чанке, напримерDELTA_CHUNK_ROWS:10000;chunk-data-max-size- максимальный размер чанка, напримерDELTA_CHUNK_DATA_SIZE:1048576;open-delay- параметр ожидания (в секундах) перед повторной попыткой открытия дельты в случае ошибки, напримерDELTA_OPEN_DELAY:60;open-attempts- количество попыток открытия дельты в случае ошибки, напримерDELTA_OPEN_ATTEMPTS:5;open-check- период проверки открытых дельт (в секундах), напримерDELTA_OPEN_CHECK:60;commit-attempts- количество попыток фиксации дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:5;commit-error-delay- период ожидания перед повторной попыткой фиксации дельты (в секундах), напримерDELTA_COMMIT_DELAY:1;rollback-attempts- количество попыток отката дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:3;rollback-error-delay- период ожидания перед повторной попыткой отката дельты (в секундах), напримерDELTA_COMMIT_DELAY:5.
2.2.12.2.11. Секция response
Секция response определяет настройка времени хранения ответов по заданию в Redis.
Например:
response:
time-to-live: ${RESPONSE_TTL:36000}
Параметры настроек
time-to-live- Сколько времени Redis будет хранить ответ по заданию (ключ status.<uuid>).
2.2.12.2.12. Секция kafka
Секция kafka позволяет настраивать отправку топиков в заданные модули.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
mppw-consumer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: data.uploader.group
auto.offset.reset: earliest
enable.auto.commit: true
mppw-producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
data-producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
data-topic-prefix: ${kafka.internal.topic.prefix}mppw.upload.data
mppw-upload-rq-topic: ${kafka.internal.topic.prefix}mppw.upload.rq
mppw-upload-rs-topic: ${kafka.internal.topic.prefix}mppw.upload.rs
Параметры настроек
data-topic-prefix- префикс топика, куда будут отправляться данные;mppw-upload-rq-topic- топик для отправки заданий на MPPW модуль;mppw-upload-rq-topic- топик, в который будут приходить результаты исполнения заданий MPPW модуля.
2.2.12.2.13. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9837.
2.2.13. Настройка REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников
2.2.13.1. Конфигурация модуля REST-Uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
асинхронная загрузка данных из источников, настройка подключения к ядру витрины (секция: prostore), а также другие
настройки необходимые для корректной работы модуля.
2.2.13.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${SERVER_PORT:8081}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
send:
file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:512}
environment:
# Название окружения
name: ${ENVIRONMENT_NAME:test}
data-storage:
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
region: ${S3_REGION:}
bucket: ${S3_BUCKET:data} # Имя бакета
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
conditions:
# включение ФЛК и поведение при обнаружении ошибок
mode: warning
# период хранения журналов ошибок
save-time: 1d
# путь хранения журналов ошибок на общем диске:
save-path: /tmp/rest-uploader/reports
# путь к хранению правил в Zookeeper
zookeeper-path: rest-uploader/conditions
# таймаут обработки запроса. 0 - таймаут отключен
rest-timeout: 60s
# период жизни группы
save_group_time: 1d
validation:
# таймаут выполнения асинхронной проверки
validation-timeout: 1h
# таймаут получения сообщений из redis
poll-timeout: 30s
# количество корутин асинхронной валидации
max-concurrent-handle: 1
# размер порции вычитки сообщений из redis
batch-size: 1
# признак выполнения проверки кодировки
charset-check-enabled: true
# допустимые кодировки для механизма автоопределения
valid-charsets: [ UTF-8, US-ASCII, TIS-620]
health-check:
# период жизни флага активности
timeout-active: 3m
# период обновления статуса
publish-period: 30s
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
retry-count: 3
retry-base-sleep-time-ms: 1_000
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
auth:
secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
enabled: ${AUTH_ENABLED:true}
access-list-path: rest-uploader/ids
metrics:
port: ${METRICS_PORT:9837}
scheduler:
redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}
# Настройки парсера csv файлов
csv-parser:
# Символ разделителя значений
separator: ${CSV_PARSER_SEPARATOR:;}
# Символ кавычки
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
# Символ экранирования значений
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
backup:
zk-path: ${REST_UPLOADER_BACKUP_ZK_PATH:/${environment.name}/rest-uploader}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${REST_UPLOADER_BACKUP_GROUP_ID:rest-uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
2.2.13.2. Параметры конфигурации
Настройка конфигурации REST-uploader осуществляется путем редактирования параметров настроек в файле
application.yml, где настраиваются секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;send- настраиваются ограничения на размер загружаемого файла;environment- настройки окружения;data-storage- директория хранения файлов для типаdir;conditions- включение форматно-логического контроля и поведение при обнаружении ошибок;zookeeper- настройки подключения к Zookeeper;prostore-api-client- блок параметров конфигурирования взаимодействия с Prostore;prostore- настройка подключения к серверу и базе данных Prostore;redis- настройка подключения к Redis;auth- указывается секрет для валидации токенов;metrics- настройка получения метрик;scheduler- настройка таймаута отправки запроса в Redis;csv-parser- настройка парсинга CSV;backup- настройки бекапирования.
2.2.13.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.13.2.2. Секция executor
Секция executor предназначена для указания размера пула для запросов.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- Размер пула для запросов, напримерEXECUTOR_READER_POOL_SIZE:20
2.2.13.2.3. Секция send
В секции send можно настраивать ограничения на размер загружаемого файла.
Например:
send:
file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:512}
Параметры настроек
file-size-restriction- ограничение на размер загружаемого файла, напримерSEND_FILE_SIZE_RESTRICTION:512.
2.2.13.2.4. Секция environment
Секция environment предназначена для настройки среды окружения.
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.13.2.5. Секция data-storage
В секции data-storage указывается директория хранения файлов для типа dir.
Например:
data-storage:
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
Параметры настроек
type- тип файлов, напримерDATA_STORAGE_TYPE:dir;возможные значения: redis / dir / s3;
dir- директория хранения файлов для типа dir, напримерDATA_STORAGE_DIR:/tmp;s3- настройки облачного хранилища S3;endpoint- адрес конечной точки, напримерS3_ENDPOINT:http://127.0.0.1:9000/;bucket- имя бакета, напримерS3_BUCKET:dataregion- регион хранилища;access-key- пользователь, под которым происходит взаимодействие с s3, напримерS3_USER:minioadmin;secret-key- пароль пользователя для взаимодействия с s3, напримерS3_PASSWORD:minioadmin.
2.2.13.2.6. Секция conditions
В секции conditions - реализована возможность включения форматно-логического контроля и настройки поведения при
обнаружении ошибок.
Например:
conditions:
mode: warning
save-time: 1d
save-path: /tmp/rest-uploader/reports
zookeeper-path: rest-uploader/conditions
rest-timeout: 60s
save_group_time: 1d
validation:
validation-timeout: 1h
poll-timeout: 30s
max-concurrent-handle: 1
batch-size: 1
charset-check-enabled: true
health-check:
timeout-active: 3m
publish-period: 30s
Параметры настроек
mode- включение ФЛК и поведение при обнаружении ошибок, напримерwarning;save-time- период хранения журналов ошибок, например1d;save-path- путь хранения журналов ошибок на общем диске, например/tmp/rest-uploader/reports;zookeeper-path- путь к хранению правил в Zookeeper, напримерrest-uploader/conditions;rest-timeout- таймаут обработки запроса, например60s,0- таймаут отключен;save_group_time- период жизни группы, например1d;validation-timeout- таймаут выполнения асинхронной проверки, например1h;poll-timeout- таймаут получения сообщений из redis, например30s;max-concurrent-handle- количество корутин асинхронной валидации, например1;batch-size- размер порции вычитки сообщений из redis, например1;charset-check-enabled- признак выполнения проверки кодировки, напримерtrue;timeout-active- период жизни флага активности, например3m;publish-period- период обновления статуса, например30s;
2.2.13.2.7. Секция zookeeper
В секции zookeeper указываются параметры настроек к Zookeeper.
Например:
zookeeper:
connect-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
retry-count: 3
retry-base-sleep-time-ms: 1_000
Параметры настроек
connect-string- Подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:localhost;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;retry-count- количество попыток подключения, например3.
2.2.13.2.8. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.13.2.9. Секция redis
Секция redis определяет настройки подключения к Redis.
Например:
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
Параметры настроек
type- тип подключения к Redis (STANDALONE/CLUSTER);connection-string- указывается список серверов для подключения (перечисление через запятую);password- пароль для подключения;max-pool-size- устанавливается максимальный размер пула;max-pool-waiting- устанавливается максимальный размер пула ожидающих команд;max-waiting-handlers- устанавливается максимальный размер ожидающих обработчиков.
2.2.13.2.10. Секция auth
Секция auth служит для хранения секрета валидации токена.
Например:
auth:
secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
enabled: ${AUTH_ENABLED:true}
Параметры настроек
secret- cекрет для валидации токенов, напримерAUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C;enabled- включение/отключение аутентификации, напримерAUTH_ENABLED:true.
2.2.13.2.11. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.13.2.12. Секция scheduler
Секция scheduler предназначена для настройки таймаута отправки запроса в Redis.
Например:
scheduler:
redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}
Параметры конфигурации
redis-check-request-timeout- таймаут отправки запроса в Redis, напримерREDIS_CHECK_REQUEST_TIMEOUT:60.
2.2.13.2.13. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.13.2.14. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
Параметры настроек
zk-path- путь к корневой ноде zookeeper для бэкапирования, например{COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};commandTopic- топик команд бэкапирования, например:{BACKUP_COMMAND_TOPIC:adapter.command};backupTopic- топик для отправки забэкапированных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.13.3. Проверка форматно-логического контроля
Проверка форматно-логического контроля включает в себя:
обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме;
необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.
Наименование проверки |
Код ошибки |
Кирилическое описание |
|---|---|---|
Проверка уникальности |
|
Дубликат файла/группы |
Проверка парсинга файла |
|
Ошибка парсинга: текст ошибки |
Проверка кодирования |
|
Кодировка файла не соответствует кодировке UTF-8 |
Проверка превышения предельного размера файла (больше 512 Мб) |
|
Слишком большой файл |
Проверка наличия данных в файле |
|
Пустой файл |
Проверка соответствия заголовков инфосхеме |
|
Структура файла не соответствует схеме |
Проверка соответствия числа столбцов в строке |
|
Некорректное число столбцов в строке |
Проверка соответствия типам полей |
|
Значение не соответствует типу требуемый тип |
Проверка уникальности полей |
|
Значение не отвечает требованиям уникальности |
Проверка регулярных выражений |
|
Значение не соответствует регулярному выражению регулярное выражение |
Проверка соответствия условию |
|
Значение не соответствует условию условие |
Таймаут валидации |
|
Истек таймаут валидации файла |
2.2.13.3.1. Синхронная проверка ФЛК
Примечание
синхронные проверки выполняются вне зависимости от настроек модуля REST-Uploader;
синхронные проверки являются блокирующими;
ошибки синхронных проверок возвращаются в теле ответа по REST-API.
К синхронным проверкам относятся:
проверка соответствия инфосхеме:
проверка соответствия имен и количества полей в заголовках;
проверка типа данных;
проверка экранирования данных: проверка соответствия числа столбцов по каждой строке;
проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM при загрузке удаляются начальные байты
efbbbf);проверка размера файла и наличия данных:
проверка предельного размера загружаемого файла 512Мб;
проверка наличия данных в файле.
2.2.13.3.2. Асинхронная проверка
Примечание
асинхронные проверки выполняются в зависимости от настроек модуля;
проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля);
список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла.
К асинхронным проверкам относятся:
проверка уникальности полей:
по сочетанию атрибутов (для комплексных ключей);
по заданному атрибуту;
сравнение значения с константой;
соответствие регулярному выражению.
Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов.
2.2.13.3.2.1. Проверка уникальности по одному или по сочетанию полей
Проверка уникальности проводится:
в рамках группы файлов, если заданы headers - для проверки в рамках группы обязательно заполнения всех полей:
group_id;group_file_num;group_file_count.
при проверке в рамках группы значения ключей для проверки уникальности в рамках группы хранится в Redis:
по всем файлам в рамках группы при наличии групповых атрибутов
по одному файлу, при отсутствии групповых атрибутов
Пример запроса для проверки уникальности по группе файлов:
--проверка по сочетанию полей
fields:
id:
uniq: true
uniq-with: [type,region]
--проверка уникальности по одному полю
snils:
match: "/^[-\s\d]{11}$/"
uniq: true
2.2.13.3.2.2. Проверка соответствия заданному значению
проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id;
проверка осуществляется для значений каждого поля в соответствии с заданным правилом;
проверка соответствия заданному значению включает в себя:
проверку сравнения с константой (
>,<,>=,<=,=,!=);проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html )
2.2.13.3.2.3. Поведение в случае таймаута валидации
Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию
составляет 60 минут.
В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с
обогащением отчета о найденных ошибках ошибкой validationTimeout.
В случае возникновения подобной ошибки рекомендуется:
проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;
увеличить значение
validation-timeoutи повторить загрузку данных.
2.2.13.4. Статусная модель
Статус запроса к модулю REST-Uploder можно получить, выполнив запрос с передачей идентификатора запроса GET '/v2/requests/:requestId/status'
В ответ возвращается три поля:
code - код статуса;
errorMessage - сообщение об ошибке, заполняется лишь в случае ошибочного статуса;
description - описание ошибки, заполняется лишь в случае ошибочного статуса.
Пример ответа на запрос статуса
{"code":2,"description":null,"errorMessage":null}
{"code":3,"description":"Успешно обработан","errorMessage":null}
{"code":4,"description":"Ошибка обработки запроса","errorMessage":"ru.itone.dtm.data.uploader.upload.UploadException: ru.itone.dtm.prostore.rest.api.ProstoreRestException: Error executing query [insert into univer.slots select resource_id,slot_id,tag_type,tag_age,available_date,duration,slot_create_ts,slot_update_ts,slot_status,sys_op from univer.slots_upload_ext]: All of the connectors are failed\n\tat"}
{"code":5,"description":"Идентификатор запроса не обнаружен","errorMessage":null}
{"code":7,"description":"Ошибки ФЛК","errorMessage":null}
В свою очередь, идентификатор запроса ранее был получен в ответ от REST-Uploader:
POST“/v2/datamarts/{datamart_name}/tables/{table_name}/upload;
POST“/v2/datamarts/{datamart_name}/tables/{table_name}/delete.
Код статуса |
Описание статуса |
Действия при получении данного статуса |
|---|---|---|
-1 |
Загрузка данных в буффер |
Данный статус клиентскому приложению не возвращается, ответ вернется после того как загружаемые данные будут сохранены приложением REST-Uploader для дальнейшей загрузки. |
0 |
Запрос буфферизирован |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
1 |
Ожидает открытия дельты |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
2 |
В обработке (модулем DATA-Uploader) |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
3 |
Успешно обработан |
Дополнительных действий не требуется |
4 |
Ошибка обработки запроса |
Необходимо:
|
5 |
Идентификатор запроса не обнаружен |
Использовать действующий идентификатор запроса |
6 |
Форматно-логический контроль |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
7 |
Ошибки ФЛК |
В процессе ФЛК выявлены ошибки, необходимо запросить отчет ФЛК, обратившись к
REST-Uploader c запросом Далее проанализировать и устранить выявленные недочеты в загружаемых данных или скорректировать проверки ФЛК. |
2.2.13.5. Спецификация модуля асинхронной загрузки данных из сторонних источников
Данная спецификация описывает возможность загрузки данных в витрину, получение статуса запроса, удаление данных из витрины.
Метод |
URL |
Назначение |
|---|---|---|
POST |
|
Загрузка данных в витрину с учетом реализации ФЛК |
GET |
|
Получение статуса запроса |
DELETE |
|
Удаление данных из витрины |
POST |
|
запрос для загрузки списка правил для таблицы, для сохранения в Zookeeper |
PUT |
|
запрос для добавления правил для таблицы, для сохранения в Zookeeper |
GET |
|
запрос для получения списка проверок для таблицы, хранящийся в Zookeer |
DELETE |
|
запрос для удаления всего списка проверок по таблице |
GET |
|
Возвращает отчет по форматно логическом контроле загружаемых данных в формате .csv |
GET |
|
Запрос возвращает отчет по комплектности группы загружаемых файлов в формате .csv |
openapi: 3.0.1
info:
title: Rest-uploader
description: This is a rest-uploader service for datamart filling
version: 2.0.0
servers:
- url: 'http://localhost:8081'
paths:
'/v2/datamarts/{datamart_name}/tables/{table_name}/upload':
post:
summary: Add a new data to the datamart
operationId: post-v2-datamarts-datamart_name-tables-table_name-upload
parameters:
- name: datamart_name
in: path
required: true
schema:
type: string
- name: table_name
in: path
required: true
schema:
type: string
- name: groupId
in: header
description: 'идентификатор группы'
required: false
schema:
type: string
- name: groupFileNum
in: header
description: 'номер файла в группе'
required: false
schema:
type: integer
- name: groupFileCount
in: header
description: 'число файлов в группе'
required: false
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/uploadData'
responses:
'200':
description: successful operation
headers:
requestId:
schema:
type: string
content:
text/plain:
schema:
type: string
'400':
description: Bad request
headers:
requestId:
schema:
type: string
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- data
description: Загрузка данных из внешних источников. К телу прикладывается файл csv
parameters:
- schema:
type: string
name: datamart_name
in: path
required: true
- schema:
type: string
name: table_name
in: path
required: true
'/v2/requests/{request_id}/status':
get:
summary: Return request status
description: Возвращение статуса запроса
operationId: get-v2-request-request_id-status
parameters:
- name: request_id
in: path
description: Identifier of request
required: true
schema:
type: string
responses:
'200':
description: successful operation. При ошибочном ответе возвращается код и описание ошибки в соответствии с примером
content:
plain/text:
schema:
type: string
example: "code: 4, description: Ошибка обработки запроса, errorMessage: Полный текст ошибки..."
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- data
parameters:
- schema:
type: string
name: request_id
in: path
required: true
'/v2/requests/{request_id}/reportFLK':
get:
summary: Return report FLK check
description: Возвращает отчет по формато логическом контроле загружаемых данных
operationId: get-v2-request-request_id-reportFLK
parameters:
- name: request_id
in: path
description: Identifier of request
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- report
'/v2/group/{groupId}/report':
get:
summary: Return report group
description: Возвращает отчет по комплектности группы загружаемых файлов
operationId: get-v2-group-groupId-report
parameters:
- name: groupId
in: path
description: Identifier of group
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'404':
description: Not Found
content:
json:
schema:
type: string
description: Сообщение об ошибке
example: 'Report not found'
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- report
'/v2/{datamart_name}/tables/{table_name}/delete':
parameters:
- schema:
type: string
name: datamart_name
in: path
required: true
- schema:
type: string
name: table_name
in: path
required: true
- name: groupId
in: header
description: 'идентификатор группы'
required: false
schema:
type: string
- name: groupFileNum
in: header
description: 'номер файла в группе'
required: false
schema:
type: integer
- name: groupFileCount
in: header
description: 'число файлов в группе'
required: false
schema:
type: integer
post:
summary: Delete data by primary key array
operationId: post-v2-datamart_name-tables-table_name-delete
responses:
'200':
description: OK
'400':
description: Bad Request
'401':
description: Invalid token
'403':
description: Invalid identifier
'500':
description: Internal server error
content: {}
tags:
- data
description: Удаление данных по массиву первичных ключей. К телу прикладывается файл csv
security:
- bearerAuth: []
requestBody:
$ref: '#/components/requestBodies/deleteData'
'/v2/conditions/{datamart}/{table}':
post:
summary: Create verification conditions
description: Формирование правил проверки для датамарта/таблицы
operationId: post-v2-conditions
parameters:
- name: datamart
in: path
description: Name of datamart
required: true
schema:
type: string
- name: table
in: path
description: Name of table
required: true
schema:
type: string
requestBody:
content:
form-data/yaml: {}
form-data/json: {}
application/json:
schema: {}
example: '
fields:
birthday:
# ограничение на формат даты ГГГГ-ММ-ДД: 4 цифры года, 2 цифры месяца и 2 цифры дня
# Уникальность по одному полю
match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})"
uniq: true
# Уникальность по сочетанию полей
uniq-with: [code,passport]
code:
in: ["1","2","3","4","5","6","7","8","9","10"]
uniq: true'
responses:
'200':
description: successful operation
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- conditions
put:
summary: Update verification conditions
description: Обновление правил проверки для датамарта/таблицы
operationId: put-v2-conditions
parameters:
- name: datamart
in: path
description: Name of datamart
required: true
schema:
type: string
- name: table
in: path
description: Name of table
required: true
schema:
type: string
requestBody:
content:
form-data/yaml: {}
form-data/json: {}
application/json:
schema: {}
example: '
fields:
birthday:
# ограничение на формат даты ГГГГ-ММ-ДД: 4 цифры года, 2 цифры месяца и 2 цифры дня
# Уникальность по одному полю
match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})"
uniq: true
# Уникальность по сочетанию полей
uniq-with: [code,passport]
code:
in: ["1","2","3","4","5","6","7","8","9","10"]
uniq: true'
responses:
'200':
description: successful operation
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- conditions
get:
summary: Return verification conditions
description: Возвращение правил проверки для датамарта/таблицы
operationId: get-v2-conditions
parameters:
- name: datamart
in: path
description: Name of datamart
required: true
schema:
type: string
- name: table
in: path
description: Name of table
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
form-data/yaml: {}
form-data/json: {}
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- conditions
delete:
summary: Delete verification conditions
description: Удаление правил проверки для датамарта/таблицы
operationId: delete-v2-conditions
parameters:
- name: datamart
in: path
description: Name of datamart
required: true
schema:
type: string
- name: table
in: path
description: Name of table
required: true
schema:
type: string
responses:
'200':
description: successful operation
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Internal server error
content: {}
security:
- bearerAuth: []
tags:
- conditions
components:
requestBodies:
uploadData:
description: 'загружаемые данные'
required: true
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
multipart/form-data:
schema:
required:
- uploadData
properties:
uploadData:
type: string
description: Data for uploading
format: binary
deleteData:
description: 'Удаляемые данные, важны лишь ключевые поля, остальные могут отсутствовать или будут проигнорированы'
required: true
content:
application/json:
schema:
type: object
properties:
primaryKeys:
type: array
description: Массив первичных ключей
items:
type: array
items:
type: string
text/csv:
schema:
type: array
items:
type: array
items:
type: string
multipart/form-data:
schema:
required:
- uploadData
properties:
uploadData:
type: string
description: Data for uploading
format: binary
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
examples: {}
security:
- bearerAuth: []
tags:
- name: data
description: Загрузка и удаление данных из Витрины, получение статуса запроса
- name: conditions
description: Управление правилами проверок для таблицы
- name: report
description: Получение отчетов
2.2.14. Настройка ПОДД-адаптер – Модуль подписок
2.2.14.1. Конфигурация модуля ПОДД-адаптер - Модуль подписок (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
настройка подключения к Prostore (секция:
prostore);подключение к Брокеру сообщений Kafka, Zookeeper;
порядок обработки запросов между Получателем и Поставщиком данных (секция:
kafka);настройка метрик (секция:
metrics) и другие настройки необходимые для корректной работы адаптера.
2.2.14.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
environment:
name: ${ENVIRONMENT_NAME:test}
http-server:
port: ${HTTP_PORT:8085}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
table-metadata:
cache:
enabled: false
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
status-event-topic:
topic: ${PS_STATUS_EVENT_TOPIC:status.event}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-status-event
auto.offset.reset: earliest
enable.auto.commit: false
subscription:
consumer:
# режим отмены подписки на потребителе. Возможные значения rename, drop, none
cancel-mode: none
# Продолжительность исключения подписки в случае ошибки применения
exclusion-duration: 24h
# Периодичность срабатывания механизма очистки для ошибочных подписок
cleanup-interval: 5s
# Массив описания standalone таблиц, участвующих в репликации
#standalone-tables: []
# Пример описания
#standalone-tables:
# - table: "misdm05.readable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
subscription-request:
topic: ${kafka.external.topic.prefix}replication.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-cancel-request:
topic: ${kafka.external.topic.prefix}replication.cancel.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-cancel-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-consumer-cancel-request:
topic: ${kafka.external.topic.prefix}replication.cancel.in.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}}replicator-subscription-consumer-cancel-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-storage-request:
topic: ${kafka.external.topic.prefix}replication.in.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-storage-request
auto.offset.reset: earliest
enable.auto.commit: false
delta-request:
topic: ${kafka.external.topic.prefix}delta.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-delta-request
auto.offset.reset: earliest
enable.auto.commit: false
delta-apply-notification:
topic: ${kafka.internal.topic.prefix}subscription.in
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-notification
auto.offset.reset: earliest
enable.auto.commit: false
mppw-delta-apply-result:
topic: ${kafka.internal.topic.prefix}mppw.delta.in.rs
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-result
auto.offset.reset: earliest
enable.auto.commit: false
producer:
subscription-result: ${kafka.external.topic.prefix}replication.rs
subscription-error: ${kafka.external.topic.prefix}replication.err
subscription-cancel-error: ${kafka.external.topic.prefix}replication.cancel.rs
subscription-cancel-result: ${kafka.external.topic.prefix}replication.cancel.rs
subscription-consumer-cancel-result: ${kafka.external.topic.prefix}replication.cancel.in.rs
subscription-storage-result: ${kafka.external.topic.prefix}replication.in.rs
subscription-storage-error: ${kafka.external.topic.prefix}replication.in.err
delta-error: ${kafka.external.topic.prefix}delta.err
delta-apply-error: ${kafka.external.topic.prefix}delta.in.err
delta-apply-result: ${kafka.external.topic.prefix}delta.in.rs
delta-notification: ${kafka.external.topic.prefix}delta.notification
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
mppr-delta-request: ${kafka.internal.topic.prefix}mppr.delta.rq
mppw-delta-apply-request: ${kafka.internal.topic.prefix}mppw.delta.in.rq
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
metrics:
port: ${METRICS_PORT:9837}
log:
replRequest: ${REPL_REQUEST_LOG_ENABLED:false}
replResponse: ${REPL_RESPONSE_LOG_ENABLED:false}
backup:
zk-path: ${REPLICATOR_BACKUP_ZK_PATH:/${environment.name}/podd-adapter-replicator}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${REPLICATOR_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
timeout: ${BACKUP_TIMEOUT:PT180s}
idleDelay: ${BACKUP_DELAY:500}
kafka:
consumer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${REPLICATOR_BACKUP_GROUP_ID:podd_adapter_replicator_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
2.2.14.2. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль подписок осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
environment- указывается название окружения (test,prodи т.д.);http-server- настройки порта подключения;executor- масштабирования нагрузки на модуль;zookeeper– параметры подключения к Zookeeper;migration- настройки миграции;prostore-api-client- блок параметров конфигурирования взаимодействия с Prostore;subscription- настройки подписки;kafka- настройки параметров подключения к шине данных Apache Kafka;log- настройка сохранения лог-файла;metrics- настройка получения метрик;backup- настройки бекапирования.
2.2.14.2.1. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.14.2.2. Секция http-server
Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http-server:
port: ${HTTP_PORT:8085}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8085.
2.2.14.2.3. Секция executor
Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.14.2.4. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
ZOOKEEPER_DS_ADDRESS- адрес сервера Zookeeper DS;ZOOKEEPER_DS_SESSION_TIMEOUT_MS- таймаут подключения к Zookeeper DS,максимальное время ожидания для выявления сбоев потребителей, указывается в миллисекундах (MS.);ZOOKEEPER_DS_SESSION_TIMEOUT_MS- таймаут сессии, максимальное время ожидания подключения к Zookeeper. Если ответ не получен до истечения установленного значения, клиент повторно отправляет запрос при необходимости, указывается в миллисекундах (MS.);ZOOKEEPER_DS_CHROOT- Zookeeper DS chroot path.
2.2.14.2.5. Секция migration
Секция migration реализована настройка миграции Zookeeper для задачи бекапирования.
Например:
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false};old-connection-string- адрес Zookeeper, например{OLD_ZOOKEEPER_DS_ADDRESS:localhost}.
2.2.14.2.6. Секция prostore-rest-client
В секции prostore-rest-client настраиваются параметры конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.14.2.7. Секция subscription
В секции subscription настраиваются подписки на потребителе.
Например
subscription:
consumer:
# режим отмены подписки на потребителе. Возможные значения rename, drop, none
cancel-mode: none
# Продолжительность исключения подписки в случае ошибки применения
exclusion-duration: 24h
# Периодичность срабатывания механизма очистки для ошибочных подписок
cleanup-interval: 5s
Параметры конфигурации
cancel-mode- режим отмены подписки на потребителе. Возможные значения:rename,drop,none;exclusion-duration- продолжительность исключения подписки в случае ошибки применения (в часах), напримерexclusion-duration: 24h;cleanup-interval- периодичность срабатывания механизма очистки для ошибочных подписок (в секундах), напримерcleanup-interval: 5s.
2.2.14.2.8. Секция kafka
В секции kafka настраиваются параметры подключения к шине данных Apache Kafka (используется для взаимодействия с ПОДД-адаптером)
и настройки взаимодействия через топики модуля ПОДД-адаптер - Модуль исполнения запросов.
Модуль взаимодействует через топики:
replication.rq/rs/err- запрос создания подписки (Поставщик данных);replication.cancel.rq/rs/err- запрос отмены подписки (Поставщик данных);delta.rq/mppr.delta.rq- запрос дельты (Поставщик данных);replication.in.rq/rs/err- запрос создания структуры по подписке (Получатель данных);subscription.in/delta.in.rs/delta.in.err- запрос применения дельты (Получатель данных);status.event/delta.notification- статусы с Prostore (Поставщик данных).
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
internal:
bootstrap.servers: ${PS_KAFKA:localhost:9092}
topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
consumer:
subscription-request:
topic: ${kafka.external.topic.prefix}replication.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-cancel-request:
topic: ${kafka.external.topic.prefix}replication.cancel.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-cancel-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-consumer-cancel-request:
topic: ${kafka.external.topic.prefix}replication.cancel.in.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}}replicator-subscription-consumer-cancel-request
auto.offset.reset: earliest
enable.auto.commit: false
subscription-storage-request:
topic: ${kafka.external.topic.prefix}replication.in.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-subscription-storage-request
auto.offset.reset: earliest
enable.auto.commit: false
delta-request:
topic: ${kafka.external.topic.prefix}delta.rq
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${kafka.external.topic.prefix}replicator-delta-request
auto.offset.reset: earliest
enable.auto.commit: false
delta-apply-notification:
topic: ${kafka.internal.topic.prefix}subscription.in
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-notification
auto.offset.reset: earliest
enable.auto.commit: false
mppw-delta-apply-result:
topic: ${kafka.internal.topic.prefix}mppw.delta.in.rs
max-concurrent-handle: ${kafka.max-concurrent-handle}
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-result
auto.offset.reset: earliest
enable.auto.commit: false
producer:
subscription-result: ${kafka.external.topic.prefix}replication.rs
subscription-error: ${kafka.external.topic.prefix}replication.err
subscription-cancel-error: ${kafka.external.topic.prefix}replication.cancel.rs
subscription-cancel-result: ${kafka.external.topic.prefix}replication.cancel.rs
subscription-consumer-cancel-result: ${kafka.external.topic.prefix}replication.cancel.in.rs
subscription-storage-result: ${kafka.external.topic.prefix}replication.in.rs
subscription-storage-error: ${kafka.external.topic.prefix}replication.in.err
delta-error: ${kafka.external.topic.prefix}delta.err
delta-apply-error: ${kafka.external.topic.prefix}delta.in.err
delta-apply-result: ${kafka.external.topic.prefix}delta.in.rs
delta-notification: ${kafka.external.topic.prefix}delta.notification
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
internal:
mppr-delta-request: ${kafka.internal.topic.prefix}mppr.delta.rq
mppw-delta-apply-request: ${kafka.internal.topic.prefix}mppw.delta.in.rq
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
AGENT_TOPIC_PREFIX- значение префикса для топиков. Топики взаимодействия с ПОДД-адаптером - Модуль исполнения запросов
2.2.14.2.9. Секция metrics
В секции metrics настраиваются параметры метрик.
Например:
metrics:
port: ${METRICS_PORT:9837
Параметры конфигурации
port- порт для получения метрик, например9837.
2.2.14.2.10. Секция log
В секции log настраиваются параметры логирования.
Например:
log:
replRequest: ${REPL_REQUEST_LOG_ENABLED:false}
replResponse: ${REPL_RESPONSE_LOG_ENABLED:false}
Параметры конфигурации
repl-request- журналировать запросы к модулю подписок, напримерREPL_REQUEST_LOG_ENABLED:false;repl-response- журналировать ответы модуля подписок, напримерREPL_RESPONSE_LOG_ENABLED:false.
2.2.14.2.11. Секция backup
В секции backup настраиваются параметры бекапирования модуля.
Например:
backup:
zk-path: ${REPLICATOR_BACKUP_ZK_PATH:/${environment.name}/podd-adapter-replicator}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${REPLICATOR_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
timeout: ${BACKUP_TIMEOUT:PT180s}
idleDelay: ${BACKUP_DELAY:500}
kafka:
consumer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
group.id: ${REPLICATOR_BACKUP_GROUP_ID:podd_adapter_replicator_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры настроек
zk-path- путь к корневой ноде Zookeeper для бэкапирования, например{COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};commandTopic- топик команд бэкапирования, например:{BACKUP_COMMAND_TOPIC:adapter.command};backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.15. Настройка BLOB-адаптера
2.2.15.1. Конфигурация BLOB-адаптера (application.yml)
Файл application.yml – основной конфигурационный файл BLOB-адаптер, в котором задана логика и порядок работы модуля:
получение и обработка входящих запросов;
настройка подключения к СМЭВ3-адаптеру, ПОДД-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля.
2.2.15.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
vertx:
web-client:
max-pool-size: 20
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
enabled: ${KAFKA_ENABLED:true}
consumer:
blob-request: ${kafka.external.topic.prefix}blob.rq
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
blob-result: ${kafka.external.topic.prefix}blob.rs
blob-error: ${kafka.external.topic.prefix}blob.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
blob:
chunk-size: ${CHUNK_SIZE:524288}
storage:
protocol: ${BLOB_STORAGE_PROTOCOL:http}
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE}
user: ${BLOB_STORAGE_AUTH_USER:user}
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass}
token: ${BLOB_STORAGE_AUTH_TOKEN:token}
authorization-server:
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
# params:
# name1: value1
# name2: value2
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
metrics:
port: ${METRICS_PORT:9837}
2.2.15.2. Параметры конфигурации
Настройка конфигурации BLOB-адаптера осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;vertx- настраиваются значения вертиклов;kafka- настраиваются параметры подключения к шине данных Apache Kafka;blob- настраивается подключение к Хранилищу BLOB-объектов;logging- настраивается логирование работы модуля;metrics- настраивается получение метрик.
2.2.15.2.1. Секция http-server
Секция http-server позволяет настраивать взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по
протоколу http/https и задавать порт, на котором будет открыт доступ к серверу.
Например:
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
enabled- флаг активации работы с сервером;port- порт, на котором будет открыт доступ к серверу.
2.2.15.2.2. Секция executor
Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.15.2.3. Секция vertx
Секция vertx определяет настройки количества вертиклов.
Например:
vertx:
web-client:
max-pool-size: 20
Параметры настроек
max-pool-size- максимальное значение для веб-клиента.
2.2.15.2.4. Секция kafka
Секция
kafkaпредназначена для настройки параметров подключения к шине данных Apache Kafka (используется для взаимодействия с ПОДД-адаптером).
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
enabled: ${KAFKA_ENABLED:true}
consumer:
blob-request: ${kafka.external.topic.prefix}blob.rq
# максимальное количество обработчиков входящих запросов
max-concurrent-handle: ${kafka.max-concurrent-handle}
# периодичность фиксации оффсета обработанных сообщений
commit-interval: ${kafka.commit-interval}
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
auto.offset.reset: earliest
enable.auto.commit: false
producer:
blob-result: ${kafka.external.topic.prefix}blob.rs
blob-error: ${kafka.external.topic.prefix}blob.err
property:
bootstrap.servers: ${kafka.external.bootstrap.servers}
Параметры конфигурации
enabled- флаг включения чтения из Kafka, напримерKAFKA_ENABLED:true;blob-request- максимальное количество обработчиков входящих запросов, например${kafka.external.topic.prefix}blob.rq;max-concurrent-handle- периодичность фиксации оффсета обработанных сообщений, например${kafka.max-concurrent-handle}
blob.rq, blob.rs, blob.err - топики взаимодействия с ПОДД-адаптером - Модуль исполнения запросов (см. Спецификация Модуля исполнения запросов).
2.2.15.2.5. Секция blob
Секция blob предназначена для настройки:
размера выгружаемого чанка BLOB;
пути к Хранилищу BLOB-объектов (GET-запрос);
метода аутентификации для модуля BLOB-адаптера;
получения токена;
повторной аутентификаций при истечении времени жизни токена.
Например:
blob:
chunk-size: ${CHUNK_SIZE:524288}
storage:
protocol: ${BLOB_STORAGE_PROTOCOL:http}
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE}
user: ${BLOB_STORAGE_AUTH_USER:user}
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass}
token: ${BLOB_STORAGE_AUTH_TOKEN:token}
authorization-server:
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
# params:
# name1: value1
# name2: value2
Параметры конфигурации
chunk-size- размер выгружаемого чанка BLOB, например${CHUNK_SIZE:524288};protocol- протокол обмена с сервером Хранилища BLOB-объектов (одно из значенийhttpилиhttps), напримерBLOB_STORAGE_PROTOCOL:http;host- имя сервера Хранилища BLOB-объектов, напримерBLOB_STORAGE_HOST:localhost;port- TCP-порт Хранилища BLOB-объектов, если отсутствует, то следует использовать следующие порты80для HTTP,443для HTTPS, напримерBLOB_STORAGE_PORT:8888;path-postfix- окончание пути, начало списка параметров, напримерBLOB_STORAGE_PATH_PREFIX:;path-prefix- постоянная часть пути до Хранилища BLOB-объектов, путь до места хранения BLOB-объекта на сервере Хранилища BLOB-объектов, напримерBLOB_STORAGE_PATH_POSTFIX:;auth- параметры аутентификации BLOB-адаптера;type-тип аутентификации (NONE- нет,BASIC- по имени/паролю,TOKEN- по токену,AUTH- через сервер аутентификации), напримерBLOB_STORAGE_AUTH_TYPE:NONE;user- имя пользователя (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_USER:user;password- пароль (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_PASSWORD:pass;token- токен (для аутентификацииTOKEN), напримерBLOB_STORAGE_AUTH_TOKEN:token;protocol- имя протокола HTTP или HTTPS (для аутентификацииAUTH), напримерAUTH_SERVER_PROTOCOL:http;host- строка с IP или FQDN сервера авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_HOST:localhost;port- TCP-порт (для аутентификацииAUTH), напримерAUTH_SERVER_PORT:80;path- путь на сервере (для аутентификацииAUTH), напримерAUTH_SERVER_PATH:oauth2/token;client-id- идентификатор клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_ID:;client-secret- секретный код клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_SECRET:;params- дополнительные параметры запроса к Хранилищу BLOB-объектов.
Пример cURL-запроса к серверу аутентификации
cURL (windows)
curl -X POST http://t5-avanpost-01.ru-central1.internal/oauth2/token ^
-H "Accept: application/json"^
-H "Content-type: application/x-www-form-urlencoded"^
--data "grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2" ^
-o result.txt ^
--trace-ascii result.log
cURL (linux)
curl --request POST \
--url http://t5-avanpost-01.ru-central1.internal/oauth2/token \
--header 'Accept: application/json' \
--header 'Content-type: application/x-www-form-urlencoded' \
--data 'grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2' \
-o result.txt
Пример cURL-запроса к Хранилищу BLOB-объектов
cURL (windows)
curl -X GET http://vmserv1.internal.example.com:8080/datamart/data/v1/blobs/1234567 ^
-H "Authorization: bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJqdGkiOiI5YmQ3MzdjZi05MDNmLTQxZTktYjI5Mi1mZmUwM2QzNDhkNWIiLCJleHAiOjE2NTQxMDI5NDgsImlhdCI6MTY1NDEwMTE0OCwiaXNzIjoiY2VydC5pc3N1ZXIuaG9zdCIsImF1ZCI6IiIsImV4cGlyZXNfaW4iOjE4MDAsImNsaWVudF9pZCI6ImIwZmQwZjI4LTRiOTktNDBkNy04ZGQzLWU2NjNhNmNjNzdkMSJ9.qi8JKlQAdMsK3fTq4H88Z5-FppaUP95OH-rmPtCxEMmlPnyhNCRJe34aKMR5mXVldEzY1clV87-qjWCyPLH_Zkqji1C7aQz7fMbgZixhY2wrQnXAXRfslkRe5Ph3GYYd26GvWOG1xl99AHvfDWIfI1SGcJyd0z_iOl1GbghLvSV38MquZ8ugBdKaDjV-Ww3U_sWlJVO-oF8xjUMYuhOSsCNxhxMng1oVwUdAUbbgoB5ldyoGTbqmbQMYvBmKBT0eZqOR6RnJEAjmfOC9YeWwADKwovFybvGOaQZsjlaoJ2XxpmS79U7UO_6KXK1cnHfshVuB5_yUwubrRh6tRxt0CA"^
-o result.bin ^
--trace-ascii result.log
Пример настройки динамической ссылки на файлы с содержимым BLOB-полей
Пример 1
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: http
host: aa.bb.cc
port: 8080
path-prefix: api/v1/blobs/
Пример 2
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000,
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: https
host: aa.bb.cc
path-prefix: api/v1/blobs/
path-postfix: /data
params:
format: jpg
size: low
backgraund: "#000000"
Пример 3
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: ${PROT:http}
host: ${HOST:aa.bb.cc}
port: ${PORT:80}
path-prefix: ${PREFIX:api/v1/blobs/}
Пример 4
Если требуется получить строку вида:
https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true
Необходимо настроить:
В Витрине данных поле с типом
LINKдолжно содержать текст:
12345678/download?requester_id=ABCDEFGH
В файл
application.ymlдобавить следующие настройки:
blob-storage:
protocol: https
host: aa.bb.cc
port: 8080
path-prefix: api/
params:
user: fdsfs
zip: true
Указание дополнительных параметров к Хранилищу BLOB-объектов
Например
blob-storage:
params:
name1: value1
name2: value2
Пример запроса
/files/test?name1=value1&name2=value2
2.2.15.2.6. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
Параметры настроек
blob-request- журналировать запросы, напримерBLOB_REQUEST_LOG_ENABLED:false;blob-request- журналировать ответы, напримерBLOB_RESPONSE_LOG_ENABLED:false.
2.2.15.2.7. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.16. Настройка Сервиса формирования документов
2.2.16.1. Конфигурация Сервиса Формирования документов (application.yml)
Файл application.yml – основной конфигурационный файл Сервиса Формирования документов, в котором задана логика и порядок работы сервиса:
настройка и обработка документов;
путь к pebble-шаблонам документов (секция
printable-forms);настройка сервиса формирования подписи (
sign-service);настройка подключения к базе данных (секция:
datasource);настройка проверки состояния БД (секция
health) и другие настройки необходимые для корректной работы сервиса.
2.2.16.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8080}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
metrics:
port: ${METRICS_PORT:9837}
vertx:
web-client:
max-pool-size: 20
counter-service:
host: ${COUNTER_SERVICE_HOST:localhost}
port: ${COUNTER_SERVICE_PORT:9000}
serviceName: ${COUNTER_SERVICE_NAME:printableform}
timeout: ${COUNTER_SERVICE_TIMEOUT:30}
sign-service:
url: ${SIGN_SERVICE_URL:http://localhost:8192}
timeout: ${SIGN_SERVICE_TIMEOUT:30}
pool-size: ${SIGN_SERVICE_POOL_SIZE:5}
notarius:
host: ${NOTARUIS_HOST:localhost}
port: ${NOTARUIS_PORT:8192}
enabled: ${NOTARIUS_ENABLED:FALSE}
props:
maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
printable-forms:
reports:
# имя документа
- report: document_1
# настройки по извлечению данных
extract:
# путь pebble шаблона, который будет извлекать данные
template: extract_static.peb
# настройки по формированию xml документа
xml:
# путь pebble шаблона, который будет формировать xml документ
template: generate_xml_1.peb
# Id подписываемого элемента, если не указано, то подписывается весь xml
elementId: elementToSign
# имя элемента, куда добавлять ЭП, если не указано, то в корень
elementName: signature
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# настройки по формированию xml документа с открепленной подписью
xml_detached_sig:
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: xmlSign.p7s
# настройки по формированию pdf документа
pdf:
# путь pebble шаблона, который будет формировать pdf документ
template: generate_pdf_1.peb
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# настройки по формированию pdf документа с открепленной подписью
pdf_sig:
# путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
# (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: pdfSign.p7s
2.2.16.2. Параметры конфигурации
Настройка конфигурации Сервиса Формирования документов осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт веб-сервера;executor- предназначена для указания размера пула для запросов;prostore-rest-client- настраивается блок параметров взаимодействия с Prostore;metrics- указывается порт для получения метрик;counter-service- указываются настройки подключения к сервису генерации номера;sign-service- указываются настройки подключения к сервису подписания документа;notarius- указываются настройки сервиса подписания и проверки подписи «Нотариус»;printable-forms- указываются настройки сервиса формирования документов
2.2.16.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:8080}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8080.
2.2.16.2.2. Секция executor
В секции executor указывается размер пула для запросов.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- Размер пула для чтения запросов, напримерEXECUTOR_READER_POOL_SIZE:20
2.2.16.2.3. Секция prostore-rest-client
В секции prostore-rest-client настраивается блок параметров взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.16.2.4. Секция metrics
В секции metrics указывается порт для получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для получения метрик, напримерMETRICS_PORT:9837
2.2.16.2.5. Секция counter-service
В секции counter-service настраивается подключение к сервису генерации номера.
Например:
counter-service:
host: ${COUNTER_SERVICE_HOST:localhost}
port: ${COUNTER_SERVICE_PORT:9000}
serviceName: ${COUNTER_SERVICE_NAME:printableform}
timeout: ${COUNTER_SERVICE_TIMEOUT:30}
Параметры настроек
host- адрес сервиса генерации номера, напримерCOUNTER_SERVICE_HOST:t5-printable-form-01.ru-central1.internal;port- порт сервиса генерации номера, напримерCOUNTER_SERVICE_PORT:9000;serviceName- значение имени сервиса, напримерCOUNTER_SERVICE_NAME:printableform;timeout- таймаут на генерации номера, напримерCOUNTER_SERVICE_TIMEOUT:30.
2.2.16.2.6. Секция sign-service
В секции sign-service настраивается подключение к сервису подписания документа.
Например:
sign-service:
url: ${SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192}
timeout: ${SIGN_SERVICE_TIMEOUT:30}
pool-size: ${SIGN_SERVICE_POOL_SIZE:5}
Параметры настроек
url- URL сервиса подписания документа, напримерSIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192;timeout- таймаут на подписание документа (сек), напримерSIGN_SERVICE_TIMEOUT:30;pool-size- размер пула для сервиса подписания, напримерSIGN_SERVICE_POOL_SIZE:5.
2.2.16.2.7. Секция notarius
В секции notarius указываются настройки сервиса Нотариус.
Например:
notarius:
host: ${NOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal}
port: ${NOTARUIS_PORT:8192}
enabled: ${NOTARIUS_ENABLED:FALSE}
props:
maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
Параметры настроек
host- адрес сервиса Нотариус, напримерNOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal;port- порт сервиса Нотариус, напримерNOTARUIS_PORT:8192;enabled- выбор сервиса подписания между schloussler и notarius, напримерNOTARIUS_ENABLED:FALSE;maxContentLength- максимальный размер отправляемого объекта, напримерNOTARUIS_MAX_CONTENT_LENGTH:1048576005;signatureURI- URI алгоритма хэширования, напримерNOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256;digestMethod- алгоритм хэширования, напримерNOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411.
2.2.16.2.8. Секция printable-forms
В секции printable-forms настраивается сервис формирования документов.
Например:
printable-forms:
reports:
# имя документа
- report: document_1
# настройки по извлечению данных
extract:
# путь pebble шаблона, который будет извлекать данные
template: ./src/main/resources/extract_static.peb
# настройки по формированию xml документа
xml:
# путь pebble шаблона, который будет формировать xml документ
template: ./src/main/resources/generate_xml_1.peb
# Id подписываемого элемента, если не указано, то подписывается весь xml
elementId: elementToSign
# имя элемента, куда добавлять ЭП, если не указано, то в корень
elementName: signature
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# настройки по формированию pdf документа
pdf:
# путь pebble шаблона, который будет формировать pdf документ
template: ./src/main/resources/generate_pdf_1.peb
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# настройки по формированию pdf документа с открепленной подписью
pdf_sig:
# путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
# (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: pdfSign.p7s
Внимание
В конфигурационном файле application.yml пути к файлам pebble-шаблонов должны быть либо: относительно директории запуска, либо абсолютные пути.
2.2.16.3. Примеры pebble-шаблонов для Сервиса Формирования документов
2.2.16.3.1. Возможность вызова REST-сервисов из шаблона Сервиса Формирования документов
Для вызова REST-сервисов из шаблона Сервиса Формирования документов используется функция callRest.
Пример вызова функции из pebble-шаблона:
{% set host = "smevql-dtm-smevqlserver01.ru-central1.internal" %}
{% set port = "8080" %}
{% set route = "data" %}
{% set rq = "${jsonRequest.replace("\"", "\\\"")}" %}
{% set varName = callRest(
method = "POST",
url = "http://#\{host}:#{port}/#{route}",
headers = "Content-Type=application/json",
body = rq,
responseType = "JSON"
)
%}
{{ varName["response"]["ticket"][0]["id"]}}
Для асинхронного вызова (без ожидания ответа), необходимо выставить параметр async=true.
2.2.16.3.2. Pebble-шаблон для обработки поступившего запроса и формирования json-файла
{# формируем sql запрос в переменную passengersquery#}
{% var passengersquery %}
{% if params[0] is empty %}
select * from smart.all_types limit 10
{% else %}
select * from smart.all_types limit {{ params[0] }}
{% endif %}
{% endvar %}
{# выполняем sql запрос и помещаем результат выполнения в переменную rows.searchpassenger #}
{{ sql("searchpassenger", passengersquery) }}
{% var json_data %}
{
"passengers": [
{% for p in rows.searchpassenger %}
{# формируем json динамически #}
{% if loop.first %}
{% else %}
,
{% endif %}
{
"id": "{{ p.id }}",
"firstname": "{{ p.firstname }}",
"middlename": "{{ p.middlename }}",
"lastname": "{{ p.lastname }}",
"birthday": "{{ p.birthday }}"
}
{% endfor %}
]
}
{% endvar %}
{#выведем полученный json в неэкранированной форме#}
{{ json_data | raw }}
2.2.16.3.3. Pebble-шаблон для формирования xml-документа
<root>
<passengers Id="elementToSign">
{% for p in data.passengers %}
<passenger id="{{ p.id }}">
<firstname>{{ p.firstname }}</firstname>
<middlename>{{ p.middlename }}</middlename>
<lastname>{{ p.lastname }}</lastname>
<birthday>{{ p.birthday }}</birthday>
</passenger>
<cert>
<organization>{{ certification_info.subjectDN.commonName }}</organization>
<serial>{{ dec_to_hex(certification_info.serialNumber) }}</serial>
<issuer>{{ certification_info.issuerDN.commonName }}</issuer>
<valid-from>{{ certification_info.notBefore | date("dd.MM.yyyy") }}</valid-from>
<valid-until>{{ certification_info.notAfter | date("dd.MM.yyyy") }}</valid-until>
</cert>
{% endfor %}
</passengers>
<signature/>
</root>
2.2.16.3.4. Pebble-шаблон для формирования pdf-документа
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<h3>Certificate</h3>
<table>
<tr>
<th>Организация</th>
<th>Сертификат</th>
<th>Издатель</th>
<th>Действителен с</th>
<th>Действителен по</th>
</tr>
<tr>
<td>{{ certification_info.subjectDN.commonName }}</td>
<td>{{ certification_info.serialNumber }}</td>
<td>{{ certification_info.issuerDN.commonName }}</td>
<td>{{ certification_info.notBefore }}</td>
<td>{{ certification_info.notAfter }}</td>
</tr>
</table>
<h3>Passengers</h3>
<table>
<tr>
<th>id</th>
<th>firstname</th>
<th>middlename</th>
<th>lastname</th>
<th>birthday</th>
</tr>
{% for p in data.passengers %}
<tr>
<td>{{ p.id }}</td>
<td>{{ p.firstname }}</td>
<td>{{ p.middlename }}</td>
<td>{{ p.lastname }}</td>
<td>{{ p.birthday }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
2.2.17. Настройка REST-адаптера
2.2.17.1. Конфигурация REST-адаптера
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля
2.2.17.1.1. Пример файла application.yml
http-server:
port: 8082
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
default-schema: ${PS_SCHEMA:demo_dev}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
swagger:
file-path: sample.yaml
#Map operationId -> templatefile
templates:
execquery_get: sample.peb
execquery_post: sample.peb
execquery_get_params: sample.peb
execquery_post_params: sample.peb
metrics:
port: ${METRICS_PORT:9837}
vertx:
web-client:
max-pool-size: 20
# Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
2.2.17.2. Параметры конфигурации
Настройка конфигурации REST-адаптера осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- порт сервера;prostore-rest-client- блок параметров конфигурирования взаимодействия с Prostore;swagger- пример файла конфигурации конечных точек;metrics- настраивается получение метрик;vertx- настраиваются значения вертиклов;spf- Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.
2.2.17.2.1. Секция http-server
Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http-server:
port: 8082
Параметры настроек
port- порт веб-сервера, например:8082.
2.2.17.2.2. Секция prostore-rest-client
В секции prostore-rest-client настраиваются параметры конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.17.2.3. Секция swagger
В секции swagger приведен пример файла конфигурации конечных точек.
Например:
swagger:
file-path: sample.yaml
#Map operationId -> templatefile
templates:
execquery_get: sample.peb
execquery_post: sample.peb
execquery_get_params: sample.peb
execquery_post_params: sample.peb
Параметры настроек
file-path- пример файла конфигурации конечных точек;templates- шаблоны парсинга и обогащения запросов.
2.2.17.2.4. Секция metrics
В секции metrics настраиваются параметры метрик.
Например:
metrics:
port: ${METRICS_PORT:9837
Параметры конфигурации
port- порт для получения метрик, например9837.
2.2.17.2.5. Секция spf
В секции spf указываются (при использовании функции toSpf) параметры подключения к сервису печатных форм.
Например:
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
Параметры настроек
host- адрес Сервиса печатных форм, напримерSPF_HOST:localhost;port- порт Сервиса печатных форм, напримерSPF_PORT:8080;params- Дополнительные параметры (ключ-значения сертификатов, необходимых для сервиса ПФ).
2.2.17.3. Kонфигурационный файл с конечными точками
Для доступа к конечным точкам отредактируйте файл sample.yaml, описав все необходимые API в соответствии с
приведенным в файле шаблоном (шаблон соответствует спецификации OpenAPI 3.0 https://swagger.io/specification/ ).
Пример файла sample.yaml со всеми конфигурируемыми атрибутами:
openapi: 3.0.0
info:
title: Sample API
version: 0.1.9
servers:
- url: /
paths:
/test/query:
get:
summary: Returns some value
operationId: execquery_get
responses:
'200': # status code
description: A JSON array of user names
content:
application/json:
schema:
type: string
post:
summary: Returns some value
operationId: execquery_post
responses:
'200': # status code
description: A JSON array of user names
content:
application/json:
schema:
type: string
/test/query/{id}:
post:
summary: Returns some value
operationId: execquery_post_params
parameters:
- name: id
in: path
required: true
schema:
type: string
format: utf8
responses:
'200': # status code
description: A JSON array of user names
content:
application/json:
schema:
type: string
get:
summary: Returns some value
operationId: execquery_get_params
parameters:
- name: id
in: path
required: true
schema:
type: string
format: utf8
responses:
'200': # status code
description: A JSON array of user names
content:
application/json:
schema:
type: string
Секция servers
url: /- корневой путь сервера.
Секция: paths
/test/query- путь запроса;get- тип запроса (get,postи т.д.);operationId- определениеoperationIdдля связки с файлом шаблона;responses- описание параметров ответа.
2.2.17.4. Шаблоны
Для парсинга и обогащения запросов используются шаблоны.
В качестве языка шаблонов используется pebble с дополнениями:
функция
xpath(expression)- возвращает вычисленное выражение на входящем документе;тэг
{% mtom %} some content {% endmtom %}- отправляет внутренность вложением;функция
sql(var, sql, param1, param2, ...)- выполняет sql-запрос с параметрами, результат записывается в переменнуюvar.
Пример формирования шаблона приведен в файле sample.peb.
{% var restrictionsquery %}
{% if id is empty %}
select * from passenger
{% else %}
select * from passenger where passenger.id = '{{ id }}'
{% endif %}
{% endvar %}
{{ sql("searchingpassenger", restrictionsquery) }}
{% for ts in rows.searchingpassenger %}
id = {{ ts.id }} and name = {{ ts.firstname }}
{% endfor %}
2.2.18. Настройка Counter-provider - Сервиса генерации уникального номера
2.2.18.1. Конфигурация модуля Counter-Provider (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы сервиса:
среда разработки;
настройка счетчика;
настройка подключения к Zookeeper, а также другие настройки необходимые для корректной работы сервиса.
2.2.18.2. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
environment:
name: ${ENVIRONMENT_NAME:test}
http-server:
port: ${HTTP_PORT:9000}
counter:
start-number: ${COUNTER_START_NUMBER:1}
retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
reset-period: ${COUNTER_RESET_PERIOD:}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
backup:
zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
metrics:
port: ${METRICS_PORT:9837}
2.2.18.3. Параметры конфигурации
Настройка конфигурации Сервиса генерации уникального номера осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
environment- указывается среда разработки;http-server- указывается порт веб-сервера;counter- указываются настройки счетчика;zookeeper- определяет настройки подключения к Zookeeper;migration- настройки миграции;backup- настройки бекапирования;metrics- настройка порта для получения метрик.
2.2.18.3.1. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.18.3.2. Секция http-server
В секции http указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:9000}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:9000.
2.2.18.3.3. Секция counter
В секции counter можно настраивать начальный номер счетчика, а также количество попыток записи счетчика после ошибки
обновления.
Например:
counter:
start-number: ${COUNTER_START_NUMBER:1}
retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
reset-period: ${COUNTER_RESET_PERIOD:}
Параметры настроек
start-number- начальный номер счетчика, напримерCOUNTER_START_NUMBER:1;retry-after-failure- количество попыток записи счетчика после ошибки обновления, напримерCOUNTER_RETRY_AFTER_FAILURE:3;update-timeout- таймаут обновления счетчика, напримерCOUNTER_UPDATE_TIMEOUT:;reset-period- период сброса счетчика, напримерCOUNTER_RESET_PERIOD:.
2.2.18.3.4. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- Подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.18.3.5. Секция migration
В секции migration настраиваются миграции Zookeeper для задачи бекапирования.
Например:
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false};old-connection-string- адрес Zookeeper, например{OLD_ZOOKEEPER_DS_ADDRESS:localhost}.
2.2.18.3.6. Секция backup
В секции backup настраивается бекапирования модуля.
Например:
backup:
zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
Параметры настроек
zk-path- путь к корневой ноде zookeeper для бэкапирования, например{COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};commandTopic- топик команд бэкапирования, например:{BACKUP_COMMAND_TOPIC:adapter.command};backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.18.3.7. Секция metrics
В секции metrics настраивается порт получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- Порт для получения метрик, например{METRICS_PORT:9837}.
2.2.19. Настройка утилиты Backup manager
2.2.19.1. Конфигурация утилиты Backup manager (application.yml)
Файл application.yml – основной конфигурационный файл утилиты, в котором задана её логика и порядок работы:
В конфигурации утилиты сохранены:
путь к DTM-tools и параметры необходимые для работы утилиты DTM-tools:
маска топиков для бекапирования данных СУБД backend.backup.(datamart);
адрес Prostore (с переопределением через команду запуска);
адрес Kafka и имена топиков для:
передачи команд модулям адаптера;
получения статусов модулей адаптера;
бекапирования данных бекенда Витрины;
бекапирования данных модулей адаптеров;
путь к рабочей директории резервного копирования (доступный файловому коннектору) с переопределением через команду запуска;
хранимый объем топика (значение по умолчанию 1Тб);
время хранения топиков бекапа (значение по умолчанию 3 суток).
2.2.19.2. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
logging:
level:
org.springframework: OFF
org.apache: OFF
ru.itone.dtm.BackupApplicationKt: OFF
spring:
main:
banner-mode: OFF
config:
dtmToolsPath: ${BM_DTM_TOOLS_PATH:./}
prostorePath: ${BM_PROSTORE_PATH:localhost:9094}
kafkaBrokers: ${BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092}
backupDir: ${BM_BACKUP_DIR:./backup}
backupArchive: ${BM_BACKUP_ARCHIVE:./backup.zip}
adapterBackupTimeout: ${BM_ADAPTER_BACKUP_TIMEOUT:1}
topic:
adapterCommand: ${BM_ADAPTER_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
adapterStatus: ${BM_ADAPTER_STATUS_TOPIC:adapter.status}
adapterBackup: ${BM_ADAPTER_BACKUP_TOPIC:adapter.backup}
backendBackupPrefix: ${BM_BACKEND_BACKUP_TOPIC_PREF:backend.backup.}
backendBackupRetentionBytes: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_BYTES:1000000000000}
backendBackupRetentionMs: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_MS:259200000}
initializationStatusTimeout: ${BM_MODULES_WAIT_INIT_TIMEOUT:15}
executionStatusTimeout: ${BM_MODULES_WAIT_EXECUTE_TIMEOUT:120}
2.2.19.3. Параметры конфигурации
Настройка конфигурации Backup manager осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
logging- настраивается логирование работы модуля;spring- настройки фреймворка Spring;config- указываются настройки утилиты.
2.2.19.3.1. Секция logging
В секции logging настраивается логирование работы модуля
Например:
logging:
level:
org.springframework: OFF
org.apache: OFF
ru.itone.dtm.BackupApplicationKt: OFF
Параметры настроек
org.springframework- логирование фреймворка Spring, напримерOFF;org.apache- логирование Apache, напримерOFF;ru.itone.dtm.BackupApplicationKt- логирование утилиты, напримерOFF.
2.2.19.3.2. Секция spring
В секции spring указываются настройки фреймворка Spring.
Например:
spring:
main:
banner-mode: OFF
Параметры настроек
banner-mode- режим баннера, например:OFF.
2.2.19.3.3. Секция config
В секции config указываются настройки утилиты.
Например:
config:
dtmToolsPath: ${BM_DTM_TOOLS_PATH:./}
prostorePath: ${BM_PROSTORE_PATH:localhost:9094}
kafkaBrokers: ${BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092}
backupDir: ${BM_BACKUP_DIR:./backup}
backupArchive: ${BM_BACKUP_ARCHIVE:./backup.zip}
adapterBackupTimeout: ${BM_ADAPTER_BACKUP_TIMEOUT:1}
topic:
adapterCommand: ${BM_ADAPTER_COMMAND_TOPIC:adapter.command}
adapterCommandBroadcast: ${BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
adapterStatus: ${BM_ADAPTER_STATUS_TOPIC:adapter.status}
adapterBackup: ${BM_ADAPTER_BACKUP_TOPIC:adapter.backup}
backendBackupPrefix: ${BM_BACKEND_BACKUP_TOPIC_PREF:backend.backup.}
backendBackupRetentionBytes: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_BYTES:1000000000000}
backendBackupRetentionMs: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_MS:259200000}
initializationStatusTimeout: ${BM_MODULES_WAIT_INIT_TIMEOUT:15}
executionStatusTimeout: ${BM_MODULES_WAIT_EXECUTE_TIMEOUT:120}
Параметры настроек
dtmToolsPath- адрес dtmTools, например:BM_DTM_TOOLS_PATH:./;prostorePath- адрес Prostore, например:BM_PROSTORE_PATH:localhost:9094;kafkaBrokers- адрес брокеров Kafka, например:BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092;backupDir- директория хранения файла бэкапа, например:BM_BACKUP_DIR:./backup;backupArchive- архив бэкапа, например:BM_BACKUP_ARCHIVE:./backup.zip;adapterBackupTimeout- тайм-аут резервного копирования, например:BM_ADAPTER_BACKUP_TIMEOUT:1;topic- имена топиков, например:adapterCommandBroadcast- передачи команд модулям адаптера, например:BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast;adapterStatus- получения статусов модулей адаптера, например:BM_ADAPTER_STATUS_TOPIC:adapter.status;aadapterBackup- бекапирования данных модулей адаптеров, например:BM_ADAPTER_BACKUP_TOPIC:adapter.backup;
2.2.20. Настройка Arenadata Cluster Manager (ADCM)
Подробная инструкция по настройке Arenadata Cluster Manager (ADCM) приведена в официальной документации разработчика на странице https://docs.arenadata.io/adcm/.
2.2.21. Настройка Arenadata Streaming (ADS)
Инструкция по настройке Arenadata Streaming (ADS) через Arenadata Cluster Manager (ADCM) приведена в официальной документации к Arenadata Cluster Manager (ADCM) на странице https://docs.arenadata.io/ads/AdminGuide/Config_ADCM.html.
2.2.22. Настройка сервиса журналирования
Сервис журналирования позволяет работать с логами прикладных модулей запущенных в средах WildFly и Kubernetes/OpenShift.
Настройка сервиса журналирования должна быть применена к каждому модулю.
Ниже приведены шаги по настройке сервиса журналирования.
Добавьте зависимости в проект:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>logger-test</artifactId>
<properties>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-json-classic</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.5.9.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Подключите FluentBit к приложению как отдельный контейнер в OpenShift:
containers:
- name: fluent-bit
image: fluent/fluent-bit:latest
volumeMounts: #перенос конфигураций, и лог файла из проекта в контейнер
- name: logger
mountPath: /fluent-bit/logger/
- name: fluent-bit-config
mountPath: /fluent-bit/etc/
terminationMessagePolicy: File
envFrom:
- configMapRef:
name: logger-fluent-bit-config-env
Создайте файл
logback.xmlдля логирования приложения ( подробнее см. документацию):
Внимание
Обязательно в appender FILE_FLUENT прописать путь до конфигураций FluentBit, иначе в контейнер логи не подтянутся. Например, <file>name-project/docker/fluentbit/conf/log.log</file>.
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<Pattern>
%d{yyyy-MM-dd HH:mm:ss}%-5level %logger{36} - %msg%n
</Pattern>
</pattern>
</layout>
</appender>
<appender name="FILE_FLUENT" class="ch.qos.logback.core.FileAppender">
<file>docker/fluentbit/conf/log.log</file>
<append>false</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<Pattern>
x-b3-traceid=%X{X-B3-TraceId:-} x-b3-spanid=%X{X-B3-SpanId:-} x-b3-parentspanid=%X{X-B3-ParentSpanId:-} x-b3-sampled=%X{X-B3-Sampled:-} x-b3-flags=%X{X-B3-Flags:-} caller_file_name=%file serverEventDatetime="%d" logLevel=%level threadName=%thread message="%replace(%replace(%m){'\n','\u2028'}){'\"','\''}" exception="%replace(%replace(%ex){'\"','\u2028'}){'\n','\u2028'}%nopex" callerLine=%L callerMethod="%replace(%caller){'\n','\u2028'}" loggerName="%10.10logger" callerClass=%logger{40} levelStr="%level" levelInt="%level" mdc= \n
</Pattern>
</pattern>
</layout>
</appender>
<root level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_FLUENT"/>
</root>
</configuration>
Добавьте описание конфигурации для FluentBit (подробнее см документацию ):
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File /fluent-bit/etc/parsers.conf
[INPUT]
Name tail
Path /fluent-bit/logger/log.log
Tag kafka-efs
Buffer_Chunk_Size 400k
Buffer_Max_Size 6MB
Mem_Buf_Limit 6MB
Parser logfmt
Refresh_Interval 20
[FILTER]
Name record_modifier
Match kafka-efs
Record subsystem ${SUBSYSTEM}
Record distribVersion ${DISTRIBVERSION}
Record deploymentUnit ${DEPLOYMENTUNIT}
Record hostName ${HOSTNAME}
Record ipAddress ${IPADDRESS}
[FILTER]
Name modify
Match kafka-efs
Hard_copy callerClass className
[FILTER]
Name record_modifier
Match kafka-efs
Whitelist_key serverEventDatetime
Whitelist_key subsystem
Whitelist_key distribVersion
Whitelist_key deploymentUnit
Whitelist_key hostName
Whitelist_key ipAddress
Whitelist_key logLevel
Whitelist_key className
Whitelist_key threadName
Whitelist_key message
Whitelist_key x-b3-traceid
Whitelist_key x-b3-spanid
[FILTER]
Name lua
Match kafka-efs
script convert_date.lua
call convert_date_efs
[OUTPUT]
Name stdout
Match kafka-efs
Format json
json_date_key time
[OUTPUT]
Name http
Match kafka-efs
Host logstash-service-gt-tatarstan-test-efs.apps.ocp-public.sbercloud.ru
Port 80
Format json
json_date_key time
Для правильной работы подключите parsers.conf.
[PARSER]
Name logfmt
Format logfmt
Настройте форматирование даты:
function convert_date_efs(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["serverEventDatetime"] = ts
return 2, timestamp, record
end
function convert_date_pprb(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["timestamp"] = ts
return 2, timestamp, record
end
function convert_date_logstash(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["time"] = ts
return 2, timestamp, record
end
Добавьте параметры модуля:
kind: ConfigMap
apiVersion: v1
metadata:
name: logger-fluent-bit-config-env
data:
MODULEID: 1.0.0
MODULEVERSION: 1.0.0
NODEID: 12345
HOSTADDRESS: 0.0.0.0
SUBSYSTEM: LOGGER-TEST
DISTRIBVERSION: 1.0.0
DEPLOYMENTUNIT: TEST-UNIT
IPADDRESS: 0.0.0.1
Настройте конфигурацию для OpenShift. Для того, чтобы Prometheus мог идентифицировать сервис и собирать с него информацию, создайте Service и укажите путь, на котором располагаются метрики приложения.
apiVersion: v1
kind: Service
metadata:
name: monitoring-rest
annotations:
description: 'Exposes Prometheus App by CLuster Ip'
prometheus.io.scrape: 'true'
prometheus.io.path: '/monitoring-rest/actuator/prometheus'
prometheus.io.port: '8081'
labels:
app: monitoring-rest
spec:
type: LoadBalancer
ports:
- name: http
port: 9837
targetPort: 9837
selector:
app: monitoring-rest
2.2.23. Установка компонента сбора данных запросов и ответов Витрины данных
Компонент сбора данных запросов и ответов Витрины данных реализован с целью проведения бизнес-мониторинга ИЭП процессов обработки запросов типовым ПО витрины данных, как в целом, так и в части функционирования отдельных витрин для последующей передачи данных в СЦЛ.
2.2.23.1. Процесс установки
Общий процесс установки состоит из следующих действий:
Настройка логирования модулей.
Установка и настройка Vector.
Установка и настройка HaProxy.
Установка и настройка fluentbit.
2.2.23.1.1. Настройка логирования модулей
Необходимо настроить формирование логов в формате JSON на стороне модулей:
ПОДД-адаптер - Модуль исполнения запросов;
ПОДД-адаптер – Модуль MPPR;
BLOB-адаптер;
ПОДД-адаптер-Модуль подписок;
Сервис формирования документов
Для этого в файле logback.xml включите параметр net.logstash.logback.encoder.LogstashEncoder.
Пример logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Подробная информация об encoder: https://github.com/logfellow/logstash-logback-encoder
Чтобы включить генерацию СЦЛ в секции logging файлa настроек application.yaml установите значения true.
2.2.23.1.2. Установка и настройка Vector
Установка производится по официальной документации: https://vector.dev/docs/setup/installation/
Пример настройки source:
json_source:
type: fluent
address: 0.0.0.0:24226
Пример фильтрации сообщений, имеющих флаг scl:
scl_tags_filter:
type: filter
inputs:
- json_source
condition:
type: "vrl"
source: |-
exists(.tags) && includes(array!(.tags), "TYPE_SCL")
Пример парсинга scl-сообщений:
scl_message_remap:
type: remap
inputs:
- scl_tags_filter
source: |-
. = parse_json!(.message)
Пример отправки scl-сообщений в Kafka:
podd_agent_sink:
type: kafka
inputs:
- scl_message_remap
bootstrap_servers: kafka:9092
topic: "<префикс>.scl.signal"
acknowledgements: true
compression: "gzip"
encoding:
codec: json
healthcheck: true
2.2.23.1.3. Установка и настройка HaProxy
Установка производится по официальной документации: http://docs.haproxy.org/
Для настройки HaProxy в секции backend перечислите список установленных инстансов Vector.
Пример файла haproxy.cfg:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
retries 3
maxconn 3000
listen stats
bind 0.0.0.0:1936
mode http
stats enable
stats uri /
frontend services
bind 0.0.0.0:24226
default_backend services
mode tcp
backend services
balance roundrobin
mode tcp
server vector01 vector-01:24226
server vector02 vector-02:24226
2.2.23.1.4. Установка и настройка Fluent bit
Установка производится по официальной документации: (https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit).
Fluent bit должен быть настроен на чтение файлов логов приложений.
Пример файла конфигурации fluent-bit.conf:
[SERVICE]
flush 5
daemon off
log_level info
parsers_file parsers.conf
[INPUT]
name tail
path <путь до лог файла приложения>
tag *
parser json
[OUTPUT]
name forward
match *
host haproxy
port 24226
Пример файла parsers.conf:
[PARSER]
Name json
Format json
На этом настройка fluentbit завершена.
2.2.23.1.5. Работа с БД ClickHouse
В рамках технического решения по хранению протоколируемых запросов и ответов с возможностью извлечение данных по уникальному идентификатору реализовано использование колоночной аналитической базы данных ClickHouse.
Ключевые функциональные особенности базы данных ClickHouse:
движок базы данных: по умолчанию ClickHouse использует движок Atomic;
движок таблиц: MergeTree;
версия ClickHouse: LTS;
запрос на создание таблицы хранения логов в ClickHouse: CREATE TABLE.
Пример создания таблицы:
CREATE TABLE {Название БД}.logs
(
logger String,
timestamp DateTime,
level String,
requestId String,
message String,
messageType String,
customerId String,
customerOgrn String,
queryMnemonic String
)
ENGINE = MergeTree()
PARTITION BY timestamp
ORDER BY timestamp
SETTINGS index_granularity = 8192;
Пример задания конфигурационных настроек:
clickhouse_default_config:
clickhouse:
logger:
level: trace
log: /var/log/clickhouse-server/clickhouse-server.log
errorlog: /var/log/clickhouse-server/clickhouse-server.err.log
size: 1000M
count: 10
http_port: 8123
tcp_port: 9000
listen_host: 0.0.0.0
max_connections: 4096
keep_alive_timeout: 3
user_directories:
users_xml:
path: users.xml
local_directory:
path: "{{ clickhouse_root_data_folder }}/access/"
path: "{{ clickhouse_root_data_folder | add_slash }}"
2.2.23.1.6. Включение / выключение отправки сообщений в СЦЛ
Отправка логов в СЦЛ осуществляется автоматически после корректной настройки компонента.
Для выключения отправки логов закомментируйте блок отправки сообщений podd_agent_sink в Kafka в настройках Vector.
2.2.24. Настройка Агента СМЭВ4
Порядок установки и описание настроек Агента СМЭВ4 см. в документе: «Руководство администратора СМЭВ4».
Описание формата взаимодействия между Агентом ПОДД и ПОДД-адаптером (название топиков, формат сообщений, схема взаимодействия) описан в разделе Спецификация Модуля исполнения запросов.
2.2.24.1. Настройка взаимодействия программы с Агентом СМЭВ4
После установки программы и Агента СМЭВ4 настройте их взаимодействие между собой. Для этого:
Настройте Агента СМЭВ4 и ПОДД-адаптер на работу с одним и тем же брокером сообщения Kafka:
Если вместе с Агентом СМЭВ4 устанавливается брокер сообщений Kafka, а Агент СМЭВ4 преднастроен на работу именно с этим экземпляром брокера сообщений, то укажите адрес этого брокера сообщений в конфигурационном файле ПОДД-адаптера (
application.yml), параметрkafkaUrl.Если вместе с Агентом СМЭВ4 не устанавливается брокер сообщений Kafka, то в Агенте СМЭВ4 согласно его документации настройте работу с брокером сообщений Kafka, установленным с программой. Для этого используйте адрес сервера Kafka из конфигурационного файла ПОДД-адаптера (
application.yml), параметрkafkaUrl.
Настройте названия топиков (см.
tab_topic_name) для обмена сообщениями в конфигурационном файле ПОДД-адаптера (application.yml).
№ |
Назначение |
Настройка |
Значение по умолчанию |
|---|---|---|---|
1 |
Получение запросов |
|
|
2 |
Ответы на запросы |
|
|
3 |
Ошибки запросов |
|
|
4 |
Результат запроса оценки |
|
|
Формат обмена электронными сообщениями с ПОДД-адаптером описан в разделе Спецификация Модуля исполнения запросов.
2.3. Настройка сервиса мониторинга
Для мониторинга состояния работы Типового ПО «Витрина данных» используется связка Grafana + Prometheus.
Prometheus — система мониторинга, обладающая возможностями тонкой настройки метрик. Prometheus используется для отслеживания состояния работы компонентов системы на низком уровне.
Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Grafana используется для представления в графическом виде временных рядов и текстовых данных.
Примечание
Описание установки системы мониторинга приведено в разделе Установка системы мониторинга документа «Руководство по установке Типового ПО «Витрина данных»».
2.3.1. Предоставление источника данных
Существует два способа предоставления источника данных:
с помощью конфигурационного файла;
с помощью интерфейса Grafana.
Каждый файл конфигурации предоставления источника данных содержит манифест, в котором указывается желаемое состояние набора подготовленных источников данных.
При запуске Grafana загружает файлы конфигурации и предоставляет источники данных, перечисленные в манифестах.
Ниже приведен пример настройки источника данных TestData , который можно использовать для информационных панелей.
В директории
provisioning/datasources/создайте файлdtm.ymlсо следующим содержимым:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: <ip:port>
jsonData:
httpMethod: POST
manageAlerts: false
prometheusType: Prometheus
Перезапустите Grafana, чтобы загрузить новые изменения.
На боковой панели наведите курсор на значок « Конфигурация» (шестеренка) и нажмите «Источники данных». TestData появится в списке источников данных.
Примечание
Папка
provisioning/datasources/находится в/etc/grafana/.
Для работы Prometheus с Grafana необходимо добавить Prometheus в качестве источника получения данных в Grafana.
Откройте Grafana — Configuration — Data sources, нажмите Add data source и выберите Prometheus.
Рисунок - 2.13 Выбор Prometheus в качестве источника получения данных
В поле URL введите адрес и порт, по которому доступен Prometheus.
Рисунок - 2.14 Ввод URL Prometheus
Внизу страницы нажмите кнопку Save & test
Рисунок - 2.15 Применение настроек
После успешной проверки Prometheus будет добавлен в Grafana.
2.3.2. Предоставление информационной панели
Определить поставщика информационных панелей можно также двумя способами:
с помощью конфигурационного файла;
с помощью интерфейса Grafana.
Каждый файл конфигурации информационной панели содержит манифест, который определяет желаемое состояние набора поставщиков информационной панели.
Поставщик информационной панели сообщает Grafana, где найти и где разместить определения информационной панели.
Grafana регулярно проверяет изменения в определениях панели мониторинга (по умолчанию каждые 10 секунд).
В директории provisioning/dashboards/ создайте файл dtm.yml со следующим содержимым:
apiVersion: 1
providers:
- name: 'DTM Metrics' # Уникальное идентифицируемое имя поставщика
folder: 'dtm-metrics' # Папка, в которую помещаются дашборды
type: file
disableDeletion: false
updateIntervalSeconds: 10
allowUiUpdates: false
options:
path: <path to dashboard definitions>
foldersFromFilesStructure: false
Примечание
Папка provisioning/dashboards/ находится в /etc/grafana/.
2.3.2.1. Настройка конфигурационного файла Prometheus
Пример конфигурационного файла prometheus.yml:
global:
scrape_timeout: 5s
scrape_interval: 5s
scrape_configs:
- job_name: 'smevql-server'
static_configs:
- targets: ['ip:8080']
- job_name: 'blob-adapter'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'counter-provider'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'csv-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'data-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-group-repl'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-group-tp'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-import-tp'
static_configs:
- targets: ['ip:19843']
- job_name: 'podd-adapter-mppr'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-mppw'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-query'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-replicator'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-avro-defragmentator'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'printable-form-service'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'rest-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'smev3-adapter'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9033']