Внешняя компонента для работы с Apach Kafka

22.11.23

Разработка - Разработка внешних компонент

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?]
Внешняя компонента для работы с Apach Kafka
.zip 2,39Mb
76
76 Скачать бесплатно

Использовать компоненту можно на Сервере, так и на Клиенте.

Для использования потребуется Kafka, я запустил в Docker с дефолтными параметрами, а также внешняя компонента (v8Kafka.zip /win64)

Пример использования:

// Producer	
ПутьККомпоненте = "...\v8AddInNative.dll";
	
Попытка
	Результат = ПодключитьВнешнююКомпоненту(ПутьККомпоненте ,"Kafka", ТипВнешнейКомпоненты.Native);
	Компонента = Новый ("AddIn.Kafka.Producer");	
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки; 

Компонента.УстановитьПараметр("bootstrap.servers","127.0.0.1:9092");

Компонента.ВызватьОтчетОДоставке = Истина;

Попытка  
	Результат = Компонента.Поставщик();	 
		
	Результат = Компонента.Опубликовать("topic.test", "hello from 1C", "1С", "key1:value1,key2:value2");

	Результат = Компонента.ОжидатьДоставкуСообщений(1000);
		
	ОтчетОДоставке = Компонента.ОтчетОДоставке();
		  
Исключение 
	ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Компонента.ТекстОшибки);
КонецПопытки;
// KafkaConsumer
ПутьККомпоненте = "...\v8AddInNative.dll";
	
Попытка
	Результат = ПодключитьВнешнююКомпоненту(ПутьККомпоненте ,"Kafka", ТипВнешнейКомпоненты.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно);
	Компонента = Новый("AddIn.Kafka.KafkaConsumer");
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;
		
Попытка  	
		
        Компонента.УстановитьПараметр("bootstrap.servers","127.0.0.1:9092");
	Компонента.УстановитьПараметр("group.id", "group_1");
	Компонента.УстановитьПараметр("enable.auto.commit", "false");
	Компонента.УстановитьПараметр("auto.offset.reset", "earliest");
	Компонента.УстановитьПараметр("enable.partition.eof", "true");
		
	Результат = Компонента.Потребитель();
	Результат = Компонента.Подписаться("topic.test");
		
	Пока Истина Цикл
		Результат = Компонента.Читать(1000);
		
		Если Результат = 0 Тогда 
                        Топик = Компонента.ТопикСообщения();        
			Ключ = Компонента.Ключ();
			Текст = Компонента.Текст(); 
			Заголовки = Компонента.Заголовки();
			Раздел = Компонента.Раздел();
			Смещение = Компонента.Смещение();
			ВремяЧислом = Компонента.ОтметкаВремени();
                        Резельтат = Компонента.Зафиксировать();
		КонецЕсли; 
			
		Если Результат = -191 Тогда // Дошли до конца очереди
			Прервать;
		КонецЕсли;
			
	КонецЦикла;  
			
	Результат = Компонента.Закрыть();
Исключение
КонецПопытки;
// Consumer
ПутьККомпоненте = "...\v8AddInNative.dll";
	
Попытка
	Результат = ПодключитьВнешнююКомпоненту(ПутьККомпоненте ,"Kafka", ТипВнешнейКомпоненты.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно);
	Компонента = Новый("AddIn.Kafka.Consumer");
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;
		
Попытка  	
		
        Компонента.УстановитьПараметр("bootstrap.servers","127.0.0.1:9092");
	Компонента.УстановитьПараметр("group.id", "group_1");
	Компонента.УстановитьПараметр("auto.offset.reset", "earliest");
        Компонента.УстановитьПараметр("enable.partition.eof", "true");
		
        Результат = Компонента.Потребитель();
	Результат = Компонента.Топик("topic.test");
        Раздел = 0;
        Смещение = "27";
        Результат = Компонента.Старт(Раздел, Смещение); // start(partition, offset)
		
	Пока Истина Цикл
		Результат = Компонента.Читать(Раздел, 1000);
		
		Если Результат = 0 Тогда 
                        Топик = Компонента.Топик();        
			Ключ = Компонента.Ключ();
			Текст = Компонента.Текст(); 
			Заголовки = Компонента.Заголовки();
			Раздел = Компонента.Раздел();
			Смещение = Компонента.Смещение();
			ВремяЧислом = Компонента.ОтметкаВремени();
		КонецЕсли; 
			
		Если Результат = -191 Тогда // Дошли до конца очереди
			Прервать;
		КонецЕсли;
			
	КонецЦикла;  
			
	Результат = Компонента.Стоп(Раздел);
Исключение
КонецПопытки;

