#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
20
.cf 0.4 46,67Kb 20 Скачать
Обработка с кнопкой "отправить" из примера
.epf 6,71Kb
16
.epf 6,71Kb 16 Скачать

Введение

Меня очень печалит тот факт, что в 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

См. также

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

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

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

10000 руб.

02.09.2020    124500    681    389    

732

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

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

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

84000 руб.

19.08.2020    22586    19    1    

22

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    7706    24    6    

42

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

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

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    13524    12    SQV0    47    

28

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

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

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

60000 руб.

05.10.2022    9293    9    8    

11

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

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15899    12    18    

12

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

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

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

10000 руб.

10.11.2023    4221    12    2    

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

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

Дальше нужно мерять предел производительности на ядро, для определения порога применения, после которого надо переходить на NativeAPI + TCP.
ProstoProgrammist; Johny_v; Upiterus; Dimanchik00; izidakg; cleaner_it; CyberCerber; huxuxuya; +8 Ответить
9. huxuxuya 368 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 368 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 368 26.07.22 10:00 Сейчас в теме
(3) а что за файлы >10 мб в кафку отправляются?
4. malikov_pro 1293 26.07.22 07:18 Сейчас в теме
(3) Объект (большой файл(>10 мб)) в объектное хранилище, например S3, а в kafka ссылку на него. Не нужно гвозди забивать микроскопом.
5. Serg O. 225 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 368 26.07.22 11:00 Сейчас в теме
(5) конфлюент - веб морда для Кафки + рест интерфейс + schema registry

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

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

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

Про "Elastic+ Kafka, Kafka + Grafana" даже не знаю что ответить, кафка - брокер сообщений, нужна для отправки чем чтения сообщений, эластик - нужен для поиска и визуализации информации, графана для сбора метрик, конечно можно при отправке сообщения в кафку так же логировать его в эластике и отправлять какие то метрики в графану, но кажется что это разные продукты, конечно можно их скрещивать и строить какие то архитектурные решения с кучей продуктов, но тут бы с кафкой сначала разобраться:)
pavlov_dv; Serg O.; +2 Ответить
12. Serg O. 225 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 368 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. 225 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 44 02.01.23 21:01 Сейчас в теме
(13) а разве Универсальный обмен данными и фабрики XDTO в 1С это не механизм стандартизации обменов ?
27. huxuxuya 368 12.01.23 13:14 Сейчас в теме
(26) Если рассматривать только системы 1с то да, xdto и универсальный обмен это хороший механизм стандартизации обменов в контексте 1Са, но если смотреть шире на все системы компании, то это получается такое решение "в себе" - сделал 1с для продуктов 1с(т.к. обмен в хмл формате и еще и на русском все).
Но тут основное централизация, а дальше от централизации, идет стандартизация, чтобы у тебя в одной очереди не лежали архивчики, в другой ХМЛки, в третьей джейсоны ну и дальше в джейсончиках чтобы были одинаковые принципы структурирования данных.
20. gybson 07.09.22 17:03 Сейчас в теме
Брокер сообщений это намного меньше, чем ESB и в принципе даже по идеологии не очень хорошо подходит. Шина в первую очередь распаривает узлы обмена, здесь этого нет. Шина подразумевает конвертацию данных, тут этого тоже нет. Брокер сообщений просто транспорт, как тот же самый e-mail.
21. huxuxuya 368 13.09.22 10:24 Сейчас в теме
(20) Добрый день, а где я перепутал значение брокера сообщения и esb решения? Я понимаю различие, но не понимаю где не так выразился.
22. gybson 13.09.22 12:12 Сейчас в теме
(21)" сама 1С заинтересована в том, чтобы на ее новую "поделку" - "1С:Шина" люди "сели"".

Вот это тут не в тему. Их поделка с кроликом работает и с кафкой думаю будет работать.
23. huxuxuya 368 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 368 12.01.23 13:16 Сейчас в теме
(25) Не изучал вопрос, можно попробовать что нибудь в докере изобразить, должно быть не сложно, но это будет отдельный сервис. Если о вебхуках и кафке речь, может стоит посмотреть в сторону шины, там емул например, который на себя возьмет мониторинг очереди и доставку сообщений. Или ту же шину 1са.
29. AlexanderChurbanov 02.02.23 21:09 Сейчас в теме
(28) подскажите, пожалуйста, каким докером вы пользуетесь ? Не совсем понял по скриншоту, спасибо!
30. FreeArcher 159 13.11.23 12:45 Сейчас в теме
Спасибо за статью и конфигурацию! Получилось отправлять и получать сообщения.
Единственное не могу попасть в админку кафки по адресу http://localhost:9021/. Пишет что адрес не доступен. Пробовал и другие сборки поднимать, так же не могу попасть в админку. Что-то может быть её нужно или не так делаю?
31. rom-x 152 14.11.23 14:09 Сейчас в теме
Для тех кто будет разворачивать в докере, с 4 гб озу сервис не завелся ksqldb-server exit 137, выдал 8 гб и все ок.
Оставьте свое сообщение