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}
  1. Настройка 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 - интервал времени завершения задачи, выполняемой в Сервисе исполнения запросов.

  1. Оптимизация работы сокета 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.

  1. Настройки для EDML операторов:

  • EDML_DATASOURCE - тип СУБД-источника;

  • EDML_DEFAULT_CHUNK_SIZE – размер chunk по умолчанию;

  • EDML_STATUS_CHECK_PERIOD_MS - период проверки статуса плагина в миллисекундах;

  • EDML_FIRST_OFFSET_TIMEOUT_MS - интервал времени ожидания до таймаута в миллисекундах при работе с первым смещением;

  • EDML_CHANGE_OFFSET_TIMEOUT_MS - интервал времени ожидания до таймаута в миллисекундах при работе с первым смещением в топике Kafka.

  1. Настройка 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.

  1. Настройка Kafka-серверов:

  • KAFKA_INPUT_STREAM_TIMEOUT_MS – интервал времени ожидания (в миллисекундах) входного потока данных для брокера сообщений Kafka до достижения таймаута;

  • KAFKA_STATUS_EVENT_ENABLED - разрешение на публикацию событий;

  • KAFKA_STATUS_EVENT_TOPIC - наименование топика Kafka, в который публикуются события;

  • STATUS_MONITOR_URL - сетевой адрес, порт и путь к Сервису мониторинга статусов Kafka.

  1. Настройки кэширования запросов:

  • 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 сервер содержит два конфигурационных файла:

  • application.yaml - конфигурирует поведение сервера;

  • credentials.yaml - конфигурирует представление сервера.

2.2.2.1.1. Конфигурация файла application.yml
storage: # Блок параметров хранения информации
  adapter: redis # На текущий момент поддерживается только redis
  pool: # Настройка подключений к redis
      - host: 127.0.0.1
      port: 6379
  max_pool_size: 20 # Максимальный размер пула соединений
  user: "" # Пользователь для подключения к redis
  password: "" # Пароль

access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
  black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
  white_list: [ ] # Указывает список потребителей, для которых доступ разрешен

request:
  timeout: 20s # Таймаут исполнения запросов
  base_path: smevql/api/v1 # Префикс для всех роутов
  max_nested_level: 5 # Предельная вложенность запрашиваемых ресурсов
  pagination:
      default: 100 # Количество элементов на странице по умолчанию
      max: 1000 # Максимальное количество элементов на странице
  logging:
      long:
      duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
      percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
  limits: # Блок параметров конфигурации лимитов
      total: # Параметры по всем запросам
      value: 500000 # Общее число запросов в период времени
      period: 1D # Период лимитирования
      mnemonic: # Блок настроек лимитирования по потребителям
      value: 5000 # Число запросов в период времени
      period: 1D # Период лимитирования
      purpose: # Блок настроек лимитирования по целям
      value: 5000 # Число запросов в период времени
      period: 1D # Период лимитирования
      user: # Блок настроек лимитирования по пользователям
      value: 1000 # Число запросов в период времени
      period: 1D # Период лимитирования
      records_ttl:
      day: 1M # Период хранения дневной статистики
      week: 1M # Период хранения статистики за неделю
      month: 1Y # Период хранения статистики за месяц
      year: 2Y # Период хранения статистики за год
  async: # Блок настроек асинхронного выполнения запросов
      request_in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
      read_timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам

delta:
  commit_interval: 60s # Интервал фиксации дельты источника при изменении данных
  force_commit_interval: 30m # Интервал принудительной фиксации дельт всех источников

state:
  max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
  max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины

index_recommendations: # Рекомендации по аналитике
  period: 7D  # Период формирования. 7 дней

push: # Настройки отправки push уведомлений
  notification_path: /notify # Шаблон пути агента, на который необходимо отправлять нотификации
  state_machine_enabled: true # Признак публикации нотификаций на основе событий стейт машины
  retry:
      max_attempts: 3 # Количество попыток отправки нотификации
      min_period: 5s # Минимальный период ожидания перед повторной попыткой
      max_period: 10s # Максимальный период ожидания перед повторной попыткой

agent: # Параметры конфигурирования агента ПОДД
  host: 127.0.0.1 # Хост агента
  port: 8171 # Порт приема api-gateway запросов
  mnemonic: "" # Мнемоника агента

signature: # Блок настроек механизма подписания
  enabled: true # Признак включения подписания и проверки подписи
  validate_enabled: false # Признак предоставления дополнительного URL проверки подписи
  algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
  serial_number: "" # Серийный номер ключа подписи
  alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
  notarius: # Блок настроек сервиса Notaris, используемый для подписания
      host: localhost # Хост, на котором доступен Notaris
      port: 8080 # Порт, на котором доступен Notaris

Настройка конфигурации СМЭВ QL сервера осуществляется путем редактирования параметров настроек в файле application.yml.