Поддерживает:

- сжатие gzip, lz4, zstd

- SSL

Полный список объектов и методов в документации, кратко:

Общие методы

ru en описание
УстановитьПараметр SetParam принимает 2 значение
КодОшибки ErrorCode возвращает описание кода ошибки
РезультатСобытия EventResult event callback

 

 

 

 

Producer

ru en описание
Поставщик Init Создает экземпляр объекта Producer
Опубликовать SendMessage Отправить сообщение
ОпроситьОчередь Poll проталкивает из буффера
ОжидатьДоставкуСообщений Flush обертка poll ожидает мах переданное время
ДлинаИсходящейОчереди OutQueueLength число сообщений в буфере, не отправленных

 

 

 

 

 

 

 

KafkaConsumer

ru en описание
Потребитель Init Создает экземпляр объекта KafkaConsumer
Подписаться Subscribe Подписка на топики
Отписаться Unsubscribe Отписка от топиков
Читать Consume вычитывает сообщения
Зафиксировать CommitSync коммитит сообщения в очереди
Назначить Assign Позволяет явно подключиться к конкретному разделу
Закрыть Close закрывает чтение

 

 

 

 

 

 

 

** компонента предоставлена для тестового использования, будет активна до 23.12.2023

Внешняя компонента Kafka брокер сообщений асинхронный обмен

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    148958    825    393    

832

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    13551    34    7    

67

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    19350    56    42    

102

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    14006    12    27    

36

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    8712    31    10    

53

Инструментарий разработчика Чистка данных Свертка базы DevOps и автоматизация разработки Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях. Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

6900 руб.

20.08.2024    2711    13    4    

26

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    184410    1119    0    

892

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    16523    5    27    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pisarevEV 8 22.11.23 16:10 Сейчас в теме
в чем практическая польза?
2. Mi11er 98 22.11.23 17:09 Сейчас в теме
(1)чтоб шину не ставить. И не использовать рест запросы.
16. Infactum 317 23.11.23 15:56 Сейчас в теме
(1) Да никакой практической пользы. Компонента без исходников, без поддержки, без подсистемы для интеграции. Еще и только под винду.
Там, где реально нужно с kafka работать (уже есть в ландшафте) или хватит REST костыля, или купят проверенное решение (у БИТа или пули допустим), или напишут сами. Аналог того, что тут есть, при наличии знаний C++, пишется за несколько часов неспешного изучения документации к librdkafka.

Чисто для ознакомительных целей - имеет место быть. Тем более раздается бесплатно, даже не за стартмани.
kirillkr; gradi; +2 1 Ответить
18. ivan1703 79 24.11.23 08:57 Сейчас в теме
(16)
Тем более раздается бесплатн


Хорошо что - "-имеет место быть" ))

1. Исходники - исходники паттерна компоненты лежат на ИТС, librdkafka в github -все в свободном доступе
2. Поддержка - как без нее) первоисточник и поддерживает
3. Подсистема интеграции есть.
4. " ... Еще и только под винду." - нет не только. реализована под Win32/64, Linux(m32/64)

Кому достаточно REST "костыля" - могут попробовать этот вариант, а могут юзать "костыль" и дальше.
И да Вы правы, сам код в компоненте я писал несколько часов, потому что хорошо знаком с librdkafka
3. pisarevEV 8 22.11.23 17:12 Сейчас в теме
(2) т.е. для обмена между разными БД?
4. Mi11er 98 22.11.23 20:44 Сейчас в теме
(3) вариативность огромная.

- реал тайм обмены
- чаты
- метрики
- логи
- хз что еще =)
17. pisarevEV 8 23.11.23 16:21 Сейчас в теме
(16)
(4) "метрики".... можно пример из жизни 1С?
21. anosin 29 25.11.23 10:13 Сейчас в теме
(17) про метрики интересно, у меня сейчас полно разнородных обменов пока средствами 1с в основном файловый, но сбор метрик мониторящих эти обмены на вебсервисах. Давно чешутся руки попробовать кафку
5. aliaevav 23.11.23 10:26 Сейчас в теме
Есть какие то тесты надежности,скорости,объемов и т.д.?
Какие плюсы и отличия от платных аналогов?
8. ivan1703 79 23.11.23 11:13 Сейчас в теме
(5)
сть какие то тесты надежности,скорости,объемов и т.д.?
Какие плюсы и отличия от платных аналогов?


