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

22.11.23

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

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

Скачать файлы

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

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

Для использования потребуется 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С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    117529    641    389    

691

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    6584    14    5    

35

PowerTools

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

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

3600 руб.

14.01.2013    176647    1064    0    

840

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

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

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

10000 руб.

10.11.2023    2835    5    1    

28

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

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

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

5000 руб.

07.02.2018    98696    238    97    

292

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

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

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26012    131    99    

81

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

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

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

1500 руб.

17.09.2018    34802    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

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

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    53898    35    14    

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

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


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

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

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

- реал тайм обмены
- чаты
- метрики
- логи
- хз что еще =)
17. pisarevEV 7 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 77 23.11.23 11:13 Сейчас в теме
(5)
сть какие то тесты надежности,скорости,объемов и т.д.?
Какие плюсы и отличия от платных аналогов?


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


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

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


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