В файле конфигурации СМЭВ QL сервера могут быть настроены следующие секции:

  • storage - Управление подключением к внутреннему хранилищу данных СМЭВ-QL;

  • access - Блок настроек доступа к выполнению операций чтения данных и операций стейт-машины;

  • request - Блок настроек исполнения запросов;

  • delta - Управление принудительными коммитами дельт витрин данных;

  • state - Установка ограничений в машинах-состояний;

  • index_recommendations - Рекомендации по аналитике;

  • push - Настройки отправки push уведомлений;

  • agent - Параметры конфигурирования агента ПОДД;

  • signature - Блок настроек механизма подписания.

2.2.2.1.1.1. Секция storage

В секции storage хранятся параметры хранения информации, например:

storage: # Блок параметров хранения информации
  adapter: redis # На текущий момент поддерживается только redis
  pool: # Настройка подключений к redis
    - host: 127.0.0.1
      port: 6379
  max_pool_size: 20 # Максимальный размер пула соединений
  user: "" # Пользователь для подключения к redis
  password: "" # Пароль

Параметры конфигурации

  • adapter - Система хранения данных, на текущий момент поддерживается только redis;

  • pool - Указание перечня host и port для подключения к хранилищу данных;

  • host - Адрес хоста;

  • port - Порт хоста;

  • max_pool_size - Максимальный размер пула соединений;

  • user - Пользователь для подключения к redis;

  • password - Пароль подключения.

2.2.2.1.1.2. Секция access

В секции access хранятся настроек доступа к выполнению операций чтения данных и операций стейт-машины. Допускается задание черного или белого списка.

Например:

access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
  black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
  white_list: [ ] # Указывает список потребителей, для которых доступ разрешен

Параметры конфигурации

  • black_list - массив потребителей, для которых доступ запрещен;

  • white_list - массив потребителей, для которых доступ разрешен.

2.2.2.1.1.3. Секция request

В секции request хранятся настройки исполнения запросов, например:

request:
  timeout: 20s # Таймаут исполнения запросов
  base_path: smevql/api/v1 # Префикс для всех роутов
  max_nested_level: 5 # Предельная вложенность запрашиваемых ресурсов
  pagination:
      default: 100 # Количество элементов на странице по умолчанию
      max: 1000 # Максимальное количество элементов на странице
  logging:
      long:
      duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
      percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
  limits: # Блок параметров конфигурации лимитов
      total: # Параметры по всем запросам
      value: 500000 # Общее число запросов в период времени
      period: 1D # Период лимитирования
      mnemonic: # Блок настроек лимитирования по потребителям
      value: 5000 # Число запросов в период времени
      period: 1D # Период лимитирования
      purpose: # Блок настроек лимитирования по целям
      value: 5000 # Число запросов в период времени
      period: 1D # Период лимитирования
      user: # Блок настроек лимитирования по пользователям
      value: 1000 # Число запросов в период времени
      period: 1D # Период лимитирования
      records_ttl:
      day: 1M # Период хранения дневной статистики
      week: 1M # Период хранения статистики за неделю
      month: 1Y # Период хранения статистики за месяц
      year: 2Y # Период хранения статистики за год
  async: # Блок настроек асинхронного выполнения запросов
      request_in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
      read_timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам

Параметры конфигурации

  • timeout - Таймаут исполнения запросов;

  • base_path - Префикс для всех роутов;

  • max_nested_level - Предельная вложенность запрашиваемых ресурсов;

  • pagination - Управление количеством элементов при ответе;

  • logging - Управление логированием «долгих» запросов;

  • limits - Установка ограничений на количество запросов;

  • async - Блок настроек асинхронного выполнения запросов.

2.2.2.1.1.4. Секция delta

В секции delta осуществляется управление принудительными коммитами дельт витрин данных.

Например:

delta:
  commit_interval: 60s # Интервал фиксации дельты источника при изменении данных
  force_commit_interval: 30m # Интервал принудительной фиксации дельт всех источников

Параметры конфигурации

  • commit_interval - Интервал фиксации дельты источника при изменении данных, например 60s;

  • force_commit_interval - Интервал принудительной фиксации дельт всех источников, например 30s.

Если commit_interval: 0 и force_commit_interval: 0, то для добавления/изменения/удаления данных в Prostore не используется механизм открытия и закрытия дельт, а данные меняются прямым запросом.

При этом возникают следующие ограничения:

  • В бекап текущей реализации данные, софрмированние вне дельт, не попадают;

  • В результаты запросов к материализованным представлениям данные , софрмированние вне дельт, не попадают;

  • В рамках подписок данные , софрмированние вне дельт, не передаются.

2.2.2.1.1.5. Секция state

В секции state устанавливаются ограничения в стейт машинах.

Например:

state:
  max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
  max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины

Параметры конфигурации

  • max_nested_event - Максимально допустимая вложенность связанных переходов стейт машины, например 5;

  • max_updated_rows - Максимальное количество обновляемых строк при событии стейт машины, например 1.

2.2.2.1.1.6. Секция index_recommendations

Секция index_recommendations содержит рекомендации по аналитике, например:

index_recommendations: # Рекомендации по аналитике
  period: 7D  # Период формирования. 7 дней

Параметры конфигурации

  • period - устанавливается период формирования аналитики, например 7 дней.

2.2.2.1.1.7. Секция push

Секция push содержит настройки сервиса формирования push-уведомлений.

Например:

push: # Настройки отправки push уведомлений
  notification_path: /notify # Шаблон пути агента, на который необходимо отправлять нотификации
  state_machine_enabled: true # Признак публикации нотификаций на основе событий стейт машины
  retry:
    max_attempts: 3 # Количество попыток отправки нотификации
    min_period: 5s # Минимальный период ожидания перед повторной попыткой
    max_period: 10s # Максимальный период ожидания перед повторной попыткой

Параметры конфигурации

  • notification_path - Шаблон пути агента, на который необходимо отправлять нотификации;

  • state_machine_enabled - Признак публикации нотификаций на основе событий стейт машины;

  • retry - настройки попыток отправок нотификаций.

2.2.2.1.1.8. Секция agent

В секции agent указываются параметры подключения к агенту СМЭВ4 поставщика, например:

agent: # Параметры конфигурирования агента ПОДД
  host: 127.0.0.1 # Хост агента
  port: 8171 # Порт приема api-gateway запросов
  mnemonic: "" # Мнемоника агента

Параметры конфигурации

  • host - Хост агента;

  • port - Порт приема api-gateway запросов;

  • mnemonic - Мнемоника агента.

2.2.2.1.1.9. Секция signature

В секции signature настраивается управление механизмом цифровой подписи.

Например:

signature: # Блок настроек механизма подписания
  enabled: true # Признак включения подписания и проверки подписи
  validate_enabled: false # Признак предоставления дополнительного URL проверки подписи
  algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
  serial_number: "" # Серийный номер ключа подписи
  alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
  notarius: # Блок настроек сервиса Notaris, используемый для подписания
      host: localhost # Хост, на котором доступен Notaris
      port: 8080 # Порт, на котором доступен Notaris

Параметры конфигурации

  • enable - Включение (true), отключение (false) подписи ответов и проверки подписей других источников;

  • validate_enabled - Признак предоставления дополнительного URL проверки подписи (доступность вызова REST-метода проверки подписи);

  • algorithm - Алгоритм формирования подписи. На текущий момент доступен только GOST3410_2012_256;

  • serial_number - Серийный номер ключа подписи;

  • alias - Алиас ключа. Заполняется либо серийный номер, либо алиас;

  • notarius - Настройки подключения (host и port) к модулю крипрографии notarius.

2.2.2.1.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
    mnemonic: smev_ql_mnemonic
    instance: smev_ql_instance

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 для взаимодействия с простором.
  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

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:
  # Признак использования rest-api для взаимодействия с простором.
  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. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod)

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - Название окружения, например ENVIRONMENT_NAME:test.

2.2.3.3.7. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  retryPolicy:
    baseSleepTime: 1000
    maxRetries: 3
    maxSleepTime: 3000
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connect-string - адреса серверов для подключения к Zookeeper (разделитель - ,);

  • baseSleepTime - начальное значение таймаута ожидания при повторных запросах;

  • maxRetries - максимальное количество повторных запросов;

  • maxSleepTime - максимальное значение таймаута ожидания при повторных запросах.

2.2.3.3.8. Секция migration

Секция migration реализована настройка миграции зукипера для задачи бекапирования.

Например:

migration:
  zk-enabled: ${MIGRATION_ZK_ENABLE:false}

Параметры настроек

  • enabled - подключение миграции, например {MIGRATION_ENABLE:false}.

2.2.3.3.9. Секция paramstorage

В секции paramstorage указывается корневой путь до сервера Zookeeper для механизма параметров (ключ-значение).

Например:

paramstorage:
  base-path: '/smev/paramstorage'
2.2.3.3.10. Секция deltastorage

В секции deltastorage указывается корневой путь до сервера Zookeeper для механизма дельт.

Например:

deltastorage:
  base-path: '/smev/deltastorage'
2.2.3.3.11. Секция sign

Секция sign предназначена для формирования и проверки электронной подписи(ЭП) в SOAP-пакетах СМЭВ3.

Например:

sign:
  digest-algorithm: 1.2.643.7.1.1.2.2
  • digest-algorithm - алгоритм ключа проверки электронной подписи.

2.2.3.3.12. Секция blob

Секция blob предназначена для настройки взаимодействия модуля СМЭВ3-адаптер с:

  • BLOB-адаптером для считывания BLOB-полей (см. Взаимодействие через СМЭВ3-адаптер);

  • FTP-сервером СМЭВ3, на который модуль СМЭВ3-адаптер выгружает содержимое BLOB-полей и/или большие табличные данные.

Например:

