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

22.11.23

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

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

Скачать файл

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

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

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

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159308    872    399    

861

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7733    55    22    

66

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

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

9360 руб.

17.05.2024    23400    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10400    36    20    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15377    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187956    1138    0    

912

SALE! 15%

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

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

15000 12750 руб.

07.10.2021    17295    6    32    

42

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

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    18121    18    33    

22
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pisarevEV 8 22.11.23 16:10 Сейчас в теме
в чем практическая польза?
2. Mi11er 99 22.11.23 17:09 Сейчас в теме
(1)чтоб шину не ставить. И не использовать рест запросы.
16. Infactum 318 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 99 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 1555 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 546 25.01.24 15:52 Сейчас в теме
(20) Есть компонента собранная на win, linux x64 - да еще и с исходниками и документацией и поддержкой avro )
https://github.com/NuclearAPK/Simple-Kafka_Adapter
Оставьте свое сообщение