Выгрузка ключевых операций 1С через CDC

05.03.26

Разработка - DevOps и автоматизация разработки

Если вы думаете, что внедрение CDC конвейера — это геморрой, то вы правы. Но мы уже прошли через все боли: от настройки MSSQL CDC до танцев с Kafka и ClickHouse. Теперь конвейер работает и данные ключевых операций в 1С, от которых зависит бизнес, попадают в ClickHouse, где их можно анализировать и использовать для мониторинга в реальном времени. В этой статье я расскажу, как выглядит архитектура и с какими проблемами можно столкнуться

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

Представьте, что перед вами на столе стоит бутылка воды и стакан, и все, что вы хотите сделать, это попить воды из стакана. Кажется, самым простым способом будет налить воды из бутылки в стакан и попить, в крайнем случае, можно попить сразу из бутылки. Но вам все эти варианты не нравятся, вы решаете построить водонапорную станцию, резервуары, насосы, системы фильтрации, проложить трубы до своей квартиры и только после всего этого попить воды. (Бутылка по прежнему стоит на столе). Задача стоящая, не так ли? 

Примерно так ощущается настройка CDC конвейера для подсчёта APDEX, однако и у этого подхода есть ряд существенных плюсов. Мне, как человеку, мало знакомому с миром 1С, поначалу было трудно понять, почему добавить метрику в код может быть проблематично. Я бы не хотел останавливаться на противостоянии 1С и "классического IT". 

Просто перечислю плюсы внедрения конвейера:

1. Всегда можно масштабировать схему. Хотите добавить новый домен? Добавляете Debezium коннектор и топик в kafka.

2. Данные попадают в Clickhouse с минимальной задержкой, что позволяет делать онлайн аналитику.

3. Можно строить аналитику не только по техническим метрикам, но и по ключевым бизнес-операциям (создание заказа, проведение платежа). Собственно говоря, в моем случае фокус направлен на это.

4. Минимальная нагрузка на команду разработки. Работа сводится к использованию встроенной библиотеки и записи метрик в 1сную базу.

Из минусов:

1. Сложность настройки. Cтек не простой, требует навыков и времени.

2. Нагрузка на MSSQL. CDC создаёт дополнительные системные таблицы и нагрузку на журнал транзакций.

3. При изменении схемы таблиц (например, новые поля в 1С) нужно обновлять коннекторы и структуру в Clickhouse.

4. При сбоях возможны задержки доставки или дублирование событий, что требует дополнительной логики дедупликации в ClickHouse. Как настроить дедупликацию, опишу далее.

Что необходимо учитывать до внедрения:

1. Необходимость администрировать CDC таблицу в MSSQL.

2. Дополнительные работы по настройке каждого модуля в конвейере.

3. Понимание как работает CDC таблица. CDC – это таблица изменений, а не бизнес-данных. Важно помнить это на каждом этапе передачи данных.

4. Вам нужен ключ, по которому вы будете схлопывать данные в Clickhouse.

5. Дополнительно нужно знать как работает колоночная СУБД.

 

Схема архитектуры и описание всех модулей и взаимосвязей


Основные особенности компонентов:

MSSQL (CDC) Источник данных: база 1С, таблица ключевых операций.

Change Data Capture (CDC) фиксирует изменения в таблицах (INSERT, UPDATE, DELETE). В нашем случае только INSERT И DELETE. Как мне объяснили знающие 1сники, в таблице замеров не может быть UPDATE из-за внутренней логики 1с. CDC создаёт специальные системные таблицы, из которых Debezium может читать изменения.

Debezium (Kafka Connect) cлушает MSSQL CDC и преобразует изменения в события  (JSON). Публикует эти события в Kafka топики. Под каждую таблицу ключевых операций лучше создать отдельный топик.

Может работать параллельно для разных таблиц/баз.

KRaft и Clickhouse Keeper нужны для управления кластерами Kafka и Clickhouse соответственно.

Clickhouse потребитель Kafka сообщений. Нужно содержать как минимум 3 таблицы:

1. Таблица подписчик на события в топике кафка. Движок — Kafka Engine.

2. Materialized view который преобразует полученные сообщения в табличный вид.

3. Основная таблица данных, к которой мы будем обращаться запросами.

В случае если в вашу таблицу замеров не будут приходить DELETE, этим можно обойтись, если же DELETE приходят, то нужно добавить таблицу-копию MSSQL CDC и MV для схлопывания INSERT И DELETE по ключу.