blob:
  # настройки подключения к BLOB адаптеру
  blob-source:
    host: 'localhost'
    port: 8080
    path:
  ftp-destination:
    #хост фтп смева
    host: localhost
    #порт фтп смева
    port: 21
    #корневой каталог
    #path: aaa/bbb/ccc
    #пользователь
    user: user
    #пароль
    password: 123
  • blob-source - настройка подключения к BLOB-адаптеру;

  • ftp-destination - настройка подключения к FTP-серверу СМЭВ3.

2.2.3.3.13. Секция rest

Секция rest предназначена для настройки возможности выполнения REST-запросов к СМЭВ3-адаптеру и получения ответов на них.

Например:

rest:
  #вкл/выкл
  enabled: false
  #порт на котором будет запущена рестовая ручка
  port: 8080
  # путь get запроса
  get: /le
  #путь post запроса
  post: /le
  #обрабатываемый шаблон
  template: smev3-adapter/templates/smev.xml.peb
2.2.3.3.14. Секция scheduler

Секция scheduler предназначена для настройки планировщика заданий в случае, если планируется использовать механизм отправки дельт по расписанию.

Например:

scheduler:
  enabled: true
  interval: PT30s
  template: templates/pfr-delta.peb

Параметры настроек

  • enabled - включение планировщика заданий;

  • interval - интервал между отправкой дельт;

  • template - путь к Pebble-шаблону;

2.2.3.3.15. Секция pool

В секции pool указывается размер прерываемого кода.

Например:

pool:
  reader-executor: 20
  schedule-executor: 1
  restExecutor: 1
  logExecutor: 20
2.2.3.3.16. Секция logging

В секции logging настраивается логирование работы модуля.

Например:

logging:
  request-response:
    smev-request: false
    smev-response: false

Параметры настроек

  • smev-request - логирование запросов;

  • smev-response - логирование ответов.

2.2.3.3.17. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${SMEV3_BACKUP_ZK_PATH:/${environment.name}/smev3-adapter}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${S3A_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.3.3.18. Секция spf

В секции spf указываются параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.

Например:

spf:
  host: ${SPF_HOST:localhost}
  port: ${SPF_PORT:8080}
  # Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
  params: {}

Параметры настроек

  • host - адрес подключения, например {SPF_HOST:localhost};

  • port - порт подключения, например: {SPF_PORT:8080};

  • params - Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ.

2.2.4. Настройка CSV-Uploader

2.2.4.1. Конфигурация CSV-uploader (application.yml)

Файл application.yml – основной конфигурационный файл CSV-uploader, в котором задана логика и порядок работы загрузчика, а также другие настройки необходимые для корректной работы адаптера.

2.2.4.1.1. Пример файла application.yml
# Kafka Prostore
.kafkaUrl: &kafkaUrl ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

http-server:
        # Порт для старта веб сервера
        port: ${HTTP_PORT:8080}
        # Включить веб-сервер
        enabled: ${HTTP_ENABLED:true}

send:
        # Размер отправляемой порции данных
        chunk-row-count: ${CHUNK_ROW_COUNT:1000}
        # Размер буфера на чтение файла
        file-buffer-size: ${FILE_BUFFER_SIZE:1048576}
        # Количество Job на чтение
        read-job-count: ${READ_JOB_COUNT:4}
        # Размер Channel для сериализации
        serialize-channel-size: ${SERIALIZE_CHANNEL_SIZE:20}
        # Количество Job на сериализацию
        serialize-job-count: ${SERIALIZE_JOB_COUNT:4}
        # Размер Job на отправку
        send-channel-size: ${SEND_CHANNEL_SIZE:20}
        # Количество Job на отправку
        send-job-count: ${SEND_JOB_COUNT:4}
        # Ограничение на размер оправляемого файла (мегабайты)
        file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}

logging.level:
        root: info
        ru.itone: debug

environment:
        # Название окружения
        name: ${ENVIRONMENT_NAME:test}
        # Папка для ошибочных файлов
        error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}

zookeeper:
        # Адрес сервера zookeeper
        connection-string: ${ZK_CONNECTION:localhost}
        # Таймаут сессии
        session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
        # Таймаут подключения
        connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
        chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

migration:
        enabled: ${MIGRATION_ENABLE:false}