это "обертка" официальной библиотеки librdkafka, выполнена по технологии ApiNative для 1С, код написан на С++ (17) с использованием смарт указателей для исключения утечек, можете проводить любые тесты. О каких "платных" аналогах Вы пишите?
Эта компонента условно бесплатная, во вложении экземпляр для теста, я в описании указал!
Имеется также описание полного функционала(свойства, методы)
9. DmitryMironov 23.11.23 11:44 Сейчас в теме
(8)
О каких "платных" аналогах Вы пишите?


Компонента от Серебряной пули - https://silverbulleters.org/autocomponents
11. ivan1703 79 23.11.23 12:23 Сейчас в теме
(9) в профиле есть телефон, привязана телега, мне будет проще ответить развернуто
10. aliaevav 23.11.23 12:00 Сейчас в теме
(8)Ну например Yellow Kafka платный аналог, у бита вроде тоже был адаптер.
Проводить любые тесты могу, да. Но зачем если есть первоисточник?
Вот и возник вопрос сколько условных попугаев отправляется/принимается в минуту/час.Справочник номенклатуры например из одной системы перезаписать 1 000 000 объектов в 1С принять и наоборот.Как эта компонента-обертка переварит такой поток.
Сравнение например с ресткафка вот наша библиотека на столько лучше и быстрее отправляет и т.д.
Описание 2х методов не мотивирует попробовать.

И в статье напишите что это бесплатный пробник, ограничения вот такие, полный функционал купите вот за столько вот тут.
12. ivan1703 79 23.11.23 12:24 Сейчас в теме
(10) выше ответил про контакт
6. GenAcid 23.11.23 10:50 Сейчас в теме
Я правильно понял что нужно постоянно дергать компоненту чтоб она обратилась к кафке? Колбек от нее не работает?
7. ivan1703 79 23.11.23 11:07 Сейчас в теме
(6) вопрос не понятен, какой конкретно колбэк? RdKafka::DeliveryReportCb ? RdKafka::EventCb? RdKafka::RebalanceCb?
13. GenAcid 23.11.23 13:55 Сейчас в теме
(7) rd_kafka_consume_callback() https://docs.confluent.io/platform/7.5/clients/librdkafka/html/rdkafka_8h.html#a570e099baed990e9966e5e9a65eb7b00
Там всего 3 способа получения: штучно, пакетами и колбеком. Тут я так понимаю штучно вычитываются?
Просто я в свое время не нашел способ нормально реализовать колбек компоненты на сервере 1С, поэтому пришлось отказаться от такого способа и читать пакетами. Но надежда еще жива, вдруг кто-то придумал как реализовать.
14. ivan1703 79 23.11.23 15:51 Сейчас в теме
(13)
тказаться от такого способа и читать пакетам


да, есть способы работы такие:
1. "штучно" - синхронный метод, возвращает класс RdKafka::Message (в этом примере реализовано именно так) из его экземпляра забираем данные.
2. колбэком - асинхронный, в рантайме в любом случае будет экземпляр RdKafka::Message из которого геттерами забираешь данные.
3. "пакетами" - https://github.com/confluentinc/librdkafka/blob/master/examples/rdkafka_con­sume_batch.cpp могу обернуть, требования такого не было ... идея хорошая)
15. ivan1703 79 23.11.23 15:53 Сейчас в теме
(13) так же, контакты мои в профиле
19. nicxxx 255 24.11.23 13:57 Сейчас в теме
это - "3. "пакетами" - https://github.com/confluentinc/librdkafka/blob/master/examples/rdkafka_con­­sume_batch.cpp могу обернуть, требования такого не было ... идея хорошая) " - и вправду актуально
20. efin 24.11.23 19:39 Сейчас в теме
Эх, невезуха: компонента которую ждал - появилась, а 1С уже 2 недели как закончил переводить на линукс...

Есть надежда на линукс версию x64?
22. ivan1703 79 25.11.23 13:06 Сейчас в теме
(20)
уже 2 недели как закончил переводить на линукс


выше уже отвечал:
реализована под Win32/64, Linux(m32/64)
пишите в личку, выкладывать все разработки не готов
23. Xershi 1519 25.11.23 20:16 Сейчас в теме
(22) а на чем писали, мне в свое время было интересно написать ВК на джаве, но учителей не нашлось или я плохо искал.
24. ivan1703 79 25.11.23 21:14 Сейчас в теме
25. I_G_O_R 69 26.11.23 22:40 Сейчас в теме
(23) на джаве не напишешь, нужен нативный язык, кроме с++, можно написать на rust, delphi
26. Shmell 543 25.01.24 15:52 Сейчас в теме
(20) Есть компонента собранная на win, linux x64 - да еще и с исходниками и документацией и поддержкой avro )
https://github.com/NuclearAPK/Simple-Kafka_Adapter
Оставьте свое сообщение