#KafkaЭтоПросто: Kafka Adapter 1С (Confluent) - отправляем сообщения

Публикация № 1695767 24.07.22

Приемы и методы разработки - Инструментарий разработчика

кафка kafka confluent proxy adapter адаптер какфка шина интеграции брокер сообщений api

Сегодня поднимем в docker kafka с confluent'om, а в 1С, в EDT загрузим проект из репозитория, создадим обработку, в которой несколькими строчками отправим сообщение в kafka через rest proxy и в confluent control center посмотрим на него. Если коротко, то: как отправить сообщение в Kafka несколькими строчками кода без компонент, регистраций и смс.

Введение

Меня очень печалит тот факт, что в 1С принято изобретать собственные решения вместо того, чтобы пользоваться готовыми.

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

К сожалению, данный канал дистрибьюции пока является единственным возможным, и я понимаю, что решение со временем "утонет", но надеюсь на индексацию и, возможно, несколько "звездочек", которые заставят публикацию "всплыть".

 

Предисловие

Примерно два года назад (а может быть, и больше) я сидел на заборе и наблюдал, как же брокер сообщений - Kafka проникает в мир 1С'а. И могу сказать, что проникает, со слов людей на конференциях. 

Честно сказать, я очень надеялся, что появится какое-то простое и удобное решение в общем доступе для общения с кафкой. Но, похоже, в этом никто не заинтересован, разработчики не заинтересованы, потому что нужно быстрее на коленке написать код и задеплоить в продакшен, гуру заинтересованы продать свою компоненту или решение, которое придумали, сама 1С заинтересована в том, чтобы на ее новую "поделку" - "1С:Шина" люди "сели".

И вот, найдя немного времени, решил поделиться результатом, который получился - модуль, адаптер, который позволяет выполнять взаимодействие с кафкой через рест прокси от confluent несколькими строчками кода.

Сегодня будем отправлять сообщение.

Подготовка

Для экспериментов нам нужно окружение, а именно сама кафка.

1. Ставим Docker.

2. Ставим в докер себе конфлюент(https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html#cp-quickstart-step-1)

 

3. Запускаем:

 

4. Проверяем: http://localhost:9021/

 

5. Далее переходим к 1с, клонируем репозиторий, создаем базу, обновляем ее:

 

6. Далее делаем обработку с кнопкой которая и будет отсылать сообщение:

 

7. Дальше копируем код отсюда: https://github.com/huxuxuya/KafkaConfluentRESTProxyAdapter1C

 

8. Дальше запускаем обработину, нажимаем кнопку:

 

9. И идем в панель управления и смотрим сообщение которое отправили:

 

 

В следующей части будем читать сообщения, если наберется хотя бы 100 плюсиков :)

 

Платформа, на которой проводилась демонстрация: 8.3.19.1467 

Зависимости:

"Коннектор: удобный HTTP-клиент для 1С:Предприятие 8" https://github.com/vbondarevsky/Connector

 

Ссылки:

Данная разработка: GitHub: 1С Kafka Confluent Adapter

 

Прочее:

Обработка "FormCodeGenerator"Проект на GitHub 

Группа в телеграмм: https://t.me/FormCodeGenerator1c

Статьи:

Модуль "FormEditor"(РедакторФорм)Проект на GitHub 

Статьи:

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

Наименование Файл Версия Размер
Конфигурация с модулем адаптера Kafka(из примера)

.cf 46,67Kb
0
.cf 0.4 46,67Kb Скачать
Обработка с кнопкой "отправить" из примера

.epf 6,71Kb
0
.epf 6,71Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1153 25.07.22 08:37 Сейчас в теме
Желательно перед использование описать что такое confluent, за что хотят денег (с какого порога надо платить), какую часть платформы используем.
Спойлеры можно подписывать.
Код лучше текстом чем скриншотами, удобнее копировать, ключевые блоки кода можно и без спойлеров.

В целом полезно.

Дальше нужно мерять предел производительности на ядро, для определения порога применения, после которого надо переходить на NativeAPI + TCP.
Upiterus; Dimanchik00; izidakg; cleaner_it; CyberCerber; huxuxuya; +6 Ответить
9. huxuxuya 279 26.07.22 09:59 Сейчас в теме
(1) Спасибо за комментарий, хорошее замечание, только вот если про конфлюент рассказывать то это же выйдет статья больше чем эта в несколько раз :)

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

Код отдельно не вставлял, чтобы как раз скопировать нельзя было, а надо было по ссылке в доку перейти на гитхаб и почитать пришлось.

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

По производительности точных цифр конечно не скажу, сравнить было бы интересно, но компонент для Кафки для 1са вроде в паблике не видел.
2. mifka186 8 25.07.22 10:55 Сейчас в теме
И про формат AVRO расскажете?
6. stepan96 67 26.07.22 08:53 Сейчас в теме
(2) Вы тоже с АВРО намучились? )))))) Мы найфай используем.
8. huxuxuya 279 26.07.22 09:43 Сейчас в теме
(2)нет, про авро, протобаф не буду рассказывать, аудитории в 1се нет кому это будет интересно :(
16. palsergeich 27.07.22 13:13 Сейчас в теме
(8)Жаль, на самом деле это спорное утверждение.
Очень был бы не лишним, сторонние системы очень просят.
Пока на json торгуемся.
ShiningPhoenix; +1 Ответить
3. BESL 25.07.22 14:13 Сейчас в теме
Как kafka ведет себя при отправке в нее больших файлов(>10 мб) ?
7. stepan96 67 26.07.22 08:55 Сейчас в теме
(3) Не нужно в кафку кидать такие большие сообщения. В какой-то момент у нас тоже возникла подобная потребность, но еще раз все проанализировав, поняли, что сообщение можно упростить.
10. huxuxuya 279 26.07.22 10:00 Сейчас в теме
(3) а что за файлы >10 мб в кафку отправляются?
4. malikov_pro 1153 26.07.22 07:18 Сейчас в теме
(3) Объект (большой файл(>10 мб)) в объектное хранилище, например S3, а в kafka ссылку на него. Не нужно гвозди забивать микроскопом.
5. Serg O. 201 26.07.22 08:51 Сейчас в теме
интересное решение, спасибо автору +
но почему confluent ? Для чего он нужен ? и почему именно он ? confluent - платный?
одной Kafka не достаточно?

Я так понял из описания с официального сайта confluent.io, что это очередная API и web-интерфейс для Шина данных Kafka...
Вроде пару-тройку лет назад все "топили" за различные "бесплатные" и "условно-бесплатные" решения
Elastic+ Kafka, Kafka + Grafana и т.п.
И вроде как понятно было для чего... для сбора/хранения и анализа Журнала регистрации и различных мониторингов и метрик в онлайне... Дашборды всякие красивые...
например, 2020г статья https://infostart.ru/1c/articles/1216620/ по докладу на INFOSTART EVENT 2019

а это решение - для чего может пригодиться?
11. huxuxuya 279 26.07.22 11:00 Сейчас в теме
(5) конфлюент - веб морда для Кафки + рест интерфейс + schema registry

confluent в версии комьюнити эдишн бесплатный, но его нельзя использовать в SAAS продуктах

Одной кафки может быть достаточно, если у тебя есть компонента для подключения к кафки, но компонент в открытом доступе я не видел, у серебряной пули была компонента которую они продавали, но если вдруг у кого есть компонента, с удовольствием бы с ней ознакомился :)

Если знаете ещё нормальные рест интерфейсы к кафки, напишите ознакомлюсь, но 3-4 года назад и конфлюента то не было.

Про "Elastic+ Kafka, Kafka + Grafana" даже не знаю что ответить, кафка - брокер сообщений, нужна для отправки чем чтения сообщений, эластик - нужен для поиска и визуализации информации, графана для сбора метрик, конечно можно при отправке сообщения в кафку так же логировать его в эластике и отправлять какие то метрики в графану, но кажется что это разные продукты, конечно можно их скрещивать и строить какие то архитектурные решения с кучей продуктов, но тут бы с кафкой сначала разобраться:)
pavlov_dv; Serg O.; +2 Ответить
12. Serg O. 201 26.07.22 17:50 Сейчас в теме
(11) а это решение: Kafka + Confluent для чего может пригодиться?
Зачем слать какие-то текстовые сообщения в Kafka?
Кто их оттуда забирать/видеть будет?

Есть ли разделение на "каналы" или ещё какое-то разделение ?.
Чтобы сообщения видели только те, для кого "это" сообщение предназначено?
нечто подобное была публикация про сервер и клиент Centrifugo
(у сервера сразу есть web-админка )
- там тоже можно "сообщения", точнее JSON-текст POST-запросами к API посылать сразу на нужный "канал", а подключенные к этому каналу "клиенты" тут же (0,1 - 0,2 сек) принимают это сообщение.

есть в этой схеме что-то похожее ? или всё ручками ? сам закинул сам и забирай?
не очень понятна схема что куда и главное зачем

целый абзац с официального сайта - очень размыто и не понятно зачем всё-таки он нужен:
Why Confluent ?
"Интегрируя исторические данные и данные в реальном времени в единый центральный источник достоверной информации, Confluent упрощает создание совершенно новой категории современных приложений, управляемых событиями, обеспечивает универсальный конвейер данных и открывает новые мощные варианты использования с полной масштабируемостью. , производительность и надежность."
14. Dimanchik00 27.07.22 06:11 Сейчас в теме
(11)
отправке

Вроде проскакивала компонента на просторах сети. Но это лучше у Алексея Лустина спросить.
18. oleganatolievich 134 29.07.22 10:01 Сейчас в теме
(11)

Если знаете ещё нормальные рест интерфейсы к кафки, напишите ознакомлюсь, но 3-4 года назад и конфлюента то не было.


confluent был еще в 2018м.
правда после обновления версии Kafka, внезапно перестал быстро читать сообщения.
компонента от серебряной пули у меня есть, но она чет тоже как-то медленно сообщеньки читает - 1200 в минуту.
возможно дело в том, что у нас как-то неправильно была настроена Kafka.
с нашими объемами нас бы съел бизнес - питонисты написали нам REST-сервис, который отдавал сообщеньки в 1С.
я потом ушел из 1С, устал сношаться с ее вечными "да, но нет".
13. huxuxuya 279 26.07.22 20:54 Сейчас в теме
а это решение: Kafka + Confluent для чего может пригодиться?

Kafka как и RabbitMQ - брокеры сообщений, нужны чтобы обмениваться сообщениями, сейчас эти брокеры являются корпоративным стандартом.

Но т.к. возможности платформы ограничены нашим любимым вендором, 1с не поддерживает возможность работать с данными брокерами из коробки и скорее всего не будет поддерживать, т.к. она выпустила 1С:Шину и надо пользоваться ей.

Why Confluent ?

Чтобы получить возможность как отправлять так и читать сообщения из этих брокеров, нужна дополнительная прослойка - либо компонента, либо апишка, которая предоставит такую возможность. И вот тут выходит на сцену Confluent Rest Proxy который и предоставляет такую возможность.
Грубо говоря Confluent в этом примере нужен только как посредник для отправки и получения сообщений.
Для всех нормальных языков уже давным давно написаны адаптеры для работы с этими брокерами, только 1С отстает лет на 5 - 10 от других.


Есть ли разделение на "каналы" или ещё какое-то разделение ?.

Кафка имеет топики и группы получателей, в топики засылаются сообщения, получатели на них подписываются, потом забирают.
Доставкой сообщений ни кафка ни реббит не занимаются.

Кто их оттуда забирать/видеть будет?

Грубо говоря в 1с есть номенклатура и это мастер система, в кафке создаешь топик "номенклатура" и туда из 1с засылаешь сообщения, дальше системы, которым это нужно, например какая то аналитическая система, или бэк для сайта или любой другой потребитель, подписывается на этот топик и забирает себе оттуда всю самую актуальную номенклатуру.

Зачем слать какие-то текстовые сообщения в Kafka?

Вообще брокер сообщений нужен для стандартизации и централизации обменов и когда у тебя много систем на разных языках это очень нужная история. Плюс всякая отказоустойчивость, огромная скорость, гарантия доставки, масштабирование, репликация и.т.п.

есть в этой схеме что-то похожее ? или всё ручками ? сам закинул сам и забирай?

Только pull модель, кафка это не ESB, маршрутизацией не занимается, трансформированием данных не занимается. Но тебе ничего не мешает взять ESB систему, подключить коннектором ее к кафке, настроить маршрутизацию и тогда она будет сама доставлять сообщения в другую систему из кафки и вручную ничего ручками забирать не надо будет.
kotlovD; ShiningPhoenix; Serg O.; pavlov_dv; +4 Ответить
15. Serg O. 201 27.07.22 09:59 Сейчас в теме
(13) спасибо за развёрнутый ответ
17. kotlovD 80 28.07.22 12:12 Сейчас в теме
(13) спасибо. Вот бы это сразу в статье разместить
19. DenisDert 17.08.22 00:31 Сейчас в теме
(13)
Доставкой сообщений ни кафка ни реббит не занимаются


У RabbitMQ Push модель доставки сообщений, pull api поддерживается, но устарело
Оставьте свое сообщение

См. также

SALE! 25%

Из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты комиссионеров (ОЗОН, Вайлдберриз), заказы, счета, прайсы, номенклатура Промо

Загрузка и выгрузка в Excel Обработка документов Оптовая торговля v8 v8::УФ Платформа 1C v8.2 1cv8.cf БУ УУ Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Содержит модуль работы с электронной почтой. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Работает во всех основных конфигурациях 1С8. При покупке лицензии вы получите 1 месяц бесплатной тех.поддержки.

9000 7650 руб.

09.11.2016    175191    648    839    

Загрузка данных из 1С МиниДеньги в 1С:Деньги 8, редакция 2.0

Обмен между базами 1C Файловые протоколы обмена (TXT, XML, DBF), FTP v8 Домашние учет и финансы УУ Абонемент ($m)

Обработка для первоначальной загрузки данных (справочников и операций) в настольную программу 1С:Деньги 8, редакция 2.0 из файлы резервной копии мобильной программы 1С Миниденьги.

2 стартмани

01.10.2015    18103    15    Claus32    5    

Редактор чеков ККМ Розница 2.0 - 2.3

Обработка документов Кассовые операции Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд БУ НУ Абонемент ($m)

Обработка чеков ККМ списком (редактирование, удаление, ...). Переформирование ОРП, связь чеков с ОРП. Редактирование времени КС. Редактирование суммы и времени выемки.

1 стартмани

06.08.2015    64603    597    Dima_    83    

Загрузка из Excel в 1С:Розница

Обработка документов Обработка справочников Загрузка и выгрузка в Excel Склад и ТМЦ v8 Розница Россия УУ Абонемент ($m)

Универсальная загрузка Excel файлов в 1С:Розница 2.0

1 стартмани

27.05.2015    16609    110    KarinaSV    7    

Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо

Обмен между базами 1C Универсальные обработки v8 1cv8.cf Абонемент ($m)

Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.

1 стартмани

22.10.2014    233544    4506    ekaruk    192    

Автоматическая установка себестоимости номенклатуры для конфигурации Розница 2.0 (2.1) +Бонус, исправляем ошибки при настройке расписания запуска для внешних обработок в Рознице 2.0

Прайсы Обработка документов Розничная торговля Ценообразование, анализ цен v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Обработка для автоматического создания документов Установка себестоимости, в случае если себестоимость не установлена на момент продажи. Помогает упростить установку себестоимости номенклатуры, если у вас в базе ведется учет по нескольким магазинам. Тестировалась на релизе 2.0.8.12 и 2.1.7.14. Подойдет для тех систем, где себестоимость номенклатуры одинакова для всех магазинов.

1 стартмани

31.03.2014    30214    75    sanches    15    

Выемка денежных средств из КассыККМ. Розница 2.0

Кассовые операции ККМ v8 Розница УУ Абонемент ($m)

Уставшим от отсутствия ВыемкиДС после закрытия кассовой смены посвящается. Подключаемая обработка. Управляемый интерфейс.

1 стартмани

12.12.2012    81879    530    StepByStep    40