10.10.2024 Егор Баукин 4871
Использование С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С:ERP Управление предприятием 2.1

- Переход на новый релиз 2.1 программы «1С:ERP Управление предприятием»
- Разра...

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

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

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

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

ООО «Экслтрейд»
ООО «Экслтрейд»

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

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

Оформление заказов поставщикам Оптовая торговля Торговые операции ...

Установка программного продукта БИТ.Финанс для 1С:Бухгалтерия 8
ООО «Джи Эй Си Шиппинг энд Лоджистикс»

Отрасль:
Транспорт

Внедренное типовое решение:
БИТ.Финанс

Построение единого информационного пространства финансовой службы;
Учет ...

Автоматизация кадрового учета на базе ПП "1С:Зарплата и управление персоналом" в ТД НМК
ООО «Торговый дом Нальчикский молочный комбинат»

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

Внедренное типовое решение:
1С:Зарплата и управление персоналом

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

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

Внедрение 1С:Управление торговлей в оптово-розничной компании «Много Плитки»
ООО «Много Плитки»

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

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

Закупки (снабжение) и управление отношениями с поставщиками:
- Оформление ...

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

Отрасль:
Бухгалтерские услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Интеграция продукта с базой данных оперативного учета Axapta;
- Доработка фу...

ООО «ЛукБелОйл»
ООО «ЛукБелОйл»

Отрасль:
Нефтегазовая отрасль

Внедренное типовое решение:

- Обследовании бизнес-процессов «Документооборот», «Казначейство и Бюджети...

ООО «Иви.ру»
ООО «Иви.ру»

Отрасль:
Медиаиндустрия

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

Подсистема казначейства
Модуль бюджетного контроля по ДДС ...

Внедрение ПП "1С:Управление небольшой фирмой 8 ПРОФ" в ООО «Шокостайл»
ООО «Шокостайл»

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

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

Управление продажами, логистикой и транспортом (SFM, WMS, TMS):
- Планирование п...

 ЗАО "Инвестгеосервис" -ДО
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:Документооборот КОРП

- Работа с файлами;
- Делопроизводство;
- Процессы движения документов; ...

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

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

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

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