Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
1C_KAFKA_INTEGRATION_ERR 1С:Предприятие и СУБД

Гайд 1С: Интеграция 1С с Apache Kafka: Producer и Consumer на платформе 8.3

Обновлено: 26.08.2026  ·  Официальная база знаний

При интеграции 1С в распределенный контур под управлением Apache Kafka возникают проблемы:

  • Дублирование событий на стороне приемников из-за некорректной семантики доставки (At-Least-Once).
  • Потеря сообщений при сетевых сбоях и отсутствии ожидания подтверждений (Acks).
  • Смещение оффсетов (Offset lag) и отставание консьюмеров 1С от потока событий реального времени.
  • Блокировка сеансов 1С при синхронной отправке сообщений в Kafka топики.

1. Выбор архитектурного шлюза для 1С

Поскольку платформа 1С не имеет встроенного бинарного протокола Kafka, интеграция организуется через:

  • Confluent Kafka REST Proxy: HTTP-шлюз enterprise-уровня, позволяющий публиковать и вычитывать сообщения JSON/Avro через стандартное HTTPСоединение 1С.
  • Специализированные внешние компоненты C++ (librdkafka): для высоконагруженных сценариев (десятки тысяч сообщений в секунду).

2. Реализация Kafka Producer на 1С (через REST Proxy)

Соединение = Новый HTTPСоединение("kafka-rest.corp.local", 8082, , , , 5);
Запрос = Новый HTTPЗапрос("/topics/orders_events");
Запрос.Заголовки.Вставить("Content-Type", "application/vnd.kafka.json.v2+json");
Запрос.Заголовки.Вставить("Accept", "application/vnd.kafka.v2+json");

// Формирование пакета с ключом партиционирования (для сохранения порядка)
СтрокаJSON = 
"{
|  \"records\": [
|    {
|      \"key\": \"" + ДокументСсылка.УникальныйИдентификатор() + "\",
|      \"value\": {
|        \"event\": \"OrderCreated\",
|        \"doc_num\": \"" + ДокументОбъект.Номер + "\",
|        \"amount\": " + Формат(ДокументОбъект.СуммаДокумента, "ЧГ=0; ЧДЦ=2; ЧРД=.") + "
|      }
|    }
|  ]
|}";

Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

3. Управление фиксацией смещений (Manual Offset Commit)

При чтении топика консьюмером на стороне 1С фиксируйте оффсет только после успешной записи изменений в базу данных. Это гарантирует сохранение позиции даже при аварийном рестарте ноды 1С.

Практический опыт инженера: Не выполняйте синхронную отправку в Kafka в теле транзакции проведения документов 1С. Сохраняйте событие в локальной таблице исходящих событий (Outbox Pattern) и отправляйте сообщения отдельным асинхронным фоновым заданием.

Частые вопросы (FAQ)

Зачем передавать ключ сообщения (Key) при публикации в Kafka?

Kafka распределяет сообщения с одинаковым ключом в одну и ту же партицию (Partition), что гарантирует строгую последовательность (Order Guarantee) обработки событий по конкретному объекту (например, документу).

Какую семантику доставки сообщений можно обеспечить в связке с 1С?

Стандартно реализуется семантика At-Least-Once (как минимум один раз). Для обеспечения Exactly-Once требуется реализация таблицы идемпотентности (Idempotency Key) на стороне базы-приемника 1С.

Что такое Consumer Group Lag в мониторинге Kafka?

Lag показывает разницу между последним записанным сообщением в топике и последним прочитанным сообщением консьюмера 1С. Рост Lag означает, что воркеры 1С не успевают обрабатывать входящий поток.

Можно ли напрямую подключаться из 1С к брокерам Kafka без REST Proxy?

Напрямую через встроенный язык без сторонних утилит нельзя, так как протокол Kafka работает поверх кастомного бинарного TCP-протокола. Требуется использование внешних компонент Native API.