prostore-rest-client:
        # Признак использования rest-api для взаимодействия с простором.
        enabled: ${PS_REST_CLIENT_ENABLED:true}
        host: ${PS_HOST:localhost}
        port: ${PS_PORT:9195}
        http:
                max-pool-size: ${PS_MAX_POOL_SIZE:8}

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.

  • 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: ${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. Секция 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.11. Секция upload

В секции upload реализована настройка требования токена для аутентификации на REST-Uploader (если true, то при переключении на вкладку Загрузка появляется модальное окно для задания токена в текстовом виде и кнопка Сохранить)

Например:

upload:
        jwt-auth: ${JWT_AUTH:false}

Параметры конфигурации

  • jwt-auth - требование токена для аутентификации на REST-Uploader, например {JWT_AUTH:false}.

2.2.4.2.12. Секция 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.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.

Дополнительное описание параметров

  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например "поле, ""содержащее двойную кавычку""" будет считано как поле, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр 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.14. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.4.2.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.4.2.16. Секция 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-connector рекомендуется установить переменную окружения {JET_POLL_DURATION:1000};

  • kafka-poll-buffer-size - максимальный размер буфера прочитанных, но еще не загруженных сообщений, например: {JET_POLL_BUFFER:2000};

  • db-records-buffer-size - максимальное количество строк, загружаемых в таблицу за один проход, например: {JET_DB_RECORDS_BUFFER:2000}.

Таблица 2.13 Область применения

Режим/СУБД

ADB

ADP

ADQM

ADG

Чтение

Нет

Нет

Нет

Нет

Запись

В перспективе

Да

Нет

Нет

Чтобы воспользоваться Jet коннетором требуется вместо upload external table создавать readable external table, указывающую на топик, как отражено в документации Prostore

В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Простора един для всех поддерживаемых СУБД. Конкретная СУБД указывается лишь в настройках Простора.

Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.

Предупреждение

Jet коннектор в настоящее время применим лишь для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании JET коннетора с другими базами должна появиться ошибка

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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

printable-forms-service:
  host: ${PFS_HOST:localhost}
  port: ${PFS_PORT:8080}
  pool-size: ${PFS_POOL_SIZE:10}
  timeout: ${PFS_TIMEOUT:30}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.external.topic.prefix}query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    query-cancel-request:
      topic: ${kafka.external.topic.prefix}cancel.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}cancel.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-request:
      topic: ${kafka.external.topic.prefix}metadata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-new-data-request:
      topic: ${kafka.external.topic.prefix}metadata.newdata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    statistics-request:
      topic: ${kafka.external.topic.prefix}statistics.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    report-request:
      topic: ${kafka.external.topic.prefix}procedure.query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}report.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    query-estimation-result: ${kafka.external.topic.prefix}query.estimation.rs
    query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
    query-cancel-error: ${kafka.external.topic.prefix}cancel.err
    metadata-result: ${kafka.external.topic.prefix}metadata.rs
    metadata-error: ${kafka.external.topic.prefix}metadata.err
    metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
    metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
    statistics-result: ${kafka.external.topic.prefix}statistics.rs
    statistics-error: ${kafka.external.topic.prefix}statistics.err
    report-result: ${kafka.external.topic.prefix}query.rs
    report-error: ${kafka.external.topic.prefix}query.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

statistics:
  enabled: ${STATISTICS_ENABLED:false}
  timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
  datamarts:
    - name: demo_dev
      tables:
        - name: all_types
          columns:
            - varchar_c
            - char_c
            - bigint_c

logging:
  request-response:
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
    pf-request: ${PF_REQUEST_LOG_ENABLED:false}
    pf-response: ${PF_RESPONSE_LOG_ENABLED:false}

metrics:
  port: ${METRICS_PORT:9837}

2.2.5.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;

  • force-llr-for-all - выполнение всех запросов через LLR, например FORCE_LLR_FOR_ALL:false;

  • llr-rows-limit - ограничение выгрузки через ЛЛР, при использовании в запросе лимита со значением меньшим, чем указанное значение, например LLR_ROWS_LIMIT:200, будет использован режим LLR;

  • fetch-size - размер выгрузки через JDBC, например FETCH_SIZE:1000.

Внимание

Для опции force-llr-for-order параметр false можно устанавливать только при развертывании витрины на единственной БД ADP

2.2.5.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: 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. Секция 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.9. Секция kafka

В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.external.topic.prefix}query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    query-cancel-request:
      topic: ${kafka.external.topic.prefix}cancel.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}cancel.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-request:
      topic: ${kafka.external.topic.prefix}metadata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-new-data-request:
      topic: ${kafka.external.topic.prefix}metadata.newdata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    statistics-request:
      topic: ${kafka.external.topic.prefix}statistics.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    report-request:
      topic: ${kafka.external.topic.prefix}procedure.query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}report.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    query-estimation-result: ${kafka.external.topic.prefix}}query.estimation.rs
    query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
    query-cancel-error: ${kafka.external.topic.prefix}cancel.err
    metadata-result: ${kafka.external.topic.prefix}metadata.rs
    metadata-error: ${kafka.external.topic.prefix}metadata.err
    metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
    metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
    statistics-result: ${kafka.external.topic.prefix}statistics.rs
    statistics-error: ${kafka.external.topic.prefix}statistics.err
    report-result: ${kafka.external.topic.prefix}query.rs
    report-error: ${kafka.external.topic.prefix}query.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

  • topic - префикс для топиков агента ПОДД, например AGENT_TOPIC_PREFIX.

2.2.5.3.10. Секция statistics

Секция statistics предназначена для управления статистикой.

Например:

statistics:
  enabled: ${STATISTICS_ENABLED:false}
  timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
  datamarts:
    - name: demo_dev
      tables:
        - name: all_types
          columns:
            - varchar_c
            - char_c
            - bigint_c