Минимально рабочий кластер для прода:

ClickHouse — 2 ноды.

ClickHouse Keeper — 3 ноды.

Kafka Brokers — 2–3 ноды.

Kafka KRaft Controllers — 3 ноды.


В старых версия конвейера рекомендовали использовать сборку с Zookeeper вместо KRaft и Clickhouse Keeper






Схема передачи данных и описание потока
 

Первичная таблица 

В таблицу замеров поступают данные с уровня кода. Все изменения( INSERT ,DELETE , UPDATE(в нашем случае он не нужен) фиксируются в транзакционном логе MSSQL. 

 


CDC таблица

CDC читает транзакционный лог и складывает изменения в таблицу cdc.dbo_tablename_CT.

Служебные поля CDC:

__$start_lsn — идентификатор транзакции (Log Sequence Number).

__$end_lsn — конец транзакции. Для INSERT/DELETE обычно NULL.

__$seqval — порядок записи внутри транзакции (физический порядок в логе).

__$operation — тип операции:

1 = DELETE

2 = INSERT

3 = UPDATE (before)

4 = UPDATE (after)

__$update_mask — битовая маска изменённых полей (актуально для UPDATE).

__$command_id — порядковый номер команды внутри транзакции.

CDC таблица читается коннектором, каждое событие превращается в Kafka сообщение.

Clickhouse таблица с движком Kafka Engine читает события из Kafka топика. Первичный MV перегоняет данные в таблицу буфер (отсутствует на схеме), которая по сути является копией MSSQL CDC таблицы. Основная особенность работы CDC заключается в том, что в ClickHouse попадают все изменения из MSSQL — как INSERT, так и DELETE. Если сохранять их напрямую, анализ данных будет некорректным: в таблице окажутся одновременно и вставки, и удаления, без понимания актуального состояния.

Для решения этой проблемы:

Добавляем ещё один MV, который выполняет выполняет преобразование событий.

Каждому INSERT присваивается sign = 1.

Каждому DELETE присваивается sign = -1.

Дополнительно формируется суррогатный ключ из четырёх бизнес полей (номер сеанса , Дата начала, Дата записи, Duration). Этот ключ уникально идентифицирует строку.

Последняя таблица с движком CollapsingMergeTree использует суррогатный ключ и sign, чтобы схлопывать пары событий:

Если на INSERT приходит соответствующий DELETE, они взаимно уничтожаются, и запись исчезает из финальной таблицы. Если приходит DELETE без соответствующего INSERT (например, запись уже была удалена ранее), он не попадает в финальную таблицу, так как нет строки для удаления. Таким образом, в финальной таблице остаётся только актуальное состояние данных. Далее уже можно прикрутить Grafana, либо любой удобный для вас инструмент визуализации данных и подключить Clickhouse как источник. Можно считать перцентили, строить графики, SLA, в общем все, на что у вас хватит фантазии и тех задания)



 

Понятно, что в данной системе возникнет большое количество подводных камней, и содержать ее дорого, и потребуется много трудозатрат и ровные руки. По ходу обслуживания конвейера будут появляться новые задачи (или проблемы, в зависимости от того как вы воспринимаете :) ) по его обслуживанию. Например, проверки наличия дубликатов или проверки целостности полученных данных. Но, в случае если у вашей компании есть ресурсы, конвейер как минимум упростит работу 1с разработчикам и не будет сильно влиять на 1сные базы.

Как-то так, это был мой первый опыт написания технических статей, прошу строго не судить)

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

MSSQL CDC APDEX ключевые операции Clickhouse аналитика мониторинг конвейер данных замеры времени

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

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

См. также

Инструментарий разработчика Нейросети DevOps и автоматизация разработки Тестирование QA Разработчик 1С 8.3 Бесплатно (free)

Открытый набор правил и скриптов на GitHub для ИИ-агента (агента искусственного интеллекта: Claude Code, Codex и других). Агент сам снимает опись машины, предлагает путь проверки кода: плагин Unica или BSL Language Server со справкой платформы. С вашего «да» ставит недостающее, затем выгружает внешнюю обработку, заводит git и доводит её до зелёного теста YAxUnit. Оба пути проверены с нуля свежим агентом на копии демобазы «Управление торговлей» 11.5, платформа 8.3.27. Новая часть: для задач по данным базы агент выгружает конфигурацию в XML, строит карту объектов и пишет запросы только по именам, найденным в выгрузке. Внутри гайд «Unica на Windows» с известными ошибками и проверенными обходами.

вчера в 14:30    152    Iliaelagin    0    

1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.3 1С 8.5 Бесплатно (free)

В прошлой статье у ERP оставалось 89 отказов загрузки, у ЗУП — 19. Теперь обе конфигурации совпали с эталонами, а собранные файлы прошли круг через платформу. Развертка выделена в открытый репозиторий cf-unwrapper: библиотека на Rust и консольная утилита. Показываю результаты, объясняю границы «100%» и приглашаю к проверкам и развитию проекта.

02.11.2026    281    oyti    1    

1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

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

02.11.2026    548    vanya_gonchar    2    

6

Файловый обмен (TXT, XML, DBF), FTP DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.5 Бесплатно (free)

В прошлой статье я выгрузил Бухгалтерию в XML байт в байт и спросил, на чем проверить дальше. Вы ответили: ERP, старые релизы, зарплата. Прогнал пять конфигураций, от клиента ЭДО до ERP на 120 тысяч файлов. Рассказываю, что сломалось после Бухгалтерии, почему эталону платформы нельзя верить на слово, как выгрузить одну конфигурацию в формат трех версий платформы - и почему cf-конвертер становится отдельным продуктом, Разверткой.

02.11.2026    365    oyti    2    

3

Инструментарий разработчика DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Как отличить срочное исправление от обычного вечернего коммита? Проверила расчёт показателей поставок по отчёту хранилища 1С и истории двух открытых проектов. На стенде счётчики совпали со сценарием, а в выборке открытого проекта правило «те же объекты» ошиблось во всех шести случаях. Показываю границы такого замера и отличие от метрик DORA. Прилагаются инструмент и материалы опыта.

1 стартмани

29.10.2026    347    Ninel_S    0    

0

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    925    oyti    20    

16

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

Хук pre-commit проверяет полный снимок индекса Git в отдельной базе 1С. На «Нано-УТ» и платформе 8.3.27 повторила 12 попыток коммита: восемь прошли, четыре остановлены. Чистый коммит занял 31,8 с. Вызов несуществующего метода общего модуля хук останавливает только с ключом -ExtendedModulesCheck. В архиве версия 2, тесты, инструкция и журналы.

1 стартмани

26.10.2026    374    Ninel_S    2    

-1

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Я дала агенту Claude Code задачу словами: добавить в учебную конфигурацию документ «Внутреннее потребление товаров», который списывает товар по средней стоимости и не даёт уйти в минус. Три запуска с нуля, каждый принят проверкой на платформе 1С: 1 мин 49 с, 2 мин 33 с и 2 мин 56 с. Показываю, что агент поменял, где ошибался и почему на типовой УТ так быстро не будет.

1 стартмани

26.10.2026    658    Ninel_S    0    

-1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 05.03.26 14:43 Сейчас в теме
2. Нагрузка на MSSQL. CDC создаёт дополнительные системные таблицы ...


Поясните:

1. Какие дополнительные системные таблицы создаются? И какими командами они попадают в схему sys?

... и нагрузку на журнал транзакций.


2. Любая БД создаёт нагрузку на журнал транзакций, конкретно, какая нагрузка вас смущает?
2. NesterTop1 5 06.03.26 10:16 Сейчас в теме
1 https://learn.microsoft.com/ru-ru/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver17 .

2. В моем случае мы включили таблицу cdc только на таблицу замеров, ощутимой нагрузки на БД это не дало. В случае если вы включите CDC на более нагруженные таблицы, нагрузка изменится за счёт дополнительных операций.
3. paulwist 06.03.26 13:10 Сейчас в теме
(2)
ощутимой нагрузки на БД это не дало


1. ОК.

2. А какая сейчас нагрузка, сколько транзакций/сек (или какую метрику вы используете) и сколько стало после включения CDC??
4. NesterTop1 5 09.03.26 10:15 Сейчас в теме
В среднем в бд около 10 000 запросов в секунду. В таблицу замеров поступает до 1000 Insert в минуту. На фоне общей нагрузки это не ощутимо. Я бы ещё глянул CPU время CDC джобов, но при настройке мы этого не делали.
Для отправки сообщения требуется регистрация/авторизация