Перейти к содержанию

DebeziumReplicationSlotNotAdvancing

Что означает алерт

confirmed_flush_lsn слота debezium_iams не менялся 15 минут. Severity: critical.

Debezium подключён к слоту либо был подключён, но не подтверждает прочитанную позицию. WAL копится. При текущей нагрузке на базу до лимита 10 ГБ остаётся несколько часов, после чего слот будет сброшен.

В норме позиция сдвигается не реже раза в минуту за счёт записи в debezium.heartbeat каждые 10 секунд.

Лейблы алерта: slot_name.

Диагностика (по шагам)

Команды описаны в разделе 2 общего документа: Debezium: устройство и типовые операции.

  1. Проверить, что слот активен. Если сработал и DebeziumReplicationSlotInactive, действовать по нему: причина общая.

  2. Проверить возраст heartbeat-строки:

SELECT now() - ts AS heartbeat_age FROM debezium.heartbeat WHERE id = 1;
Результат Значение Действие
больше минуты Debezium не выполняет heartbeat.action.query шаг 3
меньше 30 секунд запись идёт, но событие не доходит до Debezium шаг 4
  1. Найти ошибку запроса в логе:
kubectl --context yc-sarex-stage -n debezium logs $POD --since=30m | grep -i -E 'heartbeat|permission denied|debezium\.heartbeat'

Типовые причины: у пользователя debezium нет прав на debezium.heartbeat (после пересоздания пользователя), таблица удалена, задача коннектора не работает.

  1. Проверить, что таблица входит в publication:
SELECT schemaname, tablename FROM pg_publication_tables WHERE pubname = 'debezium_iams';

В списке должна быть debezium.heartbeat. Если её нет, PostgreSQL не передаёт запись в слот, и Debezium нечего подтверждать.

Как починить

  1. Нет прав или нет таблицы: восстановить объекты по разделу 7 общего документа.
  2. Таблицы нет в publication: ALTER PUBLICATION debezium_iams ADD TABLE debezium.heartbeat; под пользователем sarex.
  3. Задача не работает или зависла: перезапустить задачу (раздел 3 общего документа).
  4. В конфигурации коннектора нет heartbeat.action.query: проверить .helm/values.yaml в infra/debezium, задеплоить.

Критерий закрытия

  1. heartbeat_age менее 30 секунд.
  2. Значение unconfirmed слота уменьшается при повторной проверке через минуту.
  3. Алерт перешёл в inactive.