Регистрация событий в сигнальном топике Kafka

Содержание раздела
  1. Управление регистрацией событий
  2. Формат ключа сообщения
    1. Параметры ключа сообщения
    2. Примеры ключей сообщения
  3. Формат тела сообщения
    1. Параметры тела сообщения
    2. Примеры тела сообщения

Система поддерживает регистрацию событий в сигнальном топике Kafka.

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

Рекомендуется настроить автоматическую очистку сигнального топика в конфигурации брокера Kafka.

Управление регистрацией событий

При необходимости можно отключить регистрацию следующих событий:

  • завершение и отмена операций записи — запись сообщений отключается/включается параметром конфигурации KAFKA_STATUS_EVENT_WRITE_OPERATIONS_ENABLED;
  • создание и удаление внешних таблиц в логической схеме данных — запись сообщений отключается/включается параметром конфигурации KAFKA_STATUS_EVENT_EXTERNAL_DDL_ENABLED.

Формат ключа сообщения

Ключ сообщения в сигнальном топике Kafka имеет формат, показанный ниже. Описание параметров ключа сообщения см. в секции ниже.

{
  "datamart": "<logical_db>",
  "datetime": "<event_timestamp>",
  "event": "<event_code>",
  "eventLogId": "<event_UUID>"
}

Параметры ключа сообщения

logical_db

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

event_timestamp

Дата и время события в формате YYYY-MM-DD hh:mm:ss[.microseconds]. Подробнее о формате см. в разделе Строковый формат даты и времени в ответах.

event_code

Код события. Возможные значения:

  • DATAMART_SCHEMA_CHANGED — выполнение DDL-запроса (независимо от того, изменил запрос логическую схему данных или нет);
  • DELTA_OPEN — открытие дельты;
  • DELTA_CLOSE — закрытие дельты;
  • DELTA_CANCEL — откат дельты;
  • WRITE_OK — завершение операции записи;
  • WRITE_CANCEL — отмена операции записи.
event_UUID

Уникальный идентификатор события.

Примеры ключей сообщения

Пример ключа в сообщении о закрытии дельты:

{
  "datamart": "marketing", 
  "datetime": "2024-02-28 08:02:40.463",
  "event": "DELTA_CLOSE",
  "eventLogId": "6b80c392-3198-492f-a631-6a684e521b79"
}

Пример ключа в сообщении о завершении операции записи:

{
  "datamart": "marketing", 
  "datetime": "2024-02-28 09:15:43.532",
  "event": "WRITE_OK",
  "eventLogId": "8b8dfa17-6605-4874-8ebf-1b8b47c201f3"
}

Пример ключа в сообщении об отмене операции записи:

{
  "datamart": "marketing", 
  "datetime": "2024-02-28 09:51:11.148",
  "event": "WRITE_CANCEL",
  "eventLogId": "3d963cbc-8782-498e-923d-602d7ccf7c2d"
}

Формат тела сообщения

Тело сообщения в сигнальном топике Kafka имеет формат, описанный в таблице ниже. Описание параметров тела сообщения см. в секции ниже.

Событие Формат тела сообщения
Выполнение DDL-запроса {"datamart": "<logical_db>", "entityName": "<entity_name>", "entityDefinition": "<entity_definition>", changeDateTime": "<ddl_timestamp>"}
Открытие дельты {"deltaNum": <delta_number>}
Закрытие дельты {"deltaNum": <delta_number>, "deltaDate": "<delta_commit_timestamp>"}
Откат дельты {"deltaNum": <delta_number>}
Завершение операции записи {"entity": "<entity_name>", "cn": <sys_cn>, "ts": <ts_unix_time>, "rowsAffected": <rows_affected_quantity>}
Отмена операции записи {"entity": "<entity_name>", "cn": <sys_cn>}

Параметры тела сообщения

logical_db

Имя логической базы данных, в которой выполнен DDL-запрос.

entity_name

Имя логической сущности, к которой относится DDL-запрос или операция записи.

entity_definition

Определение логической сущности. Возможные значения:

  • TABLE.DEFAULT — обычная логическая таблица;
  • TABLE.PROXY — прокси-таблица;
  • TABLE.PARTITION — партиция;
  • TABLE.PARTITIONED — партиционированная таблица;
  • MATERIALIZED VIEW.DEFAULT — материализованное представление;
  • VIEW.DEFAULT — обычное логическое представление (не относящее к категории простых*);
  • VIEW.PLAIN.FILTERED — простое* представление с условием;
  • VIEW.PLAIN.UNFILTERED — простое* представление без условия;
  • READABLE EXTERNAL TABLE.CORE:<datasource_name> — readable-таблица для работы со standalone-таблицей, расположенной в датасорсе <datasource_name>;
  • READABLE EXTERNAL TABLE.KAFKA — readable-таблица для загрузки данных из брокера сообщений Kafka;
  • WRITABLE EXTERNAL TABLE.CORE:<datasource_name> — writable-таблица для работы со standalone-таблицей, расположенной в датасорсе <datasource_name>;
  • UPLOAD EXTERNAL TABLE.KAFKA — внешняя таблица загрузки;
  • DOWNLOAD EXTERNAL TABLE.KAFKA — внешняя таблица выгрузки.

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

ddl_timestamp

Дата и время выполнения DDL-запроса в формате YYYY-MM-DD hh:mm:ss[.microseconds]. Подробнее о формате см. в разделе Строковый формат даты и времени в ответах.

delta_number

Номер дельты.

delta_commit_timestamp

Дата и время закрытия дельты в формате YYYY-MM-DD hh:mm:ss[.microseconds]. Подробнее о формате см. в разделе Строковый формат даты и времени в ответах.

sys_cn

Номер операции записи. Для прокси-таблиц и standalone-таблиц указывается значение null.

ts_unix_time

Дата и время выполнения или отмены операции записи в Unix-формате, равное целому числу микросекунд с 00:00:00 UTC 1 января 1970 года. Для прокси-таблиц и standalone-таблиц указывается значение null.

rows_affected_quantity

Количество добавленных, измененных и удаленных операцией строк.

Примеры тела сообщения

Пример тела сообщения с информацией о выполнении DDL-запроса:

{
  "changeDateTime": "2024-04-24 15:25:47.002",
  "datamart": "marketing"
}

Пример тела сообщения с информацией о закрытии дельты:

{
  "deltaNum": 8,
  "deltaDate": "2024-04-28 08:02:40"
}