PostgreSQL CDC c помощью Debezium и Kafka (Часть 1)

08.10.24

База данных - Администрирование СУБД

CDC - очень мощный механизм, который можно использовать во многих сценариях, возможность развернуть его в Docker показывает простоту и лёгкость данной технологии.

Про саму технологию CDC отлично написано в статье.

В данной публикации мы развернем Debezium и Kafka в докере, настроим подключение и получим наши первые данные.

 

Немного теории:

Debezium — это платформа для захвата изменений в базе данных (CDC, Change Data Capture), которая позволяет отслеживать все изменения в данных и передавать их в другие системы в реальном времени.

В связке с PostgreSQL и Kafka Debezium работает следующим образом:

 

1. PostgreSQL: Лог репликации


Debezium использует лог репликации PostgreSQL, чтобы отслеживать изменения в базе данных. PostgreSQL поддерживает механизмы логирования всех операций с данными (INSERT, UPDATE, DELETE) в виде так называемых WAL (Write-Ahead Logs). Эти логи содержат последовательность изменений, которые происходят в базе данных.

Когда мы включаем в PostgreSQL "wal_level = logical " и подключаем Debezium, то он читает эти логи и отслеживает изменения. Debezium не вносит изменения в базу данных , а просто читает, что было добавлено, изменено или удалено.

 

 

2. Debezium: Коннектор для PostgreSQL


Debezium предоставляет коннектор для PostgreSQL, который подключается к этой базе данных и начинает читать WAL. Коннектор работает как агент, который «слушает» изменения. При каждом изменении данных (например, новая запись, обновление или удаление) Debezium преобразует это изменение в событие.

 

3. Kafka: Передача событий


После того как Debezium считывает изменения, оно передает эти события в Kafka — систему передачи сообщений. А Kafka собирает, сохраняет и передает данные между различными системами, не только 1С.

Debezium отправляет события изменения данных в виде сообщений в определенные топики Kafka. Например, если мы изменяем запись в таблице с Номенклатурой, то событие с информацией об этом изменении будет отправлено в топик, который может называться что-то вроде buhbase.nomenclature. Каждое событие может содержать информацию о том:

  • Что это было за изменение (вставка, обновление, удаление).
  • Какие данные изменились (старые и новые значения).

 

Общий поток выглядит так:

  1. PostgreSQL пишет изменения в WAL.
  2. Debezium читает эти изменения и преобразует их в события.
  3. Kafka получает эти события в виде сообщений и распределяет их по топикам.
  4. Потребители Kafka могут использовать эти события для разных нужд, как, например, обновление данных, обработка или репликация.

Таким образом, Debezium + PostgreSQL + Kafka позволяет в реальном времени отслеживать все изменения в базе данных и использовать эти данные для различных интеграций и потоковой обработки.

 

Для начала работы у вас должен быть установлен Docker.

Содержимое файла Docker compose:

version: '5.0'
services:

  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    hostname: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - 2181:2181

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - 29092:29092
    hostname: kafka
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  kconnect:
    image: debezium/connect:latest
    ports:
      - 8083:8083
    environment:
      CONFIG_STORAGE_TOPIC: my_connect_configs
      OFFSET_STORAGE_TOPIC: my_connect_offsets
      STATUS_STORAGE_TOPIC: my_connect_statuses
      BOOTSTRAP_SERVERS: kafka:29092   
    links:
      - zookeeper
    depends_on:
      - kafka
      - zookeeper

Сохраним содержимое в файл docker-compose.yml.

В командной строке перейдем в папку с файлом и запустим команду:  docker-compose up -d

Должны увидеть подобную картину:

 

 

А в приложении Doker запущенные наши контейнеры:

 

 

Для нормального соединения к контейнерам по имени, я еще пропишу в файл C:\Windows\System32\drivers\etc\hosts соответствие имении и IP адреса.

 

 

С помощью программы Offset explorer подключимся к Kafka и проверим, что брокер работает.

 

 

Более того, мы видим топики, созданные Debezium.

Теперь настроим связь между Debezium и PostgreSQL. В базе 1С у меня есть таблица _reference47, будем подключать её.

 

 

Управление Debezium производится с помощью REST - интерфейса, далее я буду использовать Postman.

 

 

Запустим наш запрос, после этого мы можем проверить, что коннектор добавился с помощью GET запроса.

 

 

Добавим информацию в нашем справочнике и посмотрим, что у нас появилось в Kafka.

 

 

Таким образом мы настроили самый базовый сценарий CDC.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

HighLoad оптимизация Администрирование СУБД Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

В рамках 18 релиза СУБД Tantor Postgres мы рассказывали об оптимизациях, которые помогают планировщику сделать более точный выбор между Nested Loop и Hash Join. В следующем релизе у нас планируются оптимизации, которые позволят ускорить выполнение как Nested Loop, так и Hash Join. Сегодня мы расскажем об одном из таких методов - фильтре Блума.

31.08.2026    4630    Tantor    3    

15

Администрирование СУБД Системный администратор Программист Бесплатно (free)

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    2282    jul.dolganova    9    

23

Администрирование СУБД Пароли Системный администратор 1С 8.3 1С:Розница 2 1С:Управление производственным предприятием Абонемент ($m)

Пароль пользователя СУБД лежит в 1CV8Clst.lst обратимо: кто читает папку srvinfo - достаёт пароли SQL всех баз кластера, минуя права 1С. Обработка показывает, у каких баз пароль извлекается, помечает слабые и выдаёт план защиты. К СУБД не подключается, ничего не пишет - только читает файл.

10 стартмани

06.08.2026    1133    15    nedomolkov.ivan    0    

7

Администрирование СУБД Системный администратор 1С 8.3 Бесплатно (free)

Прогнал набор диагностических скриптов на двух рабочих базах: боевой с 580 сеансами и малонагруженной. Разбираю пять находок: статистика 97-дневной давности, 598 запросов со сканами, журнал транзакций в 73 % от данных, tempdb в один файл и 81 % ожиданий на параллелизме, который чинить не надо. Плюс три грабли, из-за которых самописный диагностический скрипт падает на чужом сервере. Семь рабочих скриптов внутри, копируются в SSMS как есть.

05.08.2026    1609    nedomolkov.ivan    8    

8

Администрирование СУБД Журнал регистрации Системный администратор Программист 1С 8.3 Бесплатно (free)

Журнал регистрации на нагруженной базе перестаёт открываться: файлы растут на гигабайты в день, просмотр виснет, история недоступна. Рассказываю, как мы вынесли журнал трёх продуктивных баз в ClickHouse: 35 млрд событий, поиск всех ошибок за сутки — 0,11 секунды, привычная форма журнала для пользователей и падение числа ошибок в проде в 23 раза за полгода. Архитектура, схема таблицы, грабли интеграции и все цифры с прода.

04.08.2026    1890    nedomolkov.ivan    0    

8

Администрирование СУБД 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

База 1С:ERP размером 646 Гб, полное маскирование за 5 часов - без создания промежуточной незащищенной копии. Разбираем бесплатный pg_anon на сквозном примере с реального продуктива.

27.07.2026    3104    Tantor    16    

13

HighLoad оптимизация Администрирование СУБД Программист Россия Бесплатно (free)

Если вы работаете с 1С на PostgreSQL и жалуетесь на тормоза — скорее всего, дело в join predicate pushdown, которого в стандартном PostgreSQL нет. В MS SQL Server этот механизм работает «из коробки», и при миграции именно запросы к виртуальным таблицам 1С бьют по производительности сильнее всего. В этой статье — реальный кейс от Postgres Professional с разбором плана выполнения, ручным экспериментом и доработкой планировщика СУБД, которая ускорила запросы от 22 до 54 000 раз.

16.06.2026    9682    postgres_professional    13    

12

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Вышел релиз СУБД Tantor Postgres 18, и мы хотим рассказать о его новых возможностях для работы с приложениями на платформе "1С:Предприятие". В обзоре разберем улучшения планировщика, по традиции коснемся работы временных таблиц и не обойдем вниманием вспомогательные утилиты, которые упрощают поиск и диагностику проблем в высоконагруженных системах. За каждым пунктом - реальные запросы 1С, реальные рабочие базы и сотни часов тестирования!

16.06.2026    3887    Tantor    7    

10
Отзывы
1. comol 08.10.24 13:03 Сейчас в теме
Видимо не только мне "Механизм копий баз данных" в составе КОРП поставки 1С не зашел :))))))))))
AlexSvoykin; +1 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. comol 08.10.24 13:03 Сейчас в теме
Видимо не только мне "Механизм копий баз данных" в составе КОРП поставки 1С не зашел :))))))))))
AlexSvoykin; +1 Ответить
2. zakiap 01.01.25 14:19 Сейчас в теме
Здравствуйте.
будет ли продолжение статьи ?
как решили проблему с преобразования типов "mvarchar" и "mchar" в читаемый текст JSON ?
Для отправки сообщения требуется регистрация/авторизация