2. Настройка программы
2.1. Настройка на состав технических средств
Серверы, на которых будет установлена Программа, должны соответствовать техническим характеристикам указанным в документе «Техническое описание системы» раздел «Рекомендуемые технические и программные средства», в котором приводится информация о требованиях к серверному оборудованию (CPU, RAM, HDD и т.д.), программному обеспечению и требования к каналам связи.
Необходимые настройки для серверов описаны в документе «Руководство по установке», в котором приводится информация об общих требованиях к серверам, требуемой доступности портов для каждого сервера, настройка протоколов, наличие библиотек и т.д.
2.2. Настройка на состав программных средств
Все предварительные действия необходимые перед установкой программы, процесс установки и проверка корректной установки программы описан в документе «Руководство по установке».
2.2.1. Настройка ProStore
2.2.1.1. Настройка Сервиса исполнения запросов (query-execution)
2.2.1.1.1. Пример файла application.yml
Файл application.yml – основной конфигурационный файл, в котором задана логика и порядок работы Сервиса исполнения запросов (query-execution). Для первоначальной установки используйте значения «по умолчанию».
Пример файла application.yml со всеми конфигурируемыми атрибутами, приведен ниже:
logging:
level:
io.arenadata.dtm.query.execution: ${WRITER_LOG_LEVEL:INFO}
org.apache.kafka.clients: ERROR
management:
server:
port: ${DTM_METRICS_PORT:8080}
endpoints:
enabled-by-default: true
web:
exposure:
include: info, health, requests
core:
plugins:
active: ${CORE_PLUGINS_ACTIVE:ADG, ADB, ADQM, ADP}
http:
port: ${DTM_CORE_HTTP_PORT:9090}
tcpNoDelay: ${DTM_CORE_HTTP_TCP_NO_DELAY:true}
tcpFastOpen: ${DTM_CORE_HTTP_TCP_FAST_OPEN:true}
tcpQuickAck: ${DTM_CORE_HTTP_TCP_QUICK_ACK:true}
env:
name: ${DTM_NAME:test}
settings:
timeZone: ${CORE_TIME_ZONE:UTC}
metrics:
isEnabled: ${DTM_CORE_METRICS_ENABLED:true}
datasource:
edml:
sourceType: ${EDML_DATASOURCE:ADG}
defaultChunkSize: ${EDML_DEFAULT_CHUNK_SIZE:1000}
pluginStatusCheckPeriodMs: ${EDML_STATUS_CHECK_PERIOD_MS:3000}
firstOffsetTimeoutMs: ${EDML_FIRST_OFFSET_TIMEOUT_MS:15000}
changeOffsetTimeoutMs: ${EDML_CHANGE_OFFSET_TIMEOUT_MS:10000}
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:/adtm}
kafka:
producer:
property:
key.serializer: org.apache.kafka.common.serialization.StringSerializer
value.serializer: org.apache.kafka.common.serialization.StringSerializer
cluster:
zookeeper:
connection-string: ${ZOOKEEPER_KAFKA_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_KAFKA_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_KAFKA_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_KAFKA_CHROOT:}
admin:
inputStreamTimeoutMs: ${KAFKA_INPUT_STREAM_TIMEOUT_MS:2000}
status.event.publish:
enabled: true
topic: status.event
statusMonitorUrl: ${STATUS_MONITOR_URL:http://localhost:9095/status}
cache:
initialCapacity: ${CACHE_INITIAL_CAPACITY:100000}
maximumSize: ${CACHE_MAXIMUM_SIZE:100000}
expireAfterAccessMinutes: ${CACHE_EXPIRE_AFTER_ACCESS_MINUTES:99960}
adb:
datasource:
user: ${ADB_USERNAME:gpadmin}
password: ${ADB_PASS:gpadmin}
host: ${ADB_HOST:localhost}
port: ${ADB_PORT:5432}
maxSize: 20
fetchSize: ${ADB_FETCH_SIZE:1000}
mppw:
consumerGroup: ${ADB_LOAD_GROUP:adb-emulator-load-adb}
poolSize: ${ADB_MPPW_POOL_SIZE:2}
stopTimeoutMs: ${ADB_MPPW_STOP_TIMEOUT_MS:86400000}
defaultMessageLimit: ${ADB_MPPW_DEFAULT_MESSAGE_LIMIT:100}
fdwTimeoutMs: ${ADB_MPPW_FDW_TIMEOUT_MS:1000}
adg:
tarantool:
db:
host: ${TARANTOOL_DB_HOST:localhost}
port: ${TARANTOOL_DB_PORT:3301}
user: ${TARANTOOL_DB_USER:admin}
password: ${TARANTOOL_DB_PASS:memstorage-cluster-cookie}
operationTimeout: ${TARANTOOL_DB_OPER_TIMEOUT:60000}
engine: ${TARANTOOL_DEFAULT_ENGINE:MEMTX}
cartridge:
url: ${TARANTOOL_CATRIDGE_URL:http://localhost:8081}
mppw:
consumerGroup: ${ADG_CONSUMER_GROUP:tarantool-group-csv}
kafka:
maxNumberOfMessagesPerPartition: 200
callbackFunctionSecIdle: 100
rollback:
eraseOperationBatchSize: 300
circuitbreaker:
maxFailures: 5
timeout: 30000
fallbackOnFailure: false
resetTimeout: 10000
web-client:
max-pool-size: ${ADG_WEB_CLIENT_MAX_POOL_SIZE:100}
adqm:
datasource:
database: ${ADQM_DB_NAME:test1}
user: ${ADQM_USERNAME:default}
password: ${ADQM_PASS:}
hosts: ${ADQM_HOSTS:localhost:8123}
socketTimeout: ${ADQM_SOCKET_TIMEOUT:30000}
dataTransferTimeout: ${ADQM_DATA_TRANSFER_TIMEOUT:10000}
ddl:
cluster: ${ADQM_CLUSTER:cluster}
ttlSec: ${ADQM_TTL_SEC:3600}
archiveDisk: ${ADQM_ARCHIVE_DISK:default}
mppr:
host: ${ADQM_MPPR_CONNECTOR_HOST:localhost}
port: ${ADQM_MPPR_CONNECTOR_PORT:8086}
url: ${ADQM_MPPR_CONNECTOR_URL:/query}
mppw:
consumerGroup: ${ADQM_CONSUMER_GROUP:adqm}
kafkaBrokers: ${ADQM_BROKERS:localhost:9092}
loadType: ${ADQM_MPPW_LOAD_TYPE:REST}
restStartLoadUrl: ${ADQM_REST_START_LOAD_URL:http://localhost:8090/newdata/start}
restStopLoadUrl: ${ADQM_REST_STOP_LOAD_URL:http://localhost:8090/newdata/stop}
restLoadConsumerGroup: ${ADQM_REST_LOAD_GROUP:adb-emulator-load-adqm}
web-client:
max-pool-size: ${ADQM_WEB_CLIENT_MAX_POOL_SIZE:100}
Настройка ProStore:
DTM_CORE_PLUGINS_ANALYTICAL- настройка профилей приоритетности СУБД для запросов аналитики;DTM_CORE_PLUGINS_DICTIONARY- настройка профилей приоритетности СУБД для запросов ключ-значение;DTM_CORE_PLUGINS_UNDEFINED- настройка профилей приоритетности СУБД для не указанной категории запросов;DTM_CORE_HTTP_PORT- номер порта, на который Сервис исполнения запросов ожидает входящие запросы от JDBC-драйвера;DTM_NAME- имя среды для формирования полного наименования датамартов;CORE_TIME_ZONE- настройки временной зоны;DTM_CORE_METRICS_ENABLED- настройки генерации метрики Сервиса исполнения запросов;DTM_CORE_TASK_POOL_SIZE- максимальный объем пула задач в Cервисе исполнения запросов;DTM_CORE_TASK_TIMEOUT- интервал времени завершения задачи, выполняемой в Сервисе исполнения запросов.
Оптимизация работы сокета
TCP_NODELAY:
DTM_CORE_HTTP_TCP_NODELAY- настройка режима оптимизации работы сокетаTCP_NODELAY;DTM_CORE_HTTP_TCP_FAST_OPEN- настройка режимаTCP FAST_OPEN;DTM_CORE_HTTP_TCP_QUICK_ACK- настройка режима оптимизации работы сокетаTCP_QUICKACK.
Настройки для
EDMLоператоров:
EDML_DATASOURCE- тип СУБД-источника;EDML_DEFAULT_CHUNK_SIZE– размерchunkпо умолчанию;EDML_STATUS_CHECK_PERIOD_MS- период проверки статуса плагина в миллисекундах;EDML_FIRST_OFFSET_TIMEOUT_MS- интервал времени ожидания до таймаута в миллисекундах при работе с первым смещением;EDML_CHANGE_OFFSET_TIMEOUT_MS- интервал времени ожидания до таймаута в миллисекундах при работе с первым смещением в топике Kafka.
Настройка Zookeeper-серверов:
ZOOKEEPER_DS_ADDRESS- сетевой адрес хоста Zookeeper для служебной БД;ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS- интервал времени ожидания (в миллисекундах) соединения с хостом Zookeeper для служебной БД до достижения таймаута;ZOOKEEPER_DS_SESSION_TIMEOUT_MS- интервал времени бездействия (в миллисекундах) соединения с хостом Zookeeper для служебной БД до достижения таймаута;ZOOKEEPER_DS_CHROOT- корневой путь к хосту Zookeeper для служебной БД;ZOOKEEPER_KAFKA_ADDRESS- сетевой адрес хоста Zookeeper для брокера сообщений Kafka;ZOOKEEPER_KAFKA_CONNECTION_TIMEOUT_MS- интервал времени ожидания (в миллисекундах) соединения с хостом Zookeeper для брокера сообщений Kafka до достижения таймаута;ZOOKEEPER_KAFKA_SESSION_TIMEOUT_MS- интервал времени бездействия (в миллисекундах) соединения с хостом Zookeeper для брокера сообщений Kafka до достижения таймаута;ZOOKEEPER_KAFKA_CHROOT- корневой путь к хосту Zookeeper для брокера сообщений Kafka.
Настройка Kafka-серверов:
KAFKA_INPUT_STREAM_TIMEOUT_MS– интервал времени ожидания (в миллисекундах) входного потока данных для брокера сообщений Kafka до достижения таймаута;KAFKA_STATUS_EVENT_ENABLED- разрешение на публикацию событий;KAFKA_STATUS_EVENT_TOPIC- наименование топика Kafka, в который публикуются события;STATUS_MONITOR_URL- сетевой адрес, порт и путь к Сервису мониторинга статусов Kafka.
Настройки кэширования запросов:
CACHE_INITIAL_CAPACITY- первоначальный размер кэша;CACHE_MAXIMUM_SIZE- максимальный размер кэша;CACHE_EXPIRE_AFTER_ACCESS_MINUTES- время (в минутах) устаревания кэша после последнего обращения к нему.
2.2.1.2. Настройка Сервиса мониторинга Kafka (status-monitor)
Настройка Сервиса мониторинга статусов Kafka осуществляется путём указания в соответствующем конфигурационном yml-файле параметров отслеживания файлов-топиков брокера сообщений Kafka, таких как:
смещение
consumer;содержание последнего сообщения;
время появления последнего сообщения.
Ниже, представлен пример application.yml для status-monitor с конфигурируемыми атрибутами.
2.2.1.2.1. Пример файла application.yml для status-monitor
monitor:
brokersList: ${STATUS_MONITOR_BROKERS:localhost:9092}
consumersCount: ${STATUS_MONITOR_CONSUMERS:8}
prometheus:
enabled: ${PROMETHEUS_ENABLED:true}
где,
STATUS_MONITOR_BROKERS- сетевые адреса и порты брокеров сообщений Kafka, которые отслеживает Сервис мониторинга статусов Kafka.STATUS_MONITOR_CONSUMERS- количество потребителей (consumer) Сервиса мониторинга статусов Kafka.
2.2.1.3. Настройка kafka-clickhouse-reader
kafka-clickhouse-reader - поддерживает часть функций процесса MPPR (чтение данных из Clickhouse и запись в Kafka).
Настройка kafka-clickhouse-reader осуществляется путём редактирования файла application.yml, в котором задана логика и порядок работы компонента.
2.2.1.3.1. Пример файла application.yml для kafka-clickhouse-reader
vertx:
clustered:true
logging:
level:
io.arenadata.kafka.clickhouse.reader: ${LOG_LEVEL:DEBUG}
verticle:
worker:
task-worker:
poolSize: ${TASK_WORKER_POOL_SIZE:12}
poolName: ${TASK_WORKER_POOL_NAME:task-worker}
responseTimeoutMs: ${TASK_WORKER_RESPONSE_TIMEOUT_MS:86400000}
http:
port: ${SERVER_PORT:8086}
datasource:
clickhouse:
database: ${CLICKHOUSE_DB_NAME:test1}
user: ${CLICKHOUSE_USERNAME:default}
password: ${CLICKHOUSE_PASS:}
hosts: ${CLICKHOUSE_HOSTS:clickhouse.host:8123}
fetchSize: ${CLICKHOUSE_FETCH_SIZE:1000}
kafka:
clickhouse:
producer:
property:
key.serializer: org.apache.kafka.common.serialization.ByteArraySerializer
value.serializer: org.apache.kafka.common.serialization.ByteArraySerializer
cluster:
zookeeperHosts: ${ZOOKEEPER_HOSTS:zk-1.dtm.local}
rootPath: ${KAFKA_CLUSTER_ROOTPATH:arenadata/cluster/21}
где,
CLICKHOUSE_DB_NAME– наименование базы данных в ADQM;CLICKHOUSE_HOSTS– имя одно их хостов ADQM;CLICKHOUSE_PASS– пароль пользователя для доступа к ADQM;CLICKHOUSE_USERNAME– имя пользователя для доступа к ADQM;ZOOKEEPER_HOSTS- подключение к Zookeeper ProStore;KAFKA_CLUSTER_ROOTPATH- путь хранения информации о Kafka ProStore в Zookeeper.
2.2.1.4. Настройка kafka-clickhouse-writer
kafka-clickhouse-writer - коннектор, который поддерживает часть функциональности процесса MPP-W (чтение из Kafka и запись данных в базу данных Clickhouse).
Настройка kafka-clickhouse-writer осуществляется путём редактирования файла application.yml, в котором задана логика и порядок работы компонента.
2.2.1.4.1. Пример файла application.yml для kafka-clickhouse-writer
client:
kafka:
consumer:
timeout-checking-period: 1000
response-timeout: 1000
property:
group.id: test_datamart.consumer
auto.offset.reset: earliest
enable.auto.commit: false
env:
name: ${ENV:local}
datamart:
hot-delta-field-name: sys_from
datasource:
clickhouse:
database: ${CLICKHOUSE_DB_NAME:test}
user: ${CLICKHOUSE_USERNAME:}
password: ${CLICKHOUSE_PASS:}
hosts: ${CLICKHOUSE_HOSTS:localhost:8123}
verticle:
worker:
new-data-worker:
poolSize: 20
pool-name: new-data-worker
logging:
level:
io.arenadata.dtm: DEBUG
org.apache.kafka: INFO
где,
CLICKHOUSE_DB_NAME– наименование базы данных в ADQM;CLICKHOUSE_HOSTS– имя одно их хостов ADQM;CLICKHOUSE_PASS– пароль пользователя для доступа к ADQM;CLICKHOUSE_USERNAME– имя пользователя для доступа к ADQM;KAFKA_BOOTSTRAP_SERVERS- подключение к ProStore Kafka.ENV- название окружения.
2.2.2. Настройка СМЭВ QL Сервера
2.2.2.1. Конфигурирование сервера
СМЭВ QL сервер содержит два конфигурационных файла:
credentials.yaml - конфигурирует представление сервера
application.yaml - конфигурирует поведение сервера
Состав настроек credentials.yaml:
version: 1.0.0
system:
mnemonic: smev_ql_mnemonic
instance: smev_ql_instance
2.2.2.2. Язык и синтаксис
2.2.2.2.1. Моделирование
Для моделирования документного слоя данных в спецификации выбран язык разметки YAML.
2.2.2.2.2. Запросы и ответы
Для написания запросов, а также в качестве сериализатора ответов, спецификация определяет использование JSON.
2.2.2.3. Типизация
Фактические типы данных наследуют типы данных JSON (включая NULL):
string;
number;
object;
array;
boolean;
null.
2.2.2.3.1. Типы данных в модели и приведение типов
В описании модели допускается указание фактического типа данных атрибута ресурса вторым элементом массива type. Указание является опциональным, по умолчанию подразумевается неограниченный STRING.
Пример из описания модели:
fields:
id:
name: Идентификатор записи
type:
- number
- SHORT
length: 20
nullable: not NULL
key: PRIMARY
В качестве второго уточняющего типа следует применять типы НСУД:
STRING;
DOUBLE;
FLOAT;
BOOLEAN;
BYTE (не поддерживается на витрине);
BINARY;
BIG_DECIMAL (не поддерживается на витрине);
LONG;
INTEGER;
SHORT;
DATE;
TIME;
TIMESTAMP.
2.2.2.4. Моделирование данных
Модели данных описываются в формате YAML в папке проекта models согласно спецификации СМЭВ QL.
2.2.2.4.1. Структура базовой модели
Базовая модель должна ставиться впереди общего файла моделей, так как от ее алиасов наследуется элементы пользовательских моделей. Описание базовой модели данных в формате YAML имеет следующую структуру:
default_string: &ds
name: Строка
type:
- string
- STRING
length: 0
nullable: NULL
key: NONE
source: NONE
default_number: &dn
name: Число
type:
- integer
- INTEGER
length: 0
nullable: NULL
key: NONE
source: NONE
primary_key: &pk
name: Ключ
type:
- string
- STRING
length: 0
nullable: NULL
key: PRIMAY
source: NONE
base_model: &base_model
default_fields: &default_fields
2.2.2.4.2. Структура модели данных
Каждая модель представляет из себя YAML-файл, который должен быть соединен с базовой моделью для прохождения валидации.
Первый блок модели определяет ее мета-данные и атрибутивный состав.
Мета-данные и поля модели
resources:
# slots — техническое название модели, по нему производятся все связи
- slots: *base_model
# значение name — название модели на русском языке
name: Слоты
# fields — список полей модели
fields:
# список полей может включать перечень полей из default_fields
<<: *default_fields
# поля по-умолчанию наследуются от ds (default_string) из базовой модели
id: *ds
resource_id: *ds
# у поля может быть переопределен source (по-умолчанию у каждого поля источник всей модели)
type: *ds
source:
field: tag_type
age: *ds
source:
field: tag_age
visitTime: *ds
duration: *ds
status: *ds
create_ts: *ds
update_ts: *ds
update_ts: *ds
Второй блок модели описывает связи моделей друг с другом через ключи primary_key и foreign_key.
Ключи могут быть составными (описывается массивом), ключи не обязательно должны быть ключами из БД.
Связи имеют два типа:
belongs_to
has_many (один ко многим)
Связи модели
# Блок connections описывает связи модели (по названию) через явно указываемых два ключа
connections:
belongs_to:
- resource:
primary_key: [ id ]
foreign_key: [ resource_id ]
has_many:
- book:
primary_key: [ id ]
foreign_key: [ slot_id ]
- unaccessible_period:
primary_key: [ resource_id, type ]
foreign_key: [ resource_id, type ]
Блок ограничений и разрешений использования условий поиска.
Связи модели
# Блок conditions описывает ограничения и разрешения на использование условий поиска
conditions:
allowed: [id, name] # если заполнено, то поиск разрешен только по этим полям и полям с ключами
denied: [snils] # если заполнено, то поиск запрещен по этим ключам
always: # наличие условий в блоке always должно ко всем запросам ресурса добавлять эти условия, если указаны в запросе, то перетирать
- region: ["=", "77"]
- blocked: ["=", true]
Блок — extract, описывает названия source из которого нужно извлекать модель и ее таблицу.
Источники модели
extract:
source:
- name: prostore
table: misdm.slots
Источники по условиям
В блоке c указанием источника в модели допускается указание условий его выбора через блок conditions. Блок conditions содержит массив условий применения источника на основании значений полученных в запросе атрибутов:
extract:
source:
- name: prostore1
table: misdm.slots
conditions:
# попадание в промежуток
- range:
field: age
from: 0
to: 2
- eq:
field: color
not: "blue"
- name: prostore2
table: misdm.39slots
conditions:
# ограничения по (не)равенству
- eq:
field: resource_id
is: 1
- name: prostore3
table: misdm.39slots
conditions:
# ограничения по наличию в источнике
- eq:
field: snils
extract:
source: redis
table: default_table
key: resource_hashed_id
algorithm: md5
# select count(*) > 0 from offices.offices where resource_hashed_id = ?
# параметр: md5(snils)
is: true
- name: prostore_default
table: misdm.39slots
conditions:
- fallback: true
2.2.2.4.3. Загрузка
Модели данных считываются, валидируются и загружаются в память из папки models при запуске СМЭВ QL сервера.
По-умолчанию используется версия model, на которую ссылается symlink current, при его отсутствии по-умолчанию считается старшая версия.
Примечание
Модели и версии, начинающиеся с подчеркивания (_) НЕ загружаются, они находятся в стадии проектирования.
2.2.2.4.4. Guard-атрибуты
Для ограничения возможности получения некоторых атрибутов без предварительного предоставления их же (или дополнительных) значения, извлекающим необходимо определить атрибуты-ограничители в блоке guard.
Пример:
fields:
<<: *default_fields
first_name: *ds
last_name:
<<: *ds
guard: [last_name]
snils:
<<: *ds
guard: [last_name first_name snils]
В примере извлечение first_name не ограничивается. Для получения last_name фамилия должна быть передана в блоке conditions, а для получения snils в conditions должны присутствовать фамилия, имя и сам СНИЛС.
2.2.2.5. Запросы
Запросы к серверу выполняют методом POST и содержат в теле JSON-объект, состоящий из обязательных блоков:
Блок Credentials;
Блок Query;
Также пространстве методов server находятся методы, помогающие эксплуатации корректно конфигурировать хранилища данных относительно модели СМЭВ QL.
2.2.2.5.1. Блок Credentials
"credentials":{
"system":{
"mnemonic":"117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id":"ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id":"5ed38461-0907-486a-930a-7b443482932c"
},
"request":{
"id":"df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id":"0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name":"driver_data",
"purpose_id":"ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit":"false",
"audit_id":"fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token":"39e47aac-45d2-44c1-8c26-2d9b28b1703b"
},
"signature":{
"digest": null,
"signature": null
}
}
2.2.2.5.2. Блок Query
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00"
},
"attributes": [
"id",
"phone",
"name"
],
"cabinet": {
"conditions": {
"available": true
},
"attributes": [
"number",
"name",
"seats"
],
"online_room": {
"conditions": {
"public": true,
"software": "zoom"
},
"attributes": [
"url"
]
},
"parking": {
"conditions": {
"free": true,
"available": true
},
"attributes": [
"number",
"floor"
]
}
}
}
}
}
2.2.2.5.2.1. Условия фильтрации Conditions
Объединение условий только по and (MVP)
Операции сравнения (op):
= (по умолчанию)
>
>=
<
<=
in
like (на перспективу)
Условия сравнения применимы к численным типам, датам, временам и таймштампам.
Варианты определения условий фильрации:
По равенству
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00"
}
}
}
}
На основе сравнения, краткая запись
{
"query": {
"office": {
"conditions": {
"area": [">","130"]
}
}
}
}
На основе сравнения, полная запись
{
"query": {
"office": {
"conditions": {
"area": {
"op": ">",
"value": "130"
}
}
}
}
}
Комплексное условие
{
"query": {
"office": {
"conditions": {
"area": [">","130"],
"floor": ["in", [1, 2]]
}
}
}
}
OR (ИЛИ) в условиях
В conditions СМЭВ QL запроса поддерживается возможность указывать логический ИЛИ через зарезервированное слово or.
В блок or необходимо передать массив объектов, содержащих условия в свою очередь объединённые логическим И (AND).
Все условия, находящиеся на одном уровне с or группируются через логическое И (AND), как при обычном СМЭВ QL Запросе.
Пример:
"conditions": {
"lastname": "П",
"middlename": "И",
"birthdate": "2021-11-29 00:00:00",
"or": [
{
"vin": "в1"
},
{
"vin2": "в2",
"model": "bmw"
}
],
"fetch": {
"order": [["id", "ASC"], ["number", "DESC"]], // ASC default
"page": [2, 10] // limit 10 offset 10
}
}
Условия описанного выше запроса (без учета fetch) соберутся в следующую конструкцию:
...
WHERE
(lastname = 'П' AND middlename = 'И' AND birthdate = '2021-11-29 00:00:00')
OR
(vin ='в1')
OR
(vin2='в2' AND model = 'bmw')
...
2.2.2.5.2.2. Сортировка и пагинация
В блоке conditions опционально можно добавить блок fetch, в котором указывать условия сортировки и выбора страниц.
Пример блока:
"conditions": {
"lastname": "П",
"middlename": "И",
"birthdate": "2021-11-29 00:00:00",
"fetch": {
"order": [["id", "ASC"], ["number", "DESC"]], // ASC default
"page": [2, 10] // limit 10 offset 10
}
}
Если порядок сортировки не указан, то применяется ASC.
Если не указаны страницы, то по умолчанию всегда устанавливается первая страница с лимитом, равными параметру default блока pagination в файле конфигураций application.yaml.
Если запрашивается элементов на страницу больше, чем значение max, то должно использоваться дефолтное значение.
pagination:
default: 100 //количество элементов на странице по умолчанию
max: 1000 //максимальное количество элементов на странице
2.2.2.5.3. Эксплуатационные запросы
В пространстве методов server находятся методы, помогающие эксплуатации корректно конфигурировать хранилища данных относительно модели СМЭВ QL.
Метод возврата списка обязательных для создания индексов: GET server/indexes/required
В ответе должен возвращаться JSON с полями, используемыми в связях моделей (connections) и блоке conditions.allowed моделей, если они определены (conditions)
{
"server": {
"mnemonic": "#mnemonic",
"instance": "#instance"
},
"indexes": {
"connections": [{
"source": "#source_name2",
"table": "#table_name2",
"fields": ["#field_name1", "#field_name2"]
},
{
"source": "#source_name2",
"table": "#table_name2",
"fields": ["#field_name1", "#field_name2"]
}
],
"conditions": [{
"source": "#source_name2",
"table": "#table_name2",
"fields": ["#field_name1", "#field_name2"]
},
{
"source": "#source_name2",
"table": "#table_name2",
"fields": ["#field_name1", "#field_name2"]
}
]
}
}
2.2.2.6. Обработка запросов
2.2.2.6.1. Логирование мета-данных
У каждого запроса логируются данные из блока credentials в info и выше.
Формат строчки лога:
{
"level": "info",
"time": "2000-01-01T01:01:01.111Z",
"name": "#{smevql_server_name}.request",
"system": {
"mnemonic": "117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id": "ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id": "5ed38461-0907-486a-930a-7b443482932c"
},
"request": {
"id": "df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id": "0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name": "driver_data",
"purpose_id": "ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit": "false",
"audit_id": "fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token": "39e47aac-45d2-44c1-8c26-2d9b28b1703b"
}
}
Для каждого входящего запроса логируется каждый отправленный запрос к источнику:
{
"level": "info",
"time": "2000-01-01T01:01:01.111Z",
"name": "#{smevql_server_name}.request",
"system": {
"mnemonic": "117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id": "ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id": "5ed38461-0907-486a-930a-7b443482932c"
},
"request": {
"id": "df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id": "0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name": "driver_data",
"purpose_id": "ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit": "false",
"audit_id": "fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token": "39e47aac-45d2-44c1-8c26-2d9b28b1703b"
},
"source_request": {
"id": "1cdb59ce-224b-4118-8da1-c5ea08a5d955",
"source": "#{source_name}"
}
}
Передача идентификаторов:
source_request.id передается в queryId тела запроса в Простор.
В x-request-id передается склейка {request.id};{request.sub_id};{source_request.id}
Логирование ответа
{
"level": "info",
"time": "2000-01-01T01:01:01.111Z",
"name": "#{smevql_server_name}.response",
"system": {
"mnemonic": "117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id": "ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id": "5ed38461-0907-486a-930a-7b443482932c"
},
"request": {
"id": "df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id": "0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name": "driver_data",
"purpose_id": "ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit": "false",
"audit_id": "fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token": "39e47aac-45d2-44c1-8c26-2d9b28b1703b"
},
"source_request": {
"id": "1cdb59ce-224b-4118-8da1-c5ea08a5d955",
"source": "#{source_name}"
},
"response": {
"duration": "1ms",
"code": 200,
"result": "ok"
}
}
2.2.2.6.2. Построение плана
Входные данные:
загруженные модели, описывающие атрибутный состав сущностей, связи между сущностями и источники;
запрос поступивший к серверу.
Необходимо определить набор запросов и порядок их исполнения SMQEVQL сервером, обеспечить параллельное исполнение независимых запросов.
Вид плана запроса:
plan:
level: 1
- source: prostore1
query: SELECT id, phone, name FROM office WHERE phone = '(347) 246-53-00';
pk: id
alias: offices
level: 2
- source: prostore2
query: SELECT id, number, name, seats FROM cabinet WHERE office_id in (@offices) AND available = 'true';
pk: id
alias: cabinets
- source: prostore1
query: SELECT id, number, floor FROM parking WHERE office_id in (@offices) free = 'true' AND available = 'true';
pk: number, flor
alias: parkings
level: 3
- source: vostok7
query: SELECT url FROM online_room WHERE cabinet_id in (@cabinets) AND public = 'true' AND software = 'zoom';
pk: null
alias: online_rooms
Сначала параллельно выполняются запросы первого уровня, затем запрос второго уровня на основе данных полученных на первом уровне.
Фомирование плана запроса основывается на внешнем объединении данных в сторону основной сущности.
Порядок формирования плана запроса:
на основе query определяется основная запрашиваемая сущность;
на основе query определяются вспомогательные сущности;
на основе query определяются conditions к основной сущности;
на основе query определяются conditions к вспомогательным сущностям;
на первом уровне плана формируется запрос к основной сущности на основе: - запрошенных атрибутов; - данных модели; - условий фильтрации.
Отмечаются поля, составляющие PK.
Первичные ключи, даже отсутствующие в атрибутах запроса к серверу должны быть в запросе к источнику.
формируется запрос к вспомогательным сущностям на основе: - запрошенных атрибутов; - данных модели; - условий фильтрации; - с добавлением фильрации по PK основной или предшествующей сущности.
Первичные ключи, даже отсутствующие в атрибутах запроса к серверу должны быть в запросе к источнику, за исключением терминальных запросов.
План запроса соответсвует иерархии построенной от основной сущности на основе связей (modelconnections).
2.2.2.7. Ответы
Ответы СМЭВ QL сервера представляют из себя объект JSON, схема которого определяется составом запроса.
Например для запроса:
{
"query":{
"people":{
"conditions":{
"age":"<35"
},
"attributes":[
"name",
"phone",
"vsu_code"
],
"military_office":{
"attributes":[
"address"
]
}
}
},
"credentials":{
}
}
Ответ будет следующим:
{
"response":{
"people":[
{
"name":"Иван",
"phone":"+79011001010",
"vsu_code":"1025",
"military_office":[
{
"address":"г.Москва, ул.Угрешко"
}
]
},
{
"name":"Пётр",
"phone":"+79022002020",
"vsu_code":"1026",
"military_office":[
{
"address":"г.Москва, Хилков переулок"
}
]
}
]
},
"credentials":{
}
}
2.2.2.8. Стейт-машина СМЭВ QL
СМЭВ QL содержит встроенную машину состояний для изменения объектов модели внутри витрин данных. Одновременно с этим Стейт машина может, в качестве подтверждения перехода состояния, использовать внешний источник (например ИС Электронной очереди).
Карта состояний и переходов описывается в виде YAML-файла state.yaml располагаемого в папке states/<имя-модели>/<х.х версия модели> инстанса СМЭВ QL Сервера.
Описание формата и правил карты состояний:
model: slot # имя модели
states: # массив состояний объекта
- state: available # название состояния available
attributes: # массив атрибутов, описывающих состояние
- name: status # состояние определятся значением атрибута status
value: AVAILABLE # значение атрибута для описываемого состояния
initial: true
- state: booked
attributes:
- name: status
value: RECORDED
- state: reserved
attributes:
- name: status
value: RESERVED
- state: cancelled
attributes:
- name: status
value: CANCELED
- state: blocked
attributes:
- name: status
value: BLOCKED
events: # список событий изменения состояний, из них создаются методы API
- event: book # создает метод POST /states/slot/book
from: # массив состояний из которых возможен вызов события
- available
- reserved
to: booked # в какое состояние переводится объект после события
hooks: # массив связанных событий
- model: book # после перевода надо вызвать событие init для модели book
event: init
confirm:
source: rmis_rest # названия источника
endpoint: /booking/book
method: post
body: payload # что включать в тело запроса (full|state|conditions|payload|credentials)
accept: # условие принятия
jsonpath: $.status.statusCode
eq: 0 # ожидаем, что statusCode будет равен 0
- event: reserve
from: available
to: reserved
- event: block
from: available
to: blocked
- event: cancel
from:
- available
- reserved
- booked
- blocked
to: cancelled
hooks:
- model: book
event: cancel
При наличии заполненных состояний машины СМЭВ QL Сервер генерирует API c набором HTTP-методов, отвечающих за изменение и просмотр состояний объектов:
GET /states — получить карту переходов
GET /states/<model-name> — получить карту переходов конкретной модели
POST /states/<model-name>/<event-name> — выполнить переход состояний для модели
Запрос выполнения перехода:
POST /states/slot/book
{
"state": {
"conditions": {
"id": "d9e70331-b4c0-4e96-96b6-322ac75e5188" # slot_id
},
"payload": {
"bookId":"82dcac12-0a29-4fff-b9a7-8dfc84f7853d",
"patient_Id":"23453456",
"booking_type":"APPOINTMENT",
"caseNumber":"73367196",
"preliminaryReservation": false,
"email":"email@gmail.com",
"mobilePhone":"89150000102",
"referral_id":"102111",
"cards_id":"102"
}
},
"credentials": {
"system": {
"mnemonic": "117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id": "ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id": "5ed38461-0907-486a-930a-7b443482932c"
},
"request": {
"id": "df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id": "0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name": "request_name",
"purpose_id": "ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit": false,
"audit_id": "fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token": false
}
}
}
2.2.2.8.1. Спецификация интерфейса Стейт-машины
openapi: 3.0.0
x-stoplight:
id: 5i2oag6m5eq3v
info:
title: SmevQLStateMachine
version: '1.0'
description: ''
servers:
- url: 'http://localhost:3000'
paths:
/states:
parameters: []
get:
summary: Get models
tags: []
responses:
'200':
description: ''
content:
application/x-yaml:
schema:
$ref: '#/components/schemas/Models'
examples: {}
application/xml:
schema:
type: object
properties: {}
multipart/form-data:
schema:
type: object
properties: {}
text/html:
schema:
type: object
properties: {}
operationId: get-models
description: Retrieve the information of models
'/states/{model}':
parameters:
- schema:
type: string
name: model
in: path
required: true
get:
summary: Get model
tags: []
responses:
'200':
description: Model Found
content:
application/x-yaml:
schema:
$ref: '#/components/schemas/Model'
examples: {}
'400':
description: Bad Request
'404':
description: Model Not Found
operationId: get-model
description: Retrieve the information of model
parameters: []
'/states/{model}/{event}':
post:
summary: State change
operationId: post-state
responses:
'200':
description: State Updated
content:
plain/text:
schema:
type: string
examples: {}
'400':
description: Bad request
'404':
description: Not Found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StateUpdate'
examples: {}
description: Post the necessary fields for the API to create a new user.
description: Update state
parameters: []
parameters:
- schema:
type: string
name: model
in: path
required: true
- schema:
type: string
name: event
in: path
required: true
components:
schemas:
State:
type: object
x-stoplight:
id: 89f55561cae04
properties:
state:
type: string
attributes:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Attribute'
initial:
type: boolean
Model:
type: object
x-stoplight:
id: b96a73db1e1b2
properties:
model:
type: string
states:
type: array
minItems: 1
items:
$ref: '#/components/schemas/State'
events:
type: array
items:
$ref: '#/components/schemas/Event'
Events:
title: Events
x-stoplight:
id: qdvbkmgs9xkli
type: array
items:
$ref: '#/components/schemas/Event'
States:
$ref: '#/components/schemas/State'
x-stoplight:
id: wab1w6ro30nrl
Event:
title: Event
x-stoplight:
id: sr024y2v7khum
type: object
properties:
event:
type: string
from:
type: string
to:
type: string
Models:
title: ModelSet
x-stoplight:
id: e7de590d788a7
type: array
items:
$ref: '#/components/schemas/ModelInstance'
ModelInstance:
type: object
properties:
model:
type: string
states:
$ref: '#/components/schemas/States'
events:
$ref: '#/components/schemas/Events'
ModelSet:
type: array
items:
$ref: '#/components/schemas/Model'
Attribute:
title: Attribute
x-stoplight:
id: 3kiqu047734tc
type: object
properties:
name:
type: string
value:
type: string
description: ''
StateUpdate:
title: StateUpdate
x-stoplight:
id: 2iyfifo0q1dt2
type: object
properties:
state:
type: object
properties:
conditions:
type: object
payload:
type: object
credentials:
type: object
properties:
system:
type: object
properties:
mnemonic:
type: string
instance_id:
type: string
user_id:
type: string
request:
type: object
properties:
id:
type: string
format: uuid
sub_id:
type: string
format: uuid
name:
type: string
purpose_id:
type: string
format: uuid
audit:
type: boolean
audit_id:
type: string
format: uuid
audit_token:
type: string
Пример реализации: Спецификация интерфейса Стейт-машины РМИС (OpenAPI)
openapi: 3.0.0
x-stoplight:
id: 5i2oag6m5eq3v
info:
title: SmevQLStateMachine
version: '1.0'
description: ''
servers:
- url: 'http://localhost:3000'
paths:
/states:
parameters: []
get:
summary: Get models
tags: []
responses:
'200':
description: ''
content:
application/x-yaml:
schema:
$ref: '#/components/schemas/Models'
examples: {}
application/xml:
schema:
type: object
properties: {}
multipart/form-data:
schema:
type: object
properties: {}
text/html:
schema:
type: object
properties: {}
operationId: get-models
description: Retrieve the information of models
'/states/{model}':
parameters:
- schema:
type: string
name: model
in: path
required: true
get:
summary: Get model
tags: []
responses:
'200':
description: Model Found
content:
application/x-yaml:
schema:
$ref: '#/components/schemas/Model'
examples: {}
'400':
description: Bad Request
'404':
description: Model Not Found
operationId: get-model
description: Retrieve the information of model
parameters: []
'/states/{model}/{event}':
post:
summary: State change
operationId: post-state
responses:
'200':
description: State Updated
content:
plain/text:
schema:
type: string
examples: {}
'400':
description: Bad request
'404':
description: Not Found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StateUpdate'
examples: {}
description: Post the necessary fields for the API to create a new user.
description: Update state
parameters: []
parameters:
- schema:
type: string
name: model
in: path
required: true
- schema:
type: string
name: event
in: path
required: true
components:
schemas:
State:
type: object
x-stoplight:
id: 89f55561cae04
properties:
state:
type: string
attributes:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Attribute'
initial:
type: boolean
Model:
type: object
x-stoplight:
id: b96a73db1e1b2
properties:
model:
type: string
states:
type: array
minItems: 1
items:
$ref: '#/components/schemas/State'
events:
type: array
items:
$ref: '#/components/schemas/Event'
Events:
title: Events
x-stoplight:
id: qdvbkmgs9xkli
type: array
items:
$ref: '#/components/schemas/Event'
States:
$ref: '#/components/schemas/State'
x-stoplight:
id: wab1w6ro30nrl
Event:
title: Event
x-stoplight:
id: sr024y2v7khum
type: object
properties:
event:
type: string
from:
type: string
to:
type: string
Models:
title: ModelSet
x-stoplight:
id: e7de590d788a7
type: array
items:
$ref: '#/components/schemas/ModelInstance'
ModelInstance:
type: object
properties:
model:
type: string
states:
$ref: '#/components/schemas/States'
events:
$ref: '#/components/schemas/Events'
ModelSet:
type: array
items:
$ref: '#/components/schemas/Model'
Attribute:
title: Attribute
x-stoplight:
id: 3kiqu047734tc
type: object
properties:
name:
type: string
value:
type: string
description: ''
StateUpdate:
title: StateUpdate
x-stoplight:
id: 2iyfifo0q1dt2
type: object
properties:
state:
type: object
properties:
conditions:
type: object
properties:
id:
type: string
format: uuid
payload:
type: object
properties:
book_id:
type: string
format: uuid
patient_id:
type: string
booking_type:
type: string
case_number:
type: string
preliminary_reservation:
type: boolean
email:
type: string
mobile_phone:
type: string
referral_id:
type: string
cards_id:
type: string
credentials:
type: object
properties:
system:
type: object
properties:
mnemonic:
type: string
instance_id:
type: string
user_id:
type: string
request:
type: object
properties:
id:
type: string
format: uuid
sub_id:
type: string
format: uuid
name:
type: string
purpose_id:
type: string
format: uuid
audit:
type: boolean
audit_id:
type: string
format: uuid
audit_token:
type: string
2.2.2.8.1.1. Выполнение операций обновления данных в витрине
Инсерты в витрину выполняются в порядке поступления запросов.
Каждый экземпляр СМЭВ QL сервера ведет нарастающий счетчик инсертов.
Каждый экземпляр СМЭВ QL сервера создает один поток управления дельтами, который выполняет:
Периодически (период конфигурируемая величина, по умолчанию 60 сек) проверяет значение счетчика числа инсертов, если значение счетчика более 0
Выполняет открытие и закрытие дельты с флагом immediate, ошибки открытия и закрытия дельты игнорируются. Попытка закрытия дельты выполняется независимо от успешности открытия дельты.
Обнуляет значение счетчика.
Периодически (период конфигурируемая величина, по умолчанию 30 мин)
Выполняет открытие и закрытие дельты с флагом immediate, ошибки открытия и закрытия дельты игнорируются. Попытка закрытия дельты выполняется независимо от успешности открытия дельты.
Чтение данных сервером СМЭВQL выполняется с применением AS OF <maxLong>.
2.2.2.8.1.2. Обновление объектов через Стейт-машину
Через Стейт-машину можно обновлять записи в витрине. Для этого при конфигурировании карты состояний необходимо
задать значение у event updatable: true.
При этом если требуется дать возможность обновлять только часть
атрибутов, то ограничить этот список можно перечислив атрибуты в массиве updatable_attributes.
- event: reserve
from: available
to: reserved
updatable: true // по умолчанию false для всех, кроме init, возможность изменять запись при переводе статуса
updatable_attributes: [] // массив атрибутов, которые можно обновлять, пустой — можно все
Данные для обновления будут браться из блока payload запроса на смену состояния.
Для события init такое конфигурирование не требуется - по умолчанию обновления разрешены для всех атрибутов из payload.
2.2.2.9. Ошибки
Ошибки выводятся в блоке response:
{
"response": {
"errors": [
{
"error": "Запрещен вывод атрибутов без переданного guard",
"code": "401"
}
]
},
"credentials": {
}
}
2.2.2.9.1. Базовые ошибки СМЭВ Ql
1ХХ Ошибки разбора запроса
101 Запрос не должен называться „errors“ — Неправильное название запроса „errors“
2ХХ Ошибки модели
201 Неизвестный атрибут — У ресурса не найден атрибут с соотв. именем
202 Неизвестный ресурс — Ресурс с соотв. именем не зарегистрирован в модели данных
203 Неизвестная связь — Не найдена связь между двумя ресурсами
204 Неправильная связь — Размеры ключей не соответствуют для соединения одного ресурса с другим
3ХХ Ошибки источников
301 Неизвестный источник — Не найдено описание источника данных с соотв. именем
302 Неизвестный адаптер — Не найден адаптер с соотв. именем
4ХХ Ошибки доступов и ограничений
401 Запрещен вывод атрибутов без переданного guard — Среди запрашиваемых атрибутов есть атрибут с невыполненными ограничениями в блоке guard (не переданы в запросе атрибуты из guard)
402 Недостаточно атрибутов для выбора источника — Среди атрибутов фильтрации нет атрибутов, необходимых для выбора источника
403 Запрещенные атрибуты для поиска — Среди атрибутов фильтрации есть атрибуты, указанные в блоке denied модели
404 Атрибуты для поиска не разрешены — Среди атрибутов фильтрации есть атрибуты, которые не указаны в разрешающем блоке allowed модели
405 Попытка переопределения фиксированных условий поиска — Среди атрибутов фильтрации есть атрибуты, которые пытаются переопределить фиксированные ограничения поиска в блоке always модели
9ХХ Прочие ошибки
901 Непредвиденная ошибка — Непредвиденная ошибка
2.2.3. Настройка СМЭВ3-адаптера
2.2.3.1. Конфигурация СМЭВ3-адаптер (application.yml)
Файл application.yml – основной конфигурационный файл CМЭВ3-адаптера,
в котором задана логика и порядок работы адаптера: получение входящих
запросов, их обработка, а также настройка подключения к СМЭВ и FTP-серверу СМЭВ3, к Prostore через
JDBC-драйвер, BLOB-адаптер, настройка алгоритма формирования и проверки электронной подписи(ЭП) и т.д.
2.2.3.2. Пример файла 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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
default-schema: demo_view
datasource:
pebble-db:
# url базы данных простора
jdbcUrl: 'jdbc:prostore://t5-prostore-01.ru-central1.internal:9195/demo_view'
driverClassName: 'ru.datamart.prostore.jdbc.Driver'
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.3. Параметры конфигурации
Настройка конфигурации CМЭВ3-адаптера осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для 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. Если false - будет использоваться JDBC-драйвер;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.3.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.3.2. Секция spring
Секция spring подключение к фреймворку spring boot (используется для разработки).
Например:
spring:
liquibase:
enabled: false
main:
allow-bean-definition-overriding: true
2.2.3.3.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.3.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
Пример файла fallback.xml
Ответ при ошибке обработки запроса.
2.2.3.3.5. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: true
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.3.6. Секция datasource
Секция datasource предназначена для настройки параметров подключения к ProStore.
Например:
datasource:
pebble-db:
# url базы данных простора
jdbcUrl: 'jdbc:prostore://t5-prostore-01.ru-central1.internal:9195/demo_view'
driverClassName: 'ru.datamart.prostore.jdbc.Driver'
Параметры настроек
jdbcUrl– строка подключения к сервисной БД СМЭВ3-адаптера по JDBC в формате:jdbcUrl: jdbc:postgresql://127.0.0.1:5432/smev3_connector;
2.2.3.3.7. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.3.3.8. Секция 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.3.9. Секция migration
Секция migration реализована настройка миграции зукипера для задачи бекапирования.
Например:
migration:
zk-enabled: ${MIGRATION_ZK_ENABLE:false}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false}.
2.2.3.3.10. Секция paramstorage
В секции paramstorage указывается корневой путь до сервера Zookeeper для механизма параметров (ключ-значение).
Например:
paramstorage:
base-path: '/smev/paramstorage'
2.2.3.3.11. Секция deltastorage
В секции deltastorage указывается корневой путь до сервера Zookeeper для механизма дельт.
Например:
deltastorage:
base-path: '/smev/deltastorage'
2.2.3.3.12. Секция sign
Секция sign предназначена для формирования и проверки электронной подписи(ЭП) в SOAP-пакетах СМЭВ3.
Например:
sign:
digest-algorithm: 1.2.643.7.1.1.2.2
digest-algorithm- алгоритм ключа проверки электронной подписи.
2.2.3.3.13. Секция 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.3.14. Секция 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.3.15. Секция scheduler
Секция scheduler предназначена для настройки планировщика заданий в случае, если планируется использовать механизм отправки дельт по расписанию.
Например:
scheduler:
enabled: true
interval: PT30s
template: templates/pfr-delta.peb
Параметры настроек
enabled- включение планировщика заданий;interval- интервал между отправкой дельт;template- путь к Pebble-шаблону;
2.2.3.3.16. Секция pool
В секции pool указывается размер прерываемого кода.
Например:
pool:
reader-executor: 20
schedule-executor: 1
restExecutor: 1
logExecutor: 20
2.2.3.3.17. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
request-response:
smev-request: false
smev-response: false
Параметры настроек
smev-request- логирование запросов;smev-response- логирование ответов.
2.2.3.3.18. Секция 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.3.19. Секция 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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
# subprotocol для jdbc
subprotocol: ${PS_SUBPROTOCOL:prostore}
# Драйвер для подключения к простору
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
# Подключение к Prostore
host: ${PS_HOST:localhost}
# Prostore порт
port: ${PS_PORT:9195}
# Prostore начальный размер пула ру
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
# Prostore максимальный размер пула
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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}
kafka-consumer-group-name: ${JET_CONNECTOR_GROUP_NAME:csv-uploader}
kafka-poll-duration-ms: ${JET_POLL_DURATION:200}
kafka-poll-buffer-size: ${JET_POLL_BUFFER:2000}
db-records-buffer-size: ${JET_DB_RECORDS_BUFFER:2000}
2.2.4.2. Параметры конфигурации
Настройка конфигурации CSV-uploader осуществляется путем редактирования параметров настроек в файле application.yml. Некоторые настройки доступны для редактирования через пользовательский интерфейс модуля, например, Настройка отображения количества записей в Журнале операций и Запуск по расписанию.
Пример конфигурации файла application.yml для CSV-uploader см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации CSV-uploader могут быть настроены следующие секции:
kafkaUrl- URL для доступа к Kafka;http-server- настройки порта подключения;send- настройка отправки файлов;logging.level- настройка сохранения лог-файла;environment- определяет значение среды разработки;zookeeper- настройка подключения Zookeeper;migration- настройка миграции зукипера для задачи бекапирования;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к 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
Секция http предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http:
port: ${HTTP_PORT:8080}
enabled: ${HTTP_ENABLED:true}
Параметры конфигурации
port- порт для старта веб-сервера;enabled- статус включения/отключения веб-сервера.
2.2.4.2.3. Секция query-executor
Секция query-executor определяет настройки настройка получения входящих запросов.
Например:
query-executor:
reader-pool-size: ${READER_POOL_SIZE:20}
rest-pool-size: ${REST_POOL_SIZE:5}
writer-pool-size: ${WRITER_POOL_SIZE:1}
kafka-pool-size: ${KAFKA_POOL_SIZE:20}
Параметры конфигурации
reader-pool-size- размер пула на чтение, например:READER_POOL_SIZE:20;rest-pool-size- размер пула на REST, например:REST_POOL_SIZE:5;writer-pool-size- размер пула на запись, например:WRITER_POOL_SIZE:1;kafka-pool-size- размер kafka пула на отправку, напримерKAFKA_POOL_SIZE:20.
2.2.4.2.4. Секция 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}
file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}
Параметры конфигурации:
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;file-size-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:
connection-string: ${ZK_CONNECTION:t5-ads-02.ru-central1.internal}
session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
Параметры конфигурации
connection-string- адрес сервера Zookeeper, напримерZK_CONNECTION:t5-ads-02.ru-central1.internal;session-timeout-ms- таймаут сессии, напримерZK_SESSION_TIMEOUT_MS:30000;connection-timeout-ms- таймаут подключения, напримерZK_CONNECTION_TIMEOUT_MS:86400000.
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.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: ${PS_REST_CLIENT_ENABLED:true}
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 предназначена для настройки параметров подключения к ядру ProStore.
Например:
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:dev-dtm-one05.ru-central1.internal}
port: ${PS_PORT:9090}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
zookeeper:
connection-string: ${ZK_PROSTORE_CONNECTION:dev-dtm-one05.ru-central1.internal:2181}
Параметры конфигурации
subprotocol- subprotocol для jdbc, напримерPS_SUBPROTOCOL:prostore;driver- драйвер для подключения к Prostore, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к Prostore, напримерPS_HOST:dev-dtm-one05.ru-central1.internal;port- Prostore порт, напримерPS_PORT:9090;initialPoolSize- начальное число подключений к Prostore, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- максимальное число подключений к Prostore, например, напримерPS_MAX_POOL_SIZE:8;connection-string- адрес сервера zookeeper для загрузки данных в Prostore, напримерZK_PROSTORE_CONNECTION:dev-dtm-one05.ru-central1.internal: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:';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}
kafka-consumer-group-name: ${JET_CONNECTOR_GROUP_NAME:csv-uploader}
kafka-poll-duration-ms: ${JET_POLL_DURATION:200}
kafka-poll-buffer-size: ${JET_POLL_BUFFER:2000}
db-records-buffer-size: ${JET_DB_RECORDS_BUFFER:2000}
Параметры настроек
use- флаг активации jet connector’а, например{JET_CONNECTOR_USE:false};kafka-consumer-group-name- имя консьюмер-группы, загружающей данные, например:{JET_CONNECTOR_GROUP_NAME:csv-uploader};kafka-poll-duration-ms- максимальное время одного прохода вычитки из топика в мс, например:{JET_POLL_DURATION:200};kafka-poll-buffer-size- максимальный размер буфера прочитанных, но еще не загруженных сообщений, например:{JET_POLL_BUFFER:2000};db-records-buffer-size- максимальное количество строк, загружаемых в таблицу за один проход, например:{JET_DB_RECORDS_BUFFER:2000}.
2.2.5. Настройка ПОДД-адаптера - Модуль исполнения запросов
2.2.5.1. Конфигурация ПОДД-адаптера - Модуль исполнения запросов (application.yml)
Файл application.yml – основной конфигурационный файл ПОДД-адаптера - Модуль исполнения запросов, в котором задана логика и порядок работы адаптера: получение входящих запросов, их обработка, подключение к Сервису формирования документов (секция: printable-forms-service), настройки логирования (секция: logging), а также другие настройки необходимые для корректной работы адаптера. Хинт пагинации FORCE_LLR определен в переменных среды.
2.2.5.2. Пример файла 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: ${DATA_SOURCE_TYPE:ADB}
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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль исполнения запросов осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для ПОДД-адаптера - Модуль исполнения запросов см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль исполнения запросов могут быть настроены следующие секции:
http-server- указывается порт для подключения;environment- указывается название окружения (test,prodи т.д.);executor- настраивается размер пула для запросов;send- настраиваются ограничения на размер загружаемого файла;query- настройка выполнения запросов;zookeeper- подключения в Zookeeper;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер.prostore- указываются настройки подключения к ProStore;printable-forms-service- настройки подключения к Сервис формирования документов;kafka- настройки параметров подключения к шине данных Apache Kafka;statistics- управление статистикой;logging- настройка сохранения лог-файла;metrics- настройка получения метрик.
2.2.5.3.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8090}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8090.
2.2.5.3.2. Секция environment
Секция environment предназначена для настройки параметров окружения.
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- название окружения (test, prod и т.д.), например:ENVIRONMENT_NAME:test.
2.2.5.3.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.3.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.3.5. Секция query
В секции query выполняется настройка выполнения запросов.
Например:
query:
data-source-type: ${DATA_SOURCE_TYPE:ADB}
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;llr-rows-limit- ограничение выгрузки через LIMIT, FETCH, напримерLLR_ROWS_LIMIT:200;fetch-size- размер выгрузки через JDBC, напримерFETCH_SIZE:1000.
2.2.5.3.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.3.7. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.3.8. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
Параметры конфигурации
subprotocol- Subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- имя класса JDBC драйвера, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;initialPoolSize- начальное число подключений к Prostore, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.5.3.9. Секция 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.3.10. Секция 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- префикс для топиков агента ПОДД, напримерAGENT_TOPIC_PREFIX.
2.2.5.3.11. Секция 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.3.12. Секция 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.3.13. Секция 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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки ПОДД-адаптера - Модуль MPPR. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http:
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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль MPPR осуществляется путем редактирования параметров настроек в файле application.yml.
Пример файла application.yml для ПОДД-адаптера - Модуль MPPR можно найти в разделе «2.2. Настройка на состав программных средств» Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль MPPR могут быть настроены следующие секции:
http- указывается порт веб-сервера;environment- название окружения (test,prodи т.д.);executor- предназначена для указания размера пула для запросов;send- настраиваются ограничения на размер загружаемого файла;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к серверу и базе данных ProStore;kafka- настройки параметров подключения к шине данных Apache Kafka;metrics- настройка получения метрик;logging- настройки журналирования запросов и ответов;
2.2.6.3.1. Секция http
В секции http указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8085}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8085.
2.2.6.3.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.6.3.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.3.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.3.5. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
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.3.6. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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
Параметры настроек
subprotocol- Subprotocol для JDBC, например:PS_SUBPROTOCOL:prostore;driver- имя класса JDBC драйвера, например:PS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- адрес Prostore, например:PS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, например:PS_PORT:9195;initialPoolSize- начальное число подключений к Prostore, например:S_INITIAL_POOL_SIZE:5;maxPoolSize- максимальное число подключений к Prostore, например:PS_MAX_POOL_SIZE:8;message-limit- MESSAGE LIMIT, который будет указан при создании EXTERNAL TABLE, например:PS_MESSAGE_LIMIT:1000;zk-url- подключение к Zookeeper Prostore, например:PS_ZK_KAFKA_URL:t5-ads-01.ru-central1.internal:2181;topic- статусный топик Prostore, например:PS_STATUS_EVENT_TOPIC:status.event;group.id- префикс для топиков агента ПОДД, например:{AGENT_TOPIC_PREFIX:}podd-adapter-mppr-status-event.
2.2.6.3.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- префикс для топиков агента ПОДД, напримерAGENT_TOPIC_PREFIX.
2.2.6.3.8. Секция metrics
Секция metrics предназначена для настройки параметров метрик:
Например:
metrics:
port: ${METRICS_PORT:9843}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9843.
2.2.6.3.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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки ПОДД-адаптера - Модуль MPPW. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
tp:
data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
upload-topic-prefix: ${UPLOAD_TOPIC_PREFIX:tmp.w}
upload:
data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
http:
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
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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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:false}
kafka-consumer-group-name: ${JET_CONNECTOR_GROUP_NAME:mpww}
kafka-poll-duration-ms: ${JET_POLL_DURATION:200}
kafka-poll-buffer-size: ${JET_POLL_BUFFER:2000}
db-records-buffer-size: ${JET_DB_RECORDS_BUFFER:2000}
2.2.7.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль MPPW осуществляется путем редактирования параметров настроек в файле application.yml.
Пример файла application.yml для ПОДД-адаптера - Модуль MPPW можно найти в разделе «2.2. Настройка на состав программных средств» Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль MPPW могут быть настроены следующие секции:
tp- указываются настройки топиков для табличных параметров;upload- настройки загрузки через DATA-Uploader;http- указывается порт для подключения;environment- указывается название окружения (test,prodи т.д.);executor- настраивается размер пула для запросов;scheduler- настройки планировщика отложенных заданий;send- настраиваются ограничения на размер загружаемого файла;zookeeper- указываются настройки подключения к Zookeeper;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- указываются настройки подключения к ProStore;kafka- настройки параметров подключения к шине данных Apache Kafka;metrics- настройка получения метрик;jet-connector- подготовлен для оптимизации задержек записи.
2.2.7.3.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.3.2. Секция upload
В секции upload - указываются настройки загрузки через DATA-Uploader
Например:
upload:
data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
Параметры конфигурации
AGENT_TOPIC_PREFIX:- значение префикса для топиков. Топики взаимодействия с ПОДД-адаптером - Модуль исполнения запросов (см. раздел «Спецификация модуля ПОДД-адаптер-Модуль исполнения запросов»);
2.2.7.3.3. Секция http
В секции http указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8090}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8090.
2.2.7.3.4. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.7.3.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.3.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.3.7. Секция delta
В секции delta настраивается параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
Например:
delta:
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout}}s
Параметры настроек
open-delay- количество секунд ожидания перед повторной попыткой открытия дельты в случае ошибки, напримерDELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout};
2.2.7.3.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.3.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.3.10. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.3.11. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
datasource:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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}
Параметры конфигурации
subprotocol- Subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- имя класса JDBC драйвера, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;initialPoolSize- начальное число подключений к Prostore, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8;primary- имя первичного ключа, напримерPRIMARY_KEY_NAME:tmp_id;type- тип первичного ключа, напримерPRIMARY_KEY_TYPE:BIGINT;message-limit- MESSAGE LIMIT, который будет указан при создании EXTERNAL UPLOAD TABLE, напримерPS_MESSAGE_LIMIT:1000;zk-url- подключение к Zookeeper Prostore, напримерPS_ZK_KAFKA_URL:t5-ads-01.ru-central1.internal:2181;bootstrap.servers- подключение к Kafka Prostore, напримерPS_KAFKA:t5-ads-01.ru-central1.internal:9092.
2.2.7.3.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- префикс для топиков агента ПОДД, например.
2.2.7.3.13. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9843}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9843.
2.2.7.3.14. Секция jet-connector
Секция jet-connector предназначена для оптимизации задержек записи данных.
Например:
jet-connector:
use: ${JET_CONNECTOR_USE:false}
kafka-consumer-group-name: ${JET_CONNECTOR_GROUP_NAME:mpww}
kafka-poll-duration-ms: ${JET_POLL_DURATION:200}
kafka-poll-buffer-size: ${JET_POLL_BUFFER:2000}
db-records-buffer-size: ${JET_DB_RECORDS_BUFFER:2000}
Параметры настроек
use- флаг активации jet connector’а, например{JET_CONNECTOR_USE:false};kafka-consumer-group-name- имя консьюмер-группы, загружающей данные, например:{JET_CONNECTOR_GROUP_NAME:mpww};kafka-poll-duration-ms- максимальное время одного прохода вычитки из топика в мс, например:{JET_POLL_DURATION:200};kafka-poll-buffer-size- максимальный размер буфера прочитанных, но еще не загруженных сообщений, например:{JET_POLL_BUFFER:2000};db-records-buffer-size- максимальное количество строк, загружаемых в таблицу за один проход, например:{JET_DB_RECORDS_BUFFER:2000}.
2.2.8. Настройка ПОДД-адаптер – Модуль импорта данных табличных параметров
2.2.8.1. Конфигурация модуля ПОДД-адаптер - Модуль импорта данных табличных параметров (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.
2.2.8.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки ПОДД-адаптера - Модуль импорта данных табличных параметров. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8091}
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER:localhost:2181}
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
key:
primary: tmp_id
type: BIGINT
datasource:
# subprotocol для jdbc
subprotocol: ${PS_SUBPROTOCOL:prostore}
# Драйвер для подключения к простору
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
# Подключение к Prostore
host: ${PS_HOST:localhost}
# Prostore порт
port: ${PS_PORT:9195}
# Prostore начальный размер пула
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
# Prostore максимальный размер пула
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
standalone:
source: ${PS_STANDALONE_SOURCE:ADB}
# общие настройки подключения к кафке
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.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль импорта данных табличных параметров осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для ПОДД-адаптера - Модуль импорта данных табличных параметров см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль импорта данных табличных параметров могут быть настроены следующие секции:
http-server- указывается порт веб-сервера;environment- название окружения (test,prodи т.д.);zookeeper– строка подключения к сервисной БД Zookeeper;prostore-api-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к Prostore;kafka- общие настройки подключения к Kafka;query- блок настроек импорта данных табличных параметров;mppw- блок настроек сервиса загрузки данных mppw;delete- блок настроек механизма очистки;delta- настройка работы с импортом дельт;metrics- настройка получения метрик.
2.2.8.3.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8091}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8091.
2.2.8.3.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.8.3.3. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.
Например:
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER:t5-adsp-01.ru-central1.internal:2181}
Параметры настроек
connection-string- подключение к Zookeeper DS, напримерZOOKEEPER:t5-adsp-01.ru-central1.internal:2181.
2.2.8.3.4. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.3.5. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
key:
primary: tmp_id
type: BIGINT
datasource:
# subprotocol для jdbc
subprotocol: ${PS_SUBPROTOCOL:prostore}
# Драйвер для подключения к простору
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
# Подключение к Prostore
host: ${PS_HOST:localhost}
# Prostore порт
port: ${PS_PORT:9195}
# Prostore начальный размер пула
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
# Prostore максимальный размер пула
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
standalone:
source: ${PS_STANDALONE_SOURCE:ADB}
Параметры настроек
subprotocol- subprotocol для jdbc, напримерPS_SUBPROTOCOL:prostore;driver- драйвер для подключения к простору, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к ядру ProStore, например:DTMDB_HOST:t5-prostore-01.ru-central1.internal;port- порт ядра ProStore, например:PROSTOREDB_PORT:9197;initialPoolSize- Prostore начальный размер пула, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- размер пула JDBC подключения, например:maxPoolSize: 5;source- источник для standalone таблицы (ADB/ADP), напримерPS_STANDALONE_SOURCE:ADB.
2.2.8.3.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.3.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- дополнительные параметры администрирования кафки.
2.2.8.3.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.3.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.3.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- дополнительные параметры администрирования кафки;provider- блок параметров поставщика данных;recipient- блок параметров получателя данных;request-topic- топик запросов;response-topic- топик запросов на исполнение после загрузки данных;error-topic- топик с ошибками;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов;producer-properties- дополнительные параметры продюсера ответов.
2.2.8.3.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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки ПОДД-адаптера - Модуль импорта данных табличных параметров. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8091}
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER:localhost:2181}
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
key:
primary: tmp_id
type: BIGINT
datasource:
# subprotocol для jdbc
subprotocol: ${PS_SUBPROTOCOL:prostore}
# Драйвер для подключения к простору
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
# Подключение к Prostore
host: ${PS_HOST:localhost}
# Prostore порт
port: ${PS_PORT:9195}
# Prostore начальный размер пула
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
# Prostore максимальный размер пула
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
standalone:
source: ${PS_STANDALONE_SOURCE:ADB}
# общие настройки подключения к кафке
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.9.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль импорта данных табличных параметров осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для ПОДД-адаптера - Модуль импорта данных табличных параметров см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль импорта данных табличных параметров могут быть настроены следующие секции:
http-server- указывается порт веб-сервера;environment- название окружения (test,prodи т.д.);zookeeper– строка подключения к сервисной БД Zookeeper;prostore-api-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к Prostore;kafka- общие настройки подключения к Kafka;query- блок настроек импорта данных табличных параметров;mppw- блок настроек сервиса загрузки данных mppw;delete- блок настроек механизма очистки;delta- настройка работы с импортом дельт;metrics- настройка получения метрик.
2.2.9.3.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8091}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8091.
2.2.9.3.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.9.3.3. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.
Например:
zookeeper:
# Подключение к зукипер
connection-string: ${ZOOKEEPER:t5-adsp-01.ru-central1.internal:2181}
Параметры настроек
connection-string- подключение к Zookeeper DS, напримерZOOKEEPER:t5-adsp-01.ru-central1.internal:2181.
2.2.9.3.4. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.9.3.5. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
key:
primary: tmp_id
type: BIGINT
datasource:
# subprotocol для jdbc
subprotocol: ${PS_SUBPROTOCOL:prostore}
# Драйвер для подключения к простору
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
# Подключение к Prostore
host: ${PS_HOST:localhost}
# Prostore порт
port: ${PS_PORT:9195}
# Prostore начальный размер пула
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
# Prostore максимальный размер пула
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
standalone:
source: ${PS_STANDALONE_SOURCE:ADB}
Параметры настроек
subprotocol- subprotocol для jdbc, напримерPS_SUBPROTOCOL:prostore;driver- драйвер для подключения к простору, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к ядру ProStore, например:DTMDB_HOST:t5-prostore-01.ru-central1.internal;port- порт ядра ProStore, например:PROSTOREDB_PORT:9197;initialPoolSize- Prostore начальный размер пула, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- размер пула JDBC подключения, например:maxPoolSize: 5;source- источник для standalone таблицы (ADB/ADP), напримерPS_STANDALONE_SOURCE:ADB.
2.2.9.3.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.9.3.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- дополнительные параметры администрирования кафки.
2.2.9.3.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.9.3.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.9.3.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- дополнительные параметры администрирования кафки;provider- блок параметров поставщика данных;recipient- блок параметров получателя данных;request-topic- топик запросов;response-topic- топик запросов на исполнение после загрузки данных;error-topic- топик с ошибками;max-concurrent-handle- максимальное количество обработчиков входящих запросов;commit-interval- периодичность фиксации оффсета обработанных сообщений;consumer-properties- дополнительные параметры консьюмера запросов;producer-properties- дополнительные параметры продюсера ответов.
2.2.9.3.11. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
# Порт сервера для получения метрик
port: ${METRICS_PORT:9843}
kafkaAdminClientName: kafkaAdminClient
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9843.
2.2.10. Настройка ПОДД-адаптер – ПОДД-адаптер – Wrapper
2.2.10.1. Конфигурация модуля ПОДД-адаптер - Wrapper (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.
2.2.10.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки ПОДД-адаптера - Wrapper. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
application:
path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
source_topic: ${kafka.external.topic.prefix}query.tp.bin
destination_topic: ${kafka.external.topic.prefix}query.tp
source_partition_count: 1
destination_chunk_max_size: 1000
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:}
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}
producer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
logging:
level:
ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}
metrics:
port: ${METRICS_PORT:9837}
2.2.10.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Wrapper осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для ПОДД-адаптера - Wrapper см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации ПОДД-адаптера - Wrapper могут быть настроены следующие секции:
application- настройка модуля в части указания топиков взаимодействия и размера обрабатываемых данных;environment- указывается название окружения (test,prodи т.д.);kafka- настройка подключения к серверу Kafka для Поставщика и Получателя данных;logging- настройка параметров логирования модуля;metrics- настройка получения метрик.
2.2.10.3.1. Секция application
Секция application предназначена для настройки модуля ПОДД-адаптера - Wrapper в части указания топиков взаимодействия и размера обрабатываемых данных.
Например:
application:
path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
source_topic: ${kafka.external.topic.prefix}query.tp.bin
destination_topic: ${kafka.external.topic.prefix}query.tp
source_partition_count: 1
destination_chunk_max_size: 1000
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;source_topic– топик Kafkaquery.tp.bin, являющийся источником данных;destination_topic- топик Kafkaquery.tp, в который будут собираться данные;source_partition_count- количество партиций в исходном топикеsource_topic;destination_chunk_max_size- максимальный размер фрагмента данныхchunkпри записи в топикdestination_topicдля сбора данных;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.3.2. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.10.3.3. Секция kafka
Секция kafka предназначена для настройки модуля в части указания адреса сервера Kafka для Поставщика данных (producer) и Получателя данных (consumer).
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
external:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
consumer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
group-id: ${KAFKA_CONSUMER_GROUPID:defragmentator-consumer}
producer:
bootstrap-servers: ${kafka.external.bootstrap.servers}
Параметры настроек
consumer- настройка адреса сервера Kafka для Получателя данных;bootstrap-servers- адрес кафки для консьюмеров, напримерKAFKA_CONSUMER_BOOTSTRAPSERVERS:localhost:9092;group-id- группа для консьюмеровproducer- настройка адреса сервера Kafka для Поставщика данных;bootstrap-servers- адрес кафки для продюсеров, напримерKAFKA_PRODUCER_BOOTSTRAPSERVERS:localhost:9092.
2.2.10.3.4. Секция logging
Секция logging предназначена для настройки параметров логирования.
Например:
logging:
level:
ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}
2.2.10.3.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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки Модуля группировки чанков репликации. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http:
port: ${HTTP_PORT:8084}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
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:
delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
logging:
scl.delta:
enabled: ${SCL_DELTA_ENABLED:false}
metrics:
port: ${METRICS_PORT:9837}
2.2.11.3. Параметры конфигурации
Настройка конфигурации Модуля группировки чанков репликации осуществляется путем редактирования параметров настроек в файле application.yml.
Пример файла application.yml для Модуля группировки чанков репликации можно найти в разделе «2.2. Настройка на состав программных средств» Руководства администратора.
В файле конфигурации Модуля группировки чанков репликации могут быть настроены следующие секции:
http- указывается порт веб-сервера;executor- предназначена для указания размера пула для запросов;kafka- настройки параметров подключения к шине данных Apache Kafka;logging- настройки журналирования запросов и ответов;metrics- настройка порта для получения метрик.
2.2.11.3.1. Секция http
В секции http указывается порт веб-сервера.
Например:
http:
port: ${HTTP_PORT:8084}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8084.
2.2.11.3.2. Секция executor
Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.11.3.3. Секция kafka
Секция kafka определяет настройки взаимодействия через ПОДД-адаптер между Поставщиком данных (producer) и Получателем данных (consumer).
В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.
Например:
kafka:
agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
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:
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:
delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
property:
bootstrap.servers: ${kafka.internal.bootstrap.servers}
Параметры конфигурации
topic- префикс для топиков агента ПОДД, напримерAGENT_TOPIC_PREFIX.
2.2.11.3.4. Секция 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.3.5. Секция 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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки DATA-Uploader. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
server:
port: ${SERVER_PORT:8082}
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${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}
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:1000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
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}
scheduler:
redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}
2.2.12.3. Параметры конфигурации
Настройка конфигурации DATA-Uploader осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для DATA-Uploader см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации DATA-Uploader могут быть настроены следующие секции:
poddKafkaUrl- адрес сервера Kafka PODD для DATA-Uploader;prostoreKafkaUrl- адрес сервера Kafka для ядра витрины ProStore;server- указывается порт сервера;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к серверу и базе данных ProStore;redis- настройка подключения к redis;csv-parser- настройка парсера CSV-файлов;active- настройки интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности;delta- настройка обработок загрузок и отправок заданий на загрузку дельт;response- настройка времени хранения ответов по заданию в redis;kafka- настройка распределений отправки топиков;metrics- настройка получения метрик;scheduler- настройки планировщика отложенных заданий.
2.2.12.3.1. Секция server
В секции server указывается порт веб-сервера.
Например:
server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.12.3.2. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.3.3. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
subprotocol- Subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- драйвер для подключения к простору, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к ядру ProStore, например:PS_HOST:t5-prostore-01.ru-central1.internal;port- порт ProStore, например:PROSTOREDB_PORT:9197;initialPoolSize- Prostore начальный размер пула, напримерPS_INITIAL_POOL_SIZE:3;maxPoolSize- размер пула JDBC подключения, например:maxPoolSize: 8.
2.2.12.3.4. Секция 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.3.5. Секция 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- указывается символ разделителя полей;quote-char- указывается символ кавычки;escape-char- указывается символ экранирования. Если символ экранирования и символ кавычки равны «, то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например «поле, «»содержащее двойную кавычку»»» будет считано как поле, «содержащее двойную кавычку»). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».field-as-null- указывается способ определения поля, например:CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
2.2.12.3.6. Секция active
Секция active интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности.
Например:
active:
timeout: ${ACTIVE_TIMEOUT:60}
time-to-live: ${ACTIVE_TTL:180}
Параметры настроек
timeout- интервал между попытками перехода в активное состояние;time-to-live- время жизни ключа флага активности.
2.2.12.3.7. Секция delta
Секция delta предназначена для указания настройки обработок загрузок и отправок заданий на загрузку дельт.
Например:
delta:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
chunk-row-max-count: ${DELTA_CHUNK_ROWS:1000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
Параметры настроек
timeout- максимальный интервал времени между первой считанной записью цикла загрузки и отправкой заданий на загрузку дельт;row-max-count- максимальное количество обработанных записей для старта отправки заданий на загрузку дельт;chunk-row-max-count- количество сообщений в одном чанке;chunk-data-max-size- максимальный размер чанка.
2.2.12.3.8. Секция response
Секция response определяет настройка времени хранения ответов по заданию в redis.
Например:
response:
time-to-live: ${RESPONSE_TTL:36000}
Параметры настроек
time-to-live- Сколько времени Redis будет хранить ответ по заданию (ключ status.<uuid>).
2.2.12.3.9. Секция kafka
Секция kafka позволяет настраивать отправку топиков в заданные модули.
Например:
kafka:
mppw-consumer:
property:
bootstrap.servers: *poddKafkaUrl
group.id: data.uploader.group
auto.offset.reset: earliest
enable.auto.commit: true
mppw-producer:
property:
bootstrap.servers: *poddKafkaUrl
data-producer:
property:
bootstrap.servers: *prostoreKafkaUrl
data-topic-prefix: ${AGENT_TOPIC_PREFIX:}mppw.upload.data
mppw-upload-rq-topic: ${AGENT_TOPIC_PREFIX:}mppw.upload.rq
mppw-upload-rs-topic: ${AGENT_TOPIC_PREFIX:}mppw.upload.rs
Параметры настроек
data-topic-prefix- префикс топика, куда будут отправляться данные;mppw-upload-rq-topic- топик для отправки заданий на MPPW модуль;mppw-upload-rq-topic- топик, в который будут приходить результаты исполнения заданий MPPW модуля.
2.2.12.3.10. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9837.
2.2.12.3.11. Секция scheduler
Секция scheduler предназначена для настроек планировщика отложенных заданий.
Например:
scheduler:
redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}
Параметры настроек
redis-check-request-timeout-таймаут отправки запроса в Redis, напримерDELTA_APPLY_REQUEST_TIMEOUT:60;
2.2.12.3.12. Дополнительное описание параметров
Параметр
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. Настройка REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников
2.2.13.1. Конфигурация модуля REST-Uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: асинхронная загрузка данных из источников, настройка подключения к ядру витрины (секция: prostore), а также другие настройки необходимые для корректной работы модуля.
2.2.13.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки REST-uploader. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
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}
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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${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-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}
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.3. Параметры конфигурации
Настройка конфигурации REST-uploader осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для REST-uploader см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации REST-uploader могут быть настроены следующие секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;send- настраиваются ограничения на размер загружаемого файла;environment- настройки окружения;conditions- включение форматно-логического контроля и поведение при обнаружении ошибок;zookeeper- настройки подключения к Zookeeper;prostore-api-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- настройка подключения к серверу и базе данных ProStore;redis- настройка подключения к redis;auth- указывается секрет для валидации токенов;metrics- настройка получения метрик;scheduler- настройка таймаута отправки запроса в Redis;csv-parser- настройка парсинга CSV;backup- настройки бекапирования.
2.2.13.3.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.13.3.2. Секция executor
Секция executor предназначена для указания размера пула для запросов.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- Размер пула для запросов, напримерEXECUTOR_READER_POOL_SIZE:20
2.2.13.3.3. Секция send
В секции send можно настраивать ограничения на размер загружаемого файла.
Например:
send:
file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:512}
Параметры настроек
file-size-restriction- ограничение на размер загружаемого файла, напримерSEND_FILE_SIZE_RESTRICTION:512
2.2.13.3.4. Секция environment
Секция environment предназначена для настройки среды окружения
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test
2.2.13.3.5. Секция 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.3.6. Секция 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.3.7. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: true
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.3.8. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
subprotocol- subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- драйвер для подключения к Prostore, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к ядру ProStore, например:PS_HOST:t5-prostore-01.ru-central1.internal;port- порт ProStore, например:PS_PORT:9195;initialPoolSize- начальный размер пула ядра ProStore, напримерPS_INITIAL_POOL_SIZE:3;maxPoolSize- максимальный размер пула ядра ProStore, например:PS_MAX_POOL_SIZE:8.
2.2.13.3.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.3.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.3.11. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.13.3.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.3.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:';field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
2.2.13.3.14. Дополнительное описание параметров
Параметр
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.3.15. Секция 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.4. Проверка форматно-логического контроля
Поверка форматно-логического контроля включают в себя обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме и необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.
Наименование проверки |
Код ошибки |
Кирилическое описание |
|---|---|---|
проверка уникальности |
dublicate |
дубликат файла/группы |
Проверка парсинга файла |
parsingErr |
ошибка парсинга: текст ошибки |
проверка кодирования |
encodingErr |
кодировка файла не соответствует кодировке UTF-8 |
Проверка превышения предельного размера файла (больше 512 Мб)| |
tooLargeFile |
слишком большой файл |
Проверка наличия данных в файле |
emptyFile |
пустой файл |
проверка соответствия заголовков инфосхеме |
wrongMetadata |
структура файла не соответствует схеме |
проверка соответствия числа столбцов в строке |
wrongFieldsCount |
некорректное число столбцов в строке |
проверка соответствия типам полей |
wrongFieldType |
значение не соответствует типу требуемый тип |
проверка уникальности полей |
nonUniq |
значение не отвечает требованиям уникальности |
проверка регулярных выражений |
nonMatchRegex |
значение не соответствует регулярному выражению регулярное выражение |
проверка соответствия условию |
nonMatchConstant |
значение не соответствует условию условие |
Таймаут валидации |
validationTimeout |
истек таймаут валидации файла |
2.2.13.4.1. Синхронная проверка ФЛК
Примечание
выполняются вне зависимости от настроек модуля REST-Uploader;
являются блокирующими;
ошибки синхронных проверок возвращаются в теле ответа по REST-API.
К синхронным проверкам относятся:
проверка соответствия инфосхеме:
проверка соответствия имен и количества полей в заголовках;
проверка типа данных;
проверка экранирования данных: проверка соответствия числа столбцов по каждой строке;
проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM отрезаем при загрузке начальные байты
efbbbf);проверка размера файла и наличия данных:
проверка предельного размера загружаемого файла 512Мб;
проверка наличия данных в файле.
2.2.13.4.2. Асинхронная проверка
Примечание
выполняются в зависимости от настроек модуля;
проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля);
список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла.
К асинхронным проверкам относятся:
проверка уникальности полей:
по сочетанию атрибутов (для комплексных ключей);
по заданному атрибуту;
сравнение значения с константой;
соответствие регулярному выражению.
Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов.
2.2.13.4.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.4.2.2. Проверка соответствия заданному значению
Проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id
Проверка осуществляется для значений каждого поля в соответствии с заданным правилом
- Проверка соответствия заданному значению включает в себя:
проверку сравнения с константой („>“, „<“, ‘> =“, „<=“, „=“, „!=“ );
проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html )
2.2.13.4.2.3. Поведение в случае таймаута валидации
Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию
составляет 60 минут.
В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с
обогащением отчета о найденных ошибках ошибкой validationTimeout.
В случае возникновения подобной ошибки рекомендуется:
проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;
увеличить значение
validation-timeoutи повторить загрузку данных.
2.2.13.4.3. Статусная модель
Статус |
Описание |
|---|---|
-1 |
Загрузка данных в буффер |
0 |
Запрос буфферизирован |
1 |
Ожидает открытия дельты |
2 |
В обработке (модулем DATA-Uploader) |
3 |
Успешно обработан |
4 |
Ошибка обработки запроса |
5 |
Идентификатор запроса не обнаружен |
6 |
Форматно-логический контроль |
7 |
Ошибки ФЛК |
2.2.13.5. Спецификация модуля асинхронной загрузки данных из сторонних источников
Данная спецификация описывает возможность загрузки данных в витрину, получение статуса запроса, удаление данных из витрины.
Метод |
URL |
Назначение |
|---|---|---|
POST |
v2/datamarts/{datamart_name}/tables/{table_name}/upload |
Загрузка данных в витрину с учетом реализации ФЛК |
GET |
v2/requests/{request_id}/status |
Получение статуса запроса |
DELETE |
v2/datamarts/{datamart_name}/tables/{table_name}/delete |
Удаление данных из витрины |
POST |
v2/conditions/{datamart}/{table} |
запрос для загрузки списка правил для таблицы, для сохранения в Zookeeper |
PUT |
v2/conditions/{datamart}/{table} |
запрос для добавления правил для таблицы, для сохранения в Zookeeper |
GET |
v2/conditions/{datamart}/{table} |
запрос для получения списка проверок для таблицы, хранящийся в Zookeer |
DELETE |
v2/conditions/{datamart}/{table} |
запрос для удаления всего списка проверок по таблице |
GET |
v2/requests/{request_id}/report |
Возвращает отчет по форматно логическом контроле загружаемых данных в формате .csv |
GET |
v2/group/{group_id}/report |
Запрос возвращает отчет по комплектности группы загружаемых файлов в формате .csv |
openapi: 3.0.1
x-stoplight:
id: yhkpcls7yqrkm
info:
title: Rest-uploader
description: This is a rest-uploader service for datamart filling
contact:
email: okononov@it-one.ru
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: v1-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: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
description: |-
Загрузка данных из внешних источников
curl -vvv -X POST -F upload=@/home/centos/file1.csv http://localhost:8081/v1/datamarts/EDUEJD_SANDBOX_SGK_TEST_REST_UPLOADER/tables/TEST_NULL_TABLE2/upload
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-v1-request-request_id-dtatus
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
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
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-v1-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: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
'/v2/group/{groupId}/report':
get:
summary: Return report group
description: Возвращает отчет по комплектности группы загружаемых файлов
operationId: get-v1-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: {}
'500':
description: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
'/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-v1-datamart_name-tables-table_name-delete
responses:
'200':
description: OK
'400':
description: Bad Request
'401':
description: Invalid token
'403':
description: Invalid identifier
'500':
description: Invalid idetifier
content: {}
tags:
- rest-uploader
description: |-
Удаление данных по массиву первичных ключей
curl -vvv -X POST -d "
{\"primaryKeys\": [[\"1\"]]}
http://localhost:8081/v1/datamarts/EDUEJD_SANDBOX_SGK_TEST_REST_UPLOADER/tables/TEST_NULL_TABLE2/delete
curl -vvv -X POST -F del={путь к файлу}.csv http://хост:порт/v1/datamarts/{datamart_name}/tables/{table_name}/delete
security:
- bearerAuth: []
requestBody:
$ref: '#/components/requestBodies/deleteData'
'/v2/conditions/{datamart}/{table}':
post:
summary: Create verification conditions
description: Формирование правил проверки для датамарта/таблицы
operationId: post-v1-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:
application/x-yaml: {}
responses:
'200':
description: successful operation
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
put:
summary: Update verification conditions
description: Обновление правил проверки для датамарта/таблицы
operationId: put-v1-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:
application/x-yaml: {}
responses:
'200':
description: successful operation
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
get:
summary: Return verification conditions
description: Возвращение правил проверки для датамарта/таблицы
operationId: get-v1-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:
application/x-yaml: {}
'401':
description: Invalid token
content: {}
'403':
description: Invalid idetifier
content: {}
'500':
description: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
delete:
summary: Delete verification conditions
description: Удаление правил проверки для датамарта/таблицы
operationId: delete-v1-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: Invalid idetifier
content: {}
security:
- bearerAuth: []
tags:
- rest-uploader
components:
requestBodies:
uploadData:
description: "загружаемые данные"
required: true
content:
# application/json:
# schema:
# type: array
# 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
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: rest-uploader
2.2.14. Настройка ПОДД-адаптер – Модуль подписки
2.2.14.1. Конфигурация модуля ПОДД-адаптер - Модуль подписок (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: настройка подключения к Prostore (секция: prostore), подключение к Брокеру сообщений Kafka, Zookeeper, а также , порядок обработки запросов между Получателем и Поставщиком данных (секция: kafka), настройка метрик (секция: metrics) и другие настройки необходимые для корректной работы адаптера.
2.2.14.2. Пример файла 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:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
statusEventTopic:
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
# Массив описания 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.3. Параметры конфигурации
Настройка конфигурации ПОДД-адаптера - Модуль подписок осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для ПОДД-адаптера - Модуль подписок см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации ПОДД-адаптера - Модуль подписок могут быть настроены следующие секции:
environment- указывается название окружения (test,prodи т.д.);http-server- настройки порта подключения;executor- масштабирования нагрузки на модуль;zookeeper– параметры подключения к Zookeeper;migration- настройки миграции;prostore-api-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер;prostore- адрес сервера Брокера сообщений Kafka компонента ProStore;subscription- настройки подписки;kafka- настройки параметров подключения к шине данных Apache Kafka;log- настройка сохранения лог-файла;metrics- настройка получения метрик;backup- настройки бекапирования.
2.2.14.3.1. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.14.3.2. Секция http-server
Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http-server:
port: ${HTTP_PORT:8085}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8085.
2.2.14.3.3. Секция executor
Секция executor предназначена для масштабирования нагрузки на модуль. Увеличить или уменьшить нагрузку можно с помощью указания размера пула (reader-pool-size) чтения из Kafka.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.14.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}
Параметры настроек
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.3.5. Секция migration
Секция migration реализована настройка миграции зукипера для задачи бекапирования.
Например:
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.3.6. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore. Параметр prostore-rest-client.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
enabled: true
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.3.7. Секция prostore
Секция prostore определяет настройки подключения к ProStore.
Например:
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
port: ${PS_PORT:9195}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:3}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
statusEventTopic:
topic: ${PS_STATUS_EVENT_TOPIC:status.event}
property:
bootstrap.servers: *prostoreKafkaUrl
group.id: ${AGENT_TOPIC_PREFIX:}replicator-status-event
auto.offset.reset: earliest
enable.auto.commit: false
Параметры настроек
subprotocol- Subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- jdbc-драйвер для подключения к Prostore, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- подключение к ядру ProStore, например:PS_HOST:t5-prostore-01.ru-central1.internal;port- порт ядра ProStore, например:PS_PORT:9195;initialPoolSize- Prostore начальный размер пула, напримерPS_INITIAL_POOL_SIZE:3;maxPoolSize- размер пула JDBC подключения, например:maxPoolSize:8;topic- статусный топик Prostore, напримерPS_STATUS_EVENT_TOPIC:status.event;AGENT_TOPIC_PREFIX- префикс для топиков агента ПОДД.
2.2.14.3.8. Секция subscription
Секция subscription предназначена для настройки подписки на потребителе.
Например
subscription:
consumer:
# режим отмены подписки на потребителе. Возможные значения rename, drop, none
cancel-mode: none
Параметры конфигурации
cancel-mode- режим отмены подписки на потребителе. Возможные значенияrename,drop,none.
2.2.14.3.9. Секция 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;
Статусы с Prostore (Поставщик данных): status.event/delta.notification.
Например:
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.3.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.3.11. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837
Параметры конфигурации
port- порт для получения метрик, например9837.
2.2.14.3.12. Секция 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.2. Пример файла application.yml
Приведем типовую структуру файла и возможные настройки BLOB-адаптер. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
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:1000}
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.3. Параметры конфигурации
Настройка конфигурации BLOB-адаптера осуществляется путем редактирования параметров настроек в файле application.yml.
Пример конфигурации файла application.yml для BLOB-адаптера см. Пример файла application.yml .
В файле конфигурации **BLOB-адаптера**` могут быть настроены следующие секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;vertx- настройка значений вертиклов;kafka- настройки параметров подключения к шине данных Apache Kafka;blob- настройка подключения к Хранилищу BLOB-объектов;logging- настройка сохранения лог-файла;metrics- настройка получения метрик.
2.2.15.3.1. Секция http-server
Секция http-server позволяет настроить взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по протоколу http/https и задать порт, на котором будет открыт доступ к серверу.
Например:
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
enabled- активирована или нет работа с сервером;port- порт, на котором будет открыт доступ к серверу.
2.2.15.3.2. Секция executor
Секция executor предназначена для масштабирования нагрузки на BLOB-адаптер. Увеличить или уменьшить нагрузку можно с помощью указания размера пула (reader-pool-size) чтения из Kafka.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.15.3.3. Секция vertx
Секция vertx определяет настройки количества вертиклов.
Например:
vertx:
web-client:
max-pool-size: 20
Параметры настроек
max-pool-size- максимальное значение для веб-клиента.
2.2.15.3.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.3.5. Секция blob
Секция blob-storage предназначена для настройки:
размера выгружаемого чанка 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.3.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.3.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
Приведем типовую структуру файла application.yml и возможные настройки Сервиса Формирования документов. Следует учитывать, что в конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8080}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
database: ${PS_DATABASE:}
user: ${PS_USER:}
password: ${PS_PASSWORD:}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
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}
forms:
key: value
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.
Пример конфигурации файла application.yml для Сервиса Формирования документов см. в разделе Пример файла application.yml Руководства администратора.
В файле конфигурации Сервиса Формирования документов могут быть настроены следующие секции:
http-server- указывается порт веб-сервера;executor- предназначена для указания размера пула для запросов;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore. Если false - будет использоваться JDBC-драйвер.prostore- настройки подключения 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.enabled со значением
false позволяет переключить исполнение запросов через JDBC-драйвер.
Например:
prostore-rest-client:
# Признак использования rest-api для взаимодействия с простором. Если false - будет использоваться jdbc драйвер
enabled: ${PS_REST_CLIENT_ENABLED:true}
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. Секция prostore
Секция prostore - предназначена для настройки подключения Prostore.
Например:
prostore:
subprotocol: ${PS_SUBPROTOCOL:prostore}
driver: ${PS_DRIVER:ru.datamart.prostore.jdbc.Driver}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
database: ${PS_DATABASE:}
user: ${PS_USER:}
password: ${PS_PASSWORD:}
initialPoolSize: ${PS_INITIAL_POOL_SIZE:5}
maxPoolSize: ${PS_MAX_POOL_SIZE:8}
additional-props:
key: value
Параметры настроек
subprotocol- subprotocol для JDBC, напримерPS_SUBPROTOCOL:prostore;driver- имя класса JDBC драйвера, напримерPS_DRIVER:ru.datamart.prostore.jdbc.Driver;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;database- БД Prostore;user- данные пользователя Prostore;initialPoolSize- начальное число подключений к Prostore, напримерPS_INITIAL_POOL_SIZE:5;maxPoolSize- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.16.2.5. Секция metrics
В секции metrics указывается порт для получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для получения метрик, напримерMETRICS_PORT:9837
2.2.16.2.6. Секция 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.7. Секция 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.8. Секция 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}
forms:
key: value
Параметры настроек
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.9. Секция 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-файла
2.2.16.3.3. Pebble-шаблон для формирования xml-документа
2.2.16.3.4. Pebble-шаблон для формирования pdf-документа
2.2.17. Настройка REST-адаптера
2.2.17.1. 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,postи т.д. ;operationId- определениеoperationIdдля связки с файлом шаблона;responses- описание параметров ответа.
2.2.17.2. Шаблоны
Для парсинга и обогащениe запросов используются шаблоны.
В качестве языка шаблонов используется pebble со следующими дополнениями:
функция
xpath(expression)- возвращает вычисленное выражение на входящем документе;тэг
{% mtom %} some content {% endmtom %}- отправляет внутренность вложением;функция
sql(var, sql, param1, param2, ...)- выполняетsqlс параметрами, результат записывается в переменнуюvar.
Пример формирования шаблона приведен в файле sample.peb.
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.
Пример конфигурации файла application.yml для Сервиса генерации уникального номера см. в разделе Пример файла 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 реализована настройка миграции зукипера для задачи бекапирования.
Например:
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. Настройка Arenadata Cluster Manager (ADCM)
Подробная инструкция по настройке Arenadata Cluster Manager (ADCM) приведена в официальной документации разработчика (https://docs.arenadata.io/adcm/ ).
2.2.20. Настройка 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.21. Настройка сервиса журналирования
Сервис журналирования позволяет работать с логами прикладных модулей запущенных в средах 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 прописать путь до конфигураций fluent-bit, иначе в контейнер логи не подтянутся. Например, <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>
Описать конфигурацию для Fluent-bit (подробнее см документацию )
[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
2.2.22. Настройка подсистемы мониторинга
Подсистема мониторинга предназначена для регистрации отладочной информации прикладных модулей и компонентов Platform V в едином журнале.
Настройка подсистемы мониторинга должна применяться к каждому модулю.
Ниже указана последовательность действий для выставления метрик в формате Prometheus из прикладного приложения, написанного на Spring Boot.
Добавить зависимости на Spring Boot Actuator и Micrometer в maven-репозиторий.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Указать порт Actuator, фильтр включенных endpoints и системные теги, которые автоматически будут добавлены к прикладным метрикам (файл application.yml).
server:
port: 8080
management:
endpoint:
health.show-details: always
endpoints:
web:
exposure:
include: '*'
metrics:
tags:
application: ${spring.application.name}
namespace: ${POD_NAMESPACE:local}
pod: ${POD_NAME:local}
node_name: ${NODE_NAME:local}
Создать прикладные метрики в проекте (с помощью micrometer).
@RestController
public class CounterController {
private static final String COUNTER_WITH_TAG_NAME = "simple.counterWithTags";
private static final String COUNTER_WITH_TAG_DESCRIPTION = "Just a simple counter with tags";
private static final String TAG_NAME_1 = "terbank";
private static final String TAG_NAME_2 = "vsp";
private final MeterRegistry meterRegistry;
private Counter simpleCounter;
private Counter simpleCounterWithTags;
private Counter simpleCounterWithTags2;
public CounterController(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
/**
* Инициализация метрик типа Counter
*/
@PostConstruct
public void init() {
simpleCounter = Counter.builder("simple.counter")
.description("Just a simple counter")
.register(meterRegistry);
simpleCounterWithTags = Counter.builder(COUNTER_WITH_TAG_NAME)
.description(COUNTER_WITH_TAG_DESCRIPTION)
.tag(TAG_NAME_1, "sib")
.tag(TAG_NAME_2, "111")
.register(meterRegistry);
simpleCounterWithTags2 = Counter.builder(COUNTER_WITH_TAG_NAME)
.description(COUNTER_WITH_TAG_DESCRIPTION)
.tag(TAG_NAME_1, "msk")
.tag(TAG_NAME_2, "111")
.register(meterRegistry);
}
@PutMapping("/counter")
public String incrementCounter() {
simpleCounter.increment();
return String.format("Counter has been increases\nCurrent value: %s", simpleCounter.count());
}
@PutMapping("/counter-with-tags/terbank/sib")
public String incrementCounterTags1() {
simpleCounterWithTags.increment(1);
return String.format("Counter has been increases\nCurrent value: %s", simpleCounterWithTags.count());
}
@PutMapping("/counter-with-tags/terbank/msk")
public String incrementCounterTags2() {
simpleCounterWithTags2.increment(2);
return String.format("Counter has been increases\nCurrent value: %s", simpleCounterWithTags2.count());
}
}
С помощью REST API сервиса возможна генерация собственных метрик типа Counter.
curl -X PUT "MONITOR_URL/counter" -H "accept: */*"
curl -X PUT "MONITOR_URL/counter-with-tags/terbank/msk" -H "accept: */*"
В каждом из ответов можно увидеть, что общий счетчик метрик был увеличен на n-ное количество. Пример:
Counter has been increases
Current value: 1.0
2.2.22.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: 8080
targetPort: 8080
- name: http-actuator
port: 8081
targetPort: 8081
selector:
app: monitoring-rest
2.2.22.2. Grafana: графики мониторинга
Графики мониторинга метрик можно увидеть в Grafana.
Логин/пароль для входа в Grafana: viewer/viewer.
select TIME_FLOOR(__time,'PT1M') as "time",
avg("value") as "avg_value",
"labels.app" as "app",
name as name
from "unimon.gostech_task"
WHERE
name like '%counter%'
and "labels.namespace"='gt-sol-test-coreplatform-01'
and ("labels.application"='monitoring-rest'
OR "labels.app"='monitoring-rest'
OR "labels.SUBSYSTEM"='monitoring-rest')
group by TIME_FLOOR(__time,'PT1M'), "labels.app", name
Также существуют другие типы метрик (DistributionSummary, Gauge, Timer), генерация которых реализована в demo-приложении.
2.2.23. Установка компонента сбора данных запросов и ответов Витрины данных
Компонент сбора данных запросов и ответов Витрины данных реализован с целью проведения бизнес-мониторинга ИЭП процессов обработки запросов типовым ПО витрины данных, как в целом, так и в части функционирования отдельных витрин для последующей передачи данных в СЦЛ.
2.2.23.1. Процесс установки
Общий процесс установки состоит из следующих действий:
Настройка логирования приложений
Установка и настройка Vector.
Установка и настройка HaProxy.
Установка и настройка fluentbit.
2.2.23.1.1. Настройка логирования приложений
На стороне приложений:
ПОДД-адаптер - Модуль исполнения запросов;
ПОДД-адаптер – Модуль MPPR;
BLOB-адаптер;
ПОДД-адаптер-Модуль подписок;
Сервис формирования документов
необходимо настроить формирование логов в формате JSON.
Для этого необоходимо в файле 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/
Настройка Vector
Пример настройки 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. Установка и настройка fluentbit
Установка производится по официальной документации: (https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit).
Далее необходимо настроить fluentbit на чтение файлов логов приложений.
Пример файла конфигурации 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.