awesome-everything EN
↑ Обратно к восхождению

Очереди, потоки, события

Change data capture: чтение конфига и запросов

Суть Прочитай конфиг Debezium, SQL по replication slot и строку лога slot-lag, предскажи поведение CDC и выбери фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

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

Цель

Отработай цикл, который ты гоняешь в каждом CDC-инциденте: прочитай настройку коннектора и состояние slot в каталоге, предскажи, где ломается удержание WAL или доставка, и возьмись за фикс с наибольшим рычагом.

Сниппет 1 — конфиг коннектора Debezium

{
  "name": "orders-cdc",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "plugin.name": "pgoutput",
    "slot.name": "orders_slot",
    "publication.name": "orders_pub",
    "table.include.list": "public.orders",
    "snapshot.mode": "initial",
    "heartbeat.interval.ms": "0",
    "tombstones.on.delete": "true"
  }
}
Викторина

Этот коннектор захватывает малонагруженную таблицу orders. Какая настройка — скрытый наполнитель диска и почему?

Сниппет 2 — инспекция slot в каталоге

SELECT slot_name,
       active,
       pg_size_pretty(
         pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)
       ) AS retained_wal
FROM pg_replication_slots
WHERE slot_name = 'orders_slot';
--  slot_name   | active | retained_wal
-- -------------+--------+--------------
--  orders_slot | t      | 47 GB
Викторина

Slot active = t, но удерживает 47 ГБ WAL. О чём это говорит и какой первый ход?

Сниппет 3 — строка лога алерта slot-lag

WARN  slot=orders_slot active=true retained_wal_bytes=50465865728
      confirmed_flush_lsn=6F/A2000000 current_wal_lsn=7B/40000000
      disk_used_pct=88 -> ALERT: slot lag exceeds 40GB threshold
Викторина

Алерт срабатывает на 88% диска. Читая поля, какая верная интерпретация и порядок действий?

Сниппет 4 — подготовка таблицы к захвату полных delete

-- события delete сейчас несут только primary key в `before`
ALTER TABLE public.orders REPLICA IDENTITY FULL;
Викторина

Ты запускаешь это, чтобы события DELETE несли полную строку до удаления. Какой побочный эффект senior-инженер отметит перед мержем?

Итог

Каждый CDC-инцидент читается в конфиге и состоянии каталога: нулевой heartbeat голодит slot малонагруженной таблицы, пока WAL не заполнит диск; активный slot всё равно может удерживать десятки ГБ, если долгая транзакция заморозила restart_lsn, поэтому диагностируй pg_stat_activity, прежде чем что-то дропать; разрыв LSN в pg_replication_slots — то число, на которое ты алертишь, с max_slot_wal_keep_size как страховкой; а REPLICA IDENTITY FULL покупает полные образы delete ценой более жирных update. Сначала читай состояние slot, чини причину непродвижения и считай диск часами.

Продолжить восхождение ↑Change data capture: запусти CDC и переживи застрявший slot
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.