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

22.11.23

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

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

Скачать исходный код

Наименование Файл Версия Размер
Внешняя компонента для работы с Apach Kafka
.zip 2,39Mb
65
.zip 2,39Mb 65 Скачать бесплатно

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

Для использования потребуется 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 брокер сообщений асинхронный обмен

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

10000 руб.

02.09.2020    127411    688    389    

740

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

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

18000 руб.

06.10.2023    8478    25    6    

47

Infostart УДиФ: Управление данными и формами 1С

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

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

10000 руб.

10.11.2023    4788    12    2    

38

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    179006    1086    0    

863

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52390    34    69    

43

Бустер Конвертации данных 3 (Infostart Toolkit)

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

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

15000 руб.

07.10.2021    15136    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100017    239    97    

298

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35401    108    127    

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

Чисто для ознакомительных целей - имеет место быть. Тем более раздается бесплатно, даже не за стартмани.
kirillkr; gradi; +2 1 Ответить
18. ivan1703 78 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 96 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 78 23.11.23 11:13 Сейчас в теме
(5)
сть какие то тесты надежности,скорости,объемов и т.д.?
Какие плюсы и отличия от платных аналогов?


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


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

И в статье напишите что это бесплатный пробник, ограничения вот такие, полный функционал купите вот за столько вот тут.
12. ivan1703 78 23.11.23 12:24 Сейчас в теме
(10) выше ответил про контакт
6. GenAcid 23.11.23 10:50 Сейчас в теме
Я правильно понял что нужно постоянно дергать компоненту чтоб она обратилась к кафке? Колбек от нее не работает?
7. ivan1703 78 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 78 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 78 23.11.23 15:53 Сейчас в теме
(13) так же, контакты мои в профиле
19. nicxxx 254 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 78 25.11.23 13:06 Сейчас в теме
(20)
уже 2 недели как закончил переводить на линукс


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