Параметры конфигурации

  • enabled - включение (true)/ выключение (false) расчета статистики, например STATISTICS_ENABLED:false;

  • timeout-min - время обновления статистики (минуты), например STATISTICS_TIMEOUT_MIN:60.

2.2.5.3.11. Секция logging

Секция logging предназначена для настройки параметров логирования.

Например:

logging:
  request-response:
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
    pf-request: ${PF_REQUEST_LOG_ENABLED:false}
    pf-response: ${PF_RESPONSE_LOG_ENABLED:false}

Параметры конфигурации

  • query-request - журналирование query запросов, например QUERY_REQUEST_LOG_ENABLED:false;

  • query-response - журналирование query ответов, например QUERY_RESPONSE_LOG_ENABLED:false;

  • pf-request - журналирование запросов на сервис формирования документов, например PF_REQUEST_LOG_ENABLED:false;

  • pf-response - журналирование ответов от сервиса формирования документов, например PF_RESPONSE_LOG_ENABLED:false.

2.2.5.3.12. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.6. Настройка ПОДД-адаптер – Модуль MPPR

2.2.6.1. Конфигурация ПОДД-адаптера - Модуль MPPR (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: получение входящих запросов, их обработка, а также настройка подключения к ядру витрины (секция: prostore), настройка метрик (секция: metrics), а также другие настройки необходимые для корректной работы адаптера.

2.2.6.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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

  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:30

  • delete-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:
  # Признак использования rest-api для взаимодействия с простором.
  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. Секция 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.7. Секция metrics

Секция metrics предназначена для настройки параметров метрик:

Например:

metrics:
  port: ${METRICS_PORT:9843}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9843.

2.2.6.3.8. Секция 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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

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: 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. Секция 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.12. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9843}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9843.

2.2.7.3.13. Секция 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-connector рекомендуется установить переменную окружения {JET_POLL_DURATION:1000};

  • kafka-poll-buffer-size - максимальный размер буфера прочитанных, но еще не загруженных сообщений, например: {JET_POLL_BUFFER:2000};

  • db-records-buffer-size - максимальное количество строк, загружаемых в таблицу за один проход, например: {JET_DB_RECORDS_BUFFER:2000}.

Таблица 2.14 Область применения

Режим/СУБД

ADB

ADP

ADQM

ADG

Чтение

Нет

Нет

Нет

Нет

Запись

В перспективе

Да

Нет

Нет

Чтобы воспользоваться Jet коннетором требуется вместо upload external table создавать readable external table, указывающую на топик, как отражено в документации Prostore

В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Простора един для всех поддерживаемых СУБД. Конкретная СУБД указывается лишь в настройках Простора.

Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.

Предупреждение

Jet коннектор в настоящее время применим лишь для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании JET коннетора с другими базами должна появиться ошибка

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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

# общие настройки подключения к кафке
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.

  • 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. Секция 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.6. Секция 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.7. Секция 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.8. Секция 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.9. Секция 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.10. Секция 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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

# общие настройки подключения к кафке
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.

  • 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. Секция 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.6. Секция 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.7. Секция 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.8. Секция 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.9. Секция 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.10. Секция 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 – топик Kafka query.tp.bin, являющийся источником данных;

  • destination_topic - топик Kafka query.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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}


redis:
  type: ${REDIS_TYPE:STANDALONE}
  connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
  password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
  max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
  max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
  max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}

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.

  • 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. Секция 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.4. Секция 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.5. Секция active

Секция active интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности.

Например:

active:
    timeout: ${ACTIVE_TIMEOUT:60}
    time-to-live: ${ACTIVE_TTL:180}

Параметры настроек

  • timeout - интервал между попытками перехода в активное состояние;

  • time-to-live - время жизни ключа флага активности.

2.2.12.3.6. Секция 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.7. Секция response

Секция response определяет настройка времени хранения ответов по заданию в redis.

Например:

response:
    time-to-live: ${RESPONSE_TTL:36000}

Параметры настроек

  • time-to-live - Сколько времени Redis будет хранить ответ по заданию (ключ status.<uuid>).

2.2.12.3.8. Секция 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.9. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - порт для метрик, например METRICS_PORT:9837.

2.2.12.3.10. Секция 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.11. Дополнительное описание параметров
  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например «поле, «»содержащее двойную кавычку»»» будет считано как поле, «содержащее двойную кавычку»). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр 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 для взаимодействия с простором.
  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}

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:
  # Признак использования rest-api для взаимодействия с простором.
  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. Секция 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.9. Секция 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.10. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.13.3.11. Секция 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.12. Секция 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.13. Дополнительное описание параметров
  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например "поле, ""содержащее двойную кавычку""" будет считано как поле, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр 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.14. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.13.4. Проверка форматно-логического контроля

Поверка форматно-логического контроля включают в себя обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме и необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.

Таблица 2.15 Список реализованных проверок

Наименование проверки

Код ошибки

Кирилическое описание

проверка уникальности

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 отрезаем при загрузке начальные байты ef bb bf);

  • проверка размера файла и наличия данных:

    • проверка предельного размера загружаемого файла 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

  • Проверка осуществляется для значений каждого поля в соответствии с заданным правилом

  • Проверка соответствия заданному значению включает в себя:
2.2.13.4.2.3. Поведение в случае таймаута валидации

Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию составляет 60 минут.

В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с обогащением отчета о найденных ошибках ошибкой validationTimeout.

В случае возникновения подобной ошибки рекомендуется:

  • проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;

  • увеличить значение validation-timeout и повторить загрузку данных.

2.2.13.4.3. Статусная модель
Таблица 2.16 Статусная модель

Статус

Наименование

Описание статусов

-1

Загрузка данных в буффер

Получение данных от клиента и загрузка их на сервер

0

Запрос буфферизирован

Загружаемые данные, получены сервером и находятся в очереди на обработку

1

Ожидает открытия дельты

Загружаемые данные находятся на сервере и ожидают открытия дельты в сервисе Prostore

2

В обработке (модулем DATA-Uploader)

Выполняется загрузка данных в Prostore модулями Витрины

3

Успешно обработан

Данные успешно загружены

4

Ошибка обработки запроса

В процессе загрузки данных возникла ошибка

5

Идентификатор запроса не обнаружен

Запрошен статус по неизвестному идентификатору запроса

6

Форматно-логический контроль

Выполняется форматно-логический контроль загружаемых данных

7

Ошибки ФЛК

В процессе выполнения форматно-логического контроля загружаемых данных возникли ошибки.

При возникновении ошибки можно выполнить GET запрос requests/{request_id}/report/

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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

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: 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. Секция subscription

Секция subscription предназначена для настройки подписки на потребителе.

Например

subscription:
  consumer:
    # режим отмены подписки на потребителе. Возможные значения rename, drop, none
    cancel-mode: none

Параметры конфигурации

  • cancel-mode - режим отмены подписки на потребителе. Возможные значения rename, drop, none.

2.2.14.3.8. Секция kafka

Секция kafka предназначена для настройки параметров подключения к шине данных Apache Kafka (используется для взаимодействия с ПОДД-адаптером) и настройки взаимодействия через топики модуля ПОДД-адаптер - Модуль исполнения запросов.

Модуль взаимодействует через следующие топики:

  • Запрос создания подписки (Поставщик данных): replication.rq/rs/err;

  • Запрос отмены подписки (Поставщик данных): replication.cancel.rq/rs/err;

  • Запрос дельты (Поставщик данных): delta.rq/mppr.delta.rq;

  • Запрос создания структуры по подписке (Получатель данных): replication.in.rq/rs/err;

  • Запрос применения дельты (Получатель данных): subscription.in/delta.in.rs/delta.in.err;

  • Статусы с 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.9. Секция 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.10. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837

Параметры конфигурации

  • port - порт для получения метрик, например 9837.

2.2.14.3.11. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${REPLICATOR_BACKUP_ZK_PATH:/${environment.name}/podd-adapter-replicator}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${REPLICATOR_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  idleDelay: ${BACKUP_DELAY:500}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${REPLICATOR_BACKUP_GROUP_ID:podd_adapter_replicator_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.15. Настройка BLOB-адаптер

2.2.15.1. Конфигурация BLOB-адаптера (application.yml)

Файл application.yml – основной конфигурационный файл BLOB-адаптер, в котором задана логика и порядок работы модуля: получение входящих запросов, их обработка, настройка подключения к СМЭВ3-адаптеру, ПОДД-адаптеру и Хранилище BLOB-объектов, а также другие настройки необходимые для корректной работы модуля.

2.2.15.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

Необходимо настроить:

  1. В Витрине данных поле с типом LINK должно содержать текст:

12345678/download?requester_id=ABCDEFGH
  1. В файл 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 для взаимодействия с простором.
  enabled: ${PS_REST_CLIENT_ENABLED:true}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

metrics:
  port: ${METRICS_PORT:9837}

vertx:
  web-client:
    max-pool-size: 20

counter-service:
  host: ${COUNTER_SERVICE_HOST:localhost}
  port: ${COUNTER_SERVICE_PORT:9000}
  serviceName: ${COUNTER_SERVICE_NAME:printableform}
  timeout: ${COUNTER_SERVICE_TIMEOUT:30}


sign-service:
  url: ${SIGN_SERVICE_URL:http://localhost:8192}
  timeout: ${SIGN_SERVICE_TIMEOUT:30}
  pool-size: ${SIGN_SERVICE_POOL_SIZE:5}

notarius:
  host: ${NOTARUIS_HOST:localhost}
  port: ${NOTARUIS_PORT:8192}
  enabled: ${NOTARIUS_ENABLED:FALSE}
  props:
    maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
    signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
    digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
    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:
  # Признак использования rest-api для взаимодействия с простором.
  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. Секция metrics

В секции metrics указывается порт для получения метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - порт для получения метрик, например METRICS_PORT:9837

2.2.16.2.5. Секция counter-service

В секции counter-service указываются настройки подключения к сервису генерации номера.

Например:

counter-service:
  host: ${COUNTER_SERVICE_HOST:localhost}
  port: ${COUNTER_SERVICE_PORT:9000}
  serviceName: ${COUNTER_SERVICE_NAME:printableform}
  timeout: ${COUNTER_SERVICE_TIMEOUT:30}

Параметры настроек

  • host - адрес сервиса генерации номера, например COUNTER_SERVICE_HOST:t5-printable-form-01.ru-central1.internal;

  • port - порт сервиса генерации номера, например COUNTER_SERVICE_PORT:9000;

  • serviceName - значение имени сервиса, например COUNTER_SERVICE_NAME:printableform;

  • timeout - таймаут на генерации номера, например COUNTER_SERVICE_TIMEOUT:30.

2.2.16.2.6. Секция sign-service

В секции sign-service указываются настройки подключения к сервису подписания документа.

Например:

sign-service:
  url: ${SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192}
  timeout: ${SIGN_SERVICE_TIMEOUT:30}
  pool-size: ${SIGN_SERVICE_POOL_SIZE:5}

Параметры настроек

  • url - URL сервиса подписания документа, например SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192;

  • timeout - таймаут на подписание документа (сек), например SIGN_SERVICE_TIMEOUT:30;

  • pool-size - размер пула для сервиса подписания, например SIGN_SERVICE_POOL_SIZE:5.

2.2.16.2.7. Секция notarius

Секция notarius предназначена для указываются настройки сервиса Нотариус.

Например:

notarius:
  host: ${NOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal}
  port: ${NOTARUIS_PORT:8192}
  enabled: ${NOTARIUS_ENABLED:FALSE}
  props:
    maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
    signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
    digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
    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.8. Секция printable-forms

Секция printable-forms предназначена для настройки сервиса формирования документов.

Например:

printable-forms:
  reports:
    # имя документа
    - report: document_1
      # настройки по извлечению данных
      extract:
        # путь pebble шаблона, который будет извлекать данные
        template: ./src/main/resources/extract_static.peb
      # настройки по формированию xml документа
      xml:
        # путь pebble шаблона, который будет формировать xml документ
        template: ./src/main/resources/generate_xml_1.peb
        # Id подписываемого элемента, если не указано, то подписывается весь xml
        elementId: elementToSign
        # имя элемента, куда добавлять ЭП, если не указано, то в корень
        elementName: signature
        # имя файла, если не указано, то <Id_ПФ + ".xml">
        fileName: document_1.xml
      # настройки по формированию pdf документа
      pdf:
        # путь pebble шаблона, который будет формировать pdf документ
        template: ./src/main/resources/generate_pdf_1.peb
        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
      # настройки по формированию pdf документа с открепленной подписью
      pdf_sig:
        # путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
        #  (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)

        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
        # имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
        fileSign: pdfSign.p7s

Внимание

В конфигурационном файле application.yml пути к файлам pebble-шаблонов должны быть либо: относительно директории запуска, либо абсолютные пути.

2.2.16.3. Примеры pebble-шаблонов для Сервиса Формирования документов

2.2.16.3.1. Возможность вызова REST-сервисов из шаблона Сервиса Формирования документов

Для вызова REST-сервисов из шаблона Сервиса Формирования документов используется функция callRest.

Пример вызова функции из pebble-шаблона

{% set host = "smevql-dtm-smevqlserver01.ru-central1.internal" %}
{% set port = "8080" %}
{% set route = "data" %}
    {% set rq = "${jsonRequest.replace("\"", "\\\"")}" %}

{% set varName = callRest(
        method = "POST",
        url = "http://#\{host}:#{port}/#{route}",
        headers = "Content-Type=application/json",
        body = rq,
        responseType = "JSON"
      )
%}

{{ varName["response"]["ticket"][0]["id"]}}

Для асинхронного вызова (без ожидания ответа), необходимо выставить параметр async=true.

2.2.16.3.2. Pebble-шаблон для обработки поступившего запроса и формирования json-файла
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.

Настройка сервиса журналирования должна применяться к каждому модулю.

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

  1. Добавить зависимости в проект.

<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>
  1. Подключить 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
  1. Создать файл 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>
  1. Описать конфигурацию для 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
  1. Добавить форматирование даты

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
  1. Добавить параметры модуля

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.

  1. Добавить зависимости на 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>
  1. Указать порт 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}
  1. Создать прикладные метрики в проекте (с помощью 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. Процесс установки

Общий процесс установки состоит из следующих действий:

  1. Настройка логирования приложений

  2. Установка и настройка Vector.

  3. Установка и настройка HaProxy.

  4. Установка и настройка 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.