10.10.2024 Егор Баукин 3377
Использование Сompact топиков в Apache Kafka ...

Содержание:



В современном мире бизнес-процессы становятся все более сложными и требовательными к обработке данных в режиме реального времени.    


Архитектура микросервисов, обмен сообщениями и интеграция различных систем — все это требует надежных инструментов для передачи и обработки данных. Apache Kafka стала одним из наиболее популярных решений для организации высоконагруженных систем обмена сообщениями.


Одной из ключевых возможностей Kafka является использование компактифицированных топиков (Compact topics), которые позволяют эффективно работать с состоянием и изменениями данных. В этой статье мы подробно рассмотрим, что такое компактифицированные топики, как они работают, их преимущества и как их использование может быть полезным при интеграции с 1С: Предприятие.   


1. Что такое Apache Kafka и топики в kafka

 

Apache Kafka — это распределенная платформа потоковой передачи данных с открытым исходным кодом, созданная для публикации, подписки, хранения и обработки потоков записей в реальном времени. Kafka широко используется для построения систем передачи данных с высокой пропускной способностью и низкой задержкой.


Основные характеристики Kafka:

Производительность: Высокая скорость передачи и обработки сообщений.

Масштабируемость: Легко масштабируется в горизонтальном направлении.

Надежность: Обеспечивает сохранность данных даже при выходе из строя узлов кластера.

Гибкость: Поддерживает различные модели обмена сообщениями.

Топик в Kafka — это категория или поток сообщений. Продюсеры отправляют сообщения в топики, а консумеры читают сообщения из топиков.        

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


Типы топиков:

Обычные топики: Сообщения сохраняются в течение определенного времени или до достижения определенного объема.

Компактифицированные топики (Compact topics): Специальный тип топиков, в которых хранятся только последние значения сообщений с одинаковым ключом.   

2. Компактифицированные топики (Compact topics) и как работает компактификация сообщений в системе программы 1С: Предприятие

 

Компактификация — это процесс, при котором Kafka удаляет устаревшие записи для каждого ключа в топике, сохраняя только последние значения. Такой тип топика хранит последнее известное состояние для каждого ключа, что делает его идеальным для хранения состояния сущностей.


Особенности компактифицированных топиков:

Хранение последних записей: Для каждого ключа сохраняется только последняя запись.

Высокая доступность: Быстрый доступ к текущему состоянию данных.

Удаление данных: Поддерживает удаление записей 1С путем отправки сообщения с нулевым значением для ключа.

В обычных топиках сообщения хранятся в порядке поступления и удаляются по истечении времени или при достижении определенного объема. 

В компактифицированных топиках Kafka периодически выполняет процесс смещения, при котором удаляются устаревшие сообщения с одинаковыми ключами.


Механизм компактификации:

1. Продюсер отправляет сообщения: Каждое сообщение имеет ключ и значение.

2. Kafka записывает сообщение в лог: Сообщения сохраняются последовательно в партициях.

3. Фоновый процесс компактификации: Kafka запускает компактификацию для топиков с включенной опцией cleanup.policy=compact.

4. Удаление устаревших записей: Для каждого ключа сохраняется только самое последнее сообщение, предыдущие удаляются.

5. Консумер получает данные: При чтении с самого начала консумер получит только актуальные данные для каждого ключа.


Пример:

Представим, что сообщения содержат информацию о состоянии заказа в системе:

| Ключ (ID заказа) | Значение (Статус) | |------------------|-------------------| | order_1 | Создан || order_2 | Создан | | order_1 | Оплачен | | order_1 | Отгружен |

После компактификации в топике останутся только последние состояния для order_1 и order_2:

• order_1 -> Отгружен

• order_2 -> Создан   


3. Преимущества использования и практическое применение компактифицированных топиков в 1С: Предприятие

 

Эффективное хранение данных: Удаление старых записей снижает объем хранимых данных.

Всегда актуальная информация: Консумеры могут получать текущее состояние без дополнительной логики.

Идеально для кэширования: Возможность построения кэшей состояния в реальном времени.

Удобство при сбоях: При перезапуске консумера он может восстановить текущее состояние, прочитав топик с самого начала.


Использование компактифицированных топиков:

Хранение состояний сущностей: Пользователи, заказы, товары и т.д.

Конфигурационные данные: Распространение настроек и параметров между сервисами.

Кэши и индексы: Построение дополнительных структур данных для быстрого доступа.

Удаление данных: Установка значения null для ключа приводит к удалению записи после компактификации.


Настройка компактифицированных топиков:

Для создания компактифицированного топика необходимо задать соответствующий параметр.

Пример команды для создания топика с компактификацией:

kafka-topics --create --topic my_compact_topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1 --config cleanup.policy=compact   


4. Интеграция Kafka с 1С: Предприятие и пример ее реализации

 

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


Преимущества интеграции:

Реактивность: Получение и отправка данных в реальном времени.

Масштабируемость: Обработка больших объемов данных без задержек.

Интеграция с микросервисами: Взаимодействие с другими сервисами в архитектуре микросервисов.

Надежность: Гарантированная доставка сообщений.


Варианты интеграции:

1. Использование внешних компонент: Разработка внешних компонент на языках Java или .NET для взаимодействия с Kafka.

2. Вызов REST API: Создание посредника, который предоставляет API для отправки и получения сообщений.

3. Использование файлового обмена: Менее предпочтительно, но возможно.


Шаг 1: Настройка Kafka и создание компактифицированного топика

Создадим топик 1c_orders_state для хранения состояния заказов из 1С:

kafka-topics --create --topic 1c_orders_state --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1 --config cleanup.policy=compact


Шаг 2: Реализация продюсера в 1С

Использование внешней компоненты:

1. Создание компонент на C# или Java: Используем официальный клиент Kafka для выбранного языка.

2. Объявление методов в 1С: Подключаем внешнюю компоненту и используем ее методы для отправки сообщений.

Пример кода на стороне 1С:


// Инициализация продюсера

Продюсер = Новый("KafkaProducer");

 

// Установка параметров подключения

Параметры = Новый Структура();

Параметры.Вставить("bootstrap.servers", "localhost:9092");

Продюсер.Инициализировать(Параметры);

 

// Подготовка сообщения

Ключ = "order_" + Заказ.Идентификатор;

Значение = Новый Структура();

Значение.Вставить("Статус", Заказ.Статус);

Значение.Вставить("ДатаИзменения", ТекущаяДата());

 

// Преобразование структуры в JSON

ЗначениеJSON = СтрокаВJSON(Значение);

 

// Отправка сообщения

Продюсер.Отправить("1c_orders_state", Ключ, ЗначениеJSON);


Шаг 3: Реализация консумера на другой стороне

Например, сервис на Java, который получает состояние заказов из 1С:


Properties props = new Properties();

props.put("bootstrap.servers", "localhost:9092");

props.put("group.id", "order_service");

props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

props.put("auto.offset.reset", "earliest");

 

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

consumer.subscribe(Arrays.asList("1c_orders_state"));

 

while (true) {

    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));

    for (ConsumerRecord<String, String> record : records) {

        String orderId = record.key();

        String orderStateJSON = record.value();

 

        // Обработка состояния заказа

        // ...

    }

}


Шаг 4: Обработка удалений

Для удаления записи необходимо отправить сообщение с null значением:


// При удалении заказа

Продюсер.Отправить("1c_orders_state", Ключ, Неопределено);


Консумер получит это сообщение и сможет удалить информацию о заказе из своей системы.


Заключение:

Использование компактифицированных топиков в Apache Kafka предоставляет мощные возможности для хранения и передачи актуального состояния данных. При интеграции с 1С: Предприятие это позволяет:

Обеспечить синхронизацию данных между 1С и другими системами.

Реализовать кэширование данных на стороне других сервисов.

Оптимизировать обмен данными и снизить нагрузку на инфраструктуру.

Интеграция Kafka с 1С открывает новые горизонты для построения высокопроизводительных и надежных систем. Благодаря возможности обрабатывать данные в режиме реального времени, бизнес может быстрее реагировать на изменения и принимать обоснованные решения.

    

Специалист компании ООО "Кодерлайн"

Егор Баукин

Наши проекты

Внедрение «1С:Бухгалтерия 8 ПРОФ» в компании «Мостехника»
ООО «Мостехника»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

Документооборот (ECM):
- Учет рабочего времени;
Управление персоналом и кадровый учет (HRM):
- Кадровый учет;
- Расчет зарп...

ООО "СЖД"
ООО "СЖД"

Отрасль:
Торговля, склад, логистика, транспорт

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Расчет зарплаты
Подбор кадров
Кадровый учет
Анализ кадрового состава
Учет рабочего времени
Регламентированная отчетность...

Апгрейд 1С:Бухгалтерия 8 ПРОФ (USB) до версии 1С:Бухгалтерия 8 КОРП (USB)
ООО «Ява Строй»

Отрасль:
Строительство

Внедренное типовое решение:
1С:Бухгалтерия 8 КОРП (USB)

- Создание чистых конфигураций. Внесение изменений в БД ЗУП и новая расчетная ведомость;
- Администрирование MS SQL Server;
- Сжати...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Учет спецодежды и спецоснастки
Управление отношениями с кли...

Автоматизация подсистемы учета взаиморасчетов с агентами и интернет-магазинами на базе «1С:Управление холдингом 8»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

– Оформление заказов поставщикам;
– Управление отношениями с поставщиками;
– Взаиморасчеты с поставщиками. ...

Компания IBS
Компания IBS

Отрасль:
Системный интегратор

Внедренное типовое решение:
1С:Управление производственным предприятием

- Интеграция систем – АСУП и «1С:Управление производственным предприятием»...

Внедрение блока расчета себестоимости РАУЗ в 1С:УПП 8
ООО «Пелигрин Матен»

Отрасль:
Производство

Внедренное типовое решение:
1С:Управление производственным предприятием

– Оформление заказов покупателей;
– Взаиморасчеты с покупателями;
– Оформление заказов поставщикам;
– Управление отношениями с ...

Внедрение блоков в 1С:Комплексная автоматизация 8
ООО «Больцен Рус»

Отрасль:
Оптовая торговля

Внедренное типовое решение:
1С:Комплексная автоматизация

- Оперативный учет...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам
- Оформление заказов покупателей
- Управление складскими запасами ...

ООО «ПКП КАБЭЛЕКТРОСНАБ»
ООО «ПКП КАБЭЛЕКТРОСНАБ»

Отрасль:
Производство кабельной продукции

Внедренное типовое решение:
1С:Управление небольшой фирмой 1.6

- Оформление заказов покупателей;
- Управление складскими запасами;
- Анализ запасов/остатков...

1с-РАРУС МСК
1с-РАРУС МСК

Отрасль:
Разработка компьютерного программного обеспечения

Внедренное типовое решение:
1С:Управление корпоративными финансами

- Финансово-бухгалтерский блок
- Казначейство ...

Филиал ГлавУпДК при МИД России фирма «Инпредкадры»
Филиал ГлавУпДК при МИД России фирма «Инпредкадры»

Отрасль:
Государственное управление

Внедренное типовое решение:
1С:Бухгалтерия

- Расчеты с контрагентами;
- Управленческий учет;
- Формирование отраслевой отчетности;
- Интеграция с отраслевыми продуктами ст...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение