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

24.07.22

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

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

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

Наименование Файл Версия Размер
Конфигурация с модулем адаптера Kafka(из примера)
.cf 46,67Kb
18
.cf 0.4 46,67Kb 18 Скачать
Обработка с кнопкой "отправить" из примера
.epf 6,71Kb
15
.epf 6,71Kb 15 Скачать

Введение

Меня очень печалит тот факт, что в 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 confluent proxy adapter адаптер какфка шина интеграции брокер сообщений api

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22112    18    1    

21

Автоматическая многопоточная выгрузка данных 1С 8.3 в БД Clickhouse и MS SQL (для работы с данными 1С в BI-системах)

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

Готовое решение для автоматизированной выгрузки данных из 1С 8.3, а также MS Excel в базу данных ClickHouse, а также в Microsoft SQL для работы с данными 1С в Yandex Datalens, Visiology, Apache Superset (и не только) - "Экстрактор данных 1С в BI". Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм. Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/ Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse/MS SQL. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Вашей BI-системе

230000 руб.

15.11.2022    12519    11    47    

28

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    6525    13    4    

35

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9032    8    8    

10

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15410    9    16    

9

PowerTools

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

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

3600 руб.

14.01.2013    176548    1064    0    

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

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

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

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

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

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

По производительности точных цифр конечно не скажу, сравнить было бы интересно, но компонент для Кафки для 1са вроде в паблике не видел.
2. mifka186 8 25.07.22 10:55 Сейчас в теме
И про формат AVRO расскажете?
6. stepan96 72 26.07.22 08:53 Сейчас в теме
(2) Вы тоже с АВРО намучились? )))))) Мы найфай используем.
8. huxuxuya 362 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 72 26.07.22 08:55 Сейчас в теме
(3) Не нужно в кафку кидать такие большие сообщения. В какой-то момент у нас тоже возникла подобная потребность, но еще раз все проанализировав, поняли, что сообщение можно упростить.
10. huxuxuya 362 26.07.22 10:00 Сейчас в теме
(3) а что за файлы >10 мб в кафку отправляются?
4. malikov_pro 1285 26.07.22 07:18 Сейчас в теме
(3) Объект (большой файл(>10 мб)) в объектное хранилище, например S3, а в kafka ссылку на него. Не нужно гвозди забивать микроскопом.
5. Serg O. 220 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 362 26.07.22 11:00 Сейчас в теме
(5) конфлюент - веб морда для Кафки + рест интерфейс + schema registry

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

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

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

Про "Elastic+ Kafka, Kafka + Grafana" даже не знаю что ответить, кафка - брокер сообщений, нужна для отправки чем чтения сообщений, эластик - нужен для поиска и визуализации информации, графана для сбора метрик, конечно можно при отправке сообщения в кафку так же логировать его в эластике и отправлять какие то метрики в графану, но кажется что это разные продукты, конечно можно их скрещивать и строить какие то архитектурные решения с кучей продуктов, но тут бы с кафкой сначала разобраться:)
pavlov_dv; Serg O.; +2 Ответить
12. Serg O. 220 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. rabid_otter 134 29.07.22 10:01 Сейчас в теме
(11)

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


confluent был еще в 2018м.
правда после обновления версии Kafka, внезапно перестал быстро читать сообщения.
компонента от серебряной пули у меня есть, но она чет тоже как-то медленно сообщеньки читает - 1200 в минуту.
возможно дело в том, что у нас как-то неправильно была настроена Kafka.
с нашими объемами нас бы съел бизнес - питонисты написали нам REST-сервис, который отдавал сообщеньки в 1С.
я потом ушел из 1С, устал сношаться с ее вечными "да, но нет".
13. huxuxuya 362 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 систему, подключить коннектором ее к кафке, настроить маршрутизацию и тогда она будет сама доставлять сообщения в другую систему из кафки и вручную ничего ручками забирать не надо будет.
clic007; vampo; kotlovD; ShiningPhoenix; Serg O.; pavlov_dv; +6 Ответить
15. Serg O. 220 27.07.22 09:59 Сейчас в теме
(13) спасибо за развёрнутый ответ
17. kotlovD 87 28.07.22 12:12 Сейчас в теме
(13) спасибо. Вот бы это сразу в статье разместить
19. DenisDert 17.08.22 00:31 Сейчас в теме
(13)
Доставкой сообщений ни кафка ни реббит не занимаются


У RabbitMQ Push модель доставки сообщений, pull api поддерживается, но устарело
huxuxuya; +1 Ответить
26. Power_0N 42 02.01.23 21:01 Сейчас в теме
(13) а разве Универсальный обмен данными и фабрики XDTO в 1С это не механизм стандартизации обменов ?
27. huxuxuya 362 12.01.23 13:14 Сейчас в теме
(26) Если рассматривать только системы 1с то да, xdto и универсальный обмен это хороший механизм стандартизации обменов в контексте 1Са, но если смотреть шире на все системы компании, то это получается такое решение "в себе" - сделал 1с для продуктов 1с(т.к. обмен в хмл формате и еще и на русском все).
Но тут основное централизация, а дальше от централизации, идет стандартизация, чтобы у тебя в одной очереди не лежали архивчики, в другой ХМЛки, в третьей джейсоны ну и дальше в джейсончиках чтобы были одинаковые принципы структурирования данных.
20. gybson 07.09.22 17:03 Сейчас в теме
Брокер сообщений это намного меньше, чем ESB и в принципе даже по идеологии не очень хорошо подходит. Шина в первую очередь распаривает узлы обмена, здесь этого нет. Шина подразумевает конвертацию данных, тут этого тоже нет. Брокер сообщений просто транспорт, как тот же самый e-mail.
21. huxuxuya 362 13.09.22 10:24 Сейчас в теме
(20) Добрый день, а где я перепутал значение брокера сообщения и esb решения? Я понимаю различие, но не понимаю где не так выразился.
22. gybson 13.09.22 12:12 Сейчас в теме
(21)" сама 1С заинтересована в том, чтобы на ее новую "поделку" - "1С:Шина" люди "сели"".

Вот это тут не в тему. Их поделка с кроликом работает и с кафкой думаю будет работать.
23. huxuxuya 362 21.09.22 14:48 Сейчас в теме
(22)
Не вижу противоречий.
Я тут написал про то что 1С вынуждает покупать 1С Шину в любом случае.

Сама 1С:Шина позволяет работать с брокерами сообщений, например рэббит и каффка, но при этом в платформу не добавляют возможности работать с данными брокерами напрямую(сомневаюсь что это сделать сложно. скорее политика компании), т.к. если бы добавили эта 1С:Шина не продавалась бы. И получается что эту часть вендор не развивает в угоду кроссейла.
24. gybson 21.09.22 16:21 Сейчас в теме
(23) Для широкого пользователя такая интеграция не нужна. Для узкого есть внешние компоненты. Хотя лучше поднимать рест-апи для кролика.
25. dtybr 16 08.10.22 13:13 Сейчас в теме
Добрый день.
Скажите а есть возможность от Kafka формировать WebHook на опубликованный из 1с HTTP сервис?
Каким модулем Kafka это может делать?
28. huxuxuya 362 12.01.23 13:16 Сейчас в теме
(25) Не изучал вопрос, можно попробовать что нибудь в докере изобразить, должно быть не сложно, но это будет отдельный сервис. Если о вебхуках и кафке речь, может стоит посмотреть в сторону шины, там емул например, который на себя возьмет мониторинг очереди и доставку сообщений. Или ту же шину 1са.
29. AlexanderChurbanov 02.02.23 21:09 Сейчас в теме
(28) подскажите, пожалуйста, каким докером вы пользуетесь ? Не совсем понял по скриншоту, спасибо!
30. FreeArcher 157 13.11.23 12:45 Сейчас в теме
Спасибо за статью и конфигурацию! Получилось отправлять и получать сообщения.
Единственное не могу попасть в админку кафки по адресу http://localhost:9021/. Пишет что адрес не доступен. Пробовал и другие сборки поднимать, так же не могу попасть в админку. Что-то может быть её нужно или не так делаю?
31. rom-x 152 14.11.23 14:09 Сейчас в теме
Для тех кто будет разворачивать в докере, с 4 гб озу сервис не завелся ksqldb-server exit 137, выдал 8 гб и все ок.
Оставьте свое сообщение