ELX-Software

Блог

MQTT-брокер без компромиссов: зачем мы сделали ELX-MQTT Broker

Брокеров MQTT много, и у каждого есть сильные стороны. Но в небольшом проекте почти всегда чего-то не хватает: панели, удобных прав доступа, простой установки. В ELX-MQTT Broker мы собрали то, чего нам не хватало в других.

MQTT-брокер без компромиссов: зачем мы сделали ELX-MQTT Broker

Коротко об MQTT

MQTT — лёгкий протокол обмена сообщениями по схеме «публикация — подписка». Датчик публикует значение в топик, например home/kitchen/temp, а все, кому оно нужно, подписываются на этот топик. Посередине стоит брокер: он принимает сообщения, решает, кому их отдать, и следит, чтобы по дороге ничего не потерялось.

  • QoS 0, 1 и 2 — от «отправил и забыл» до гарантированной доставки ровно один раз.
  • Retain — брокер хранит последнее значение топика и сразу отдаёт его новому подписчику.
  • Завещание (Last Will) — сообщение, которое брокер опубликует, если клиент пропал без прощания.
  • MQTT 5.0 добавил коды причин, срок жизни сообщений, разделяемые подписки, псевдонимы топиков и управление потоком.

На MQTT работают системы умного дома, промышленная телеметрия, трекеры, счётчики и контроллеры. Брокер в такой системе — центральный узел: если он неудобен или ненадёжен, страдает всё остальное.

Какие брокеры бывают и чего в них не хватает

Выбор большой, и у популярных брокеров есть заслуженная репутация. Но у каждого есть своя цена:

Вид брокераСильная сторонаС чем приходится мириться
Лёгкие брокеры с настройкой в файлахНадёжность, малый расход памяти, есть в любом дистрибутивеНет встроенной панели: кто подключён и что летает в топиках, видно только из командной строки; права и пользователи — в текстовых файлах
Корпоративные кластерные брокерыКластеры, миллионы соединений, развитые интеграцииТяжёлые для небольшого объекта; часть возможностей — в платных редакциях; установка и настройка — отдельный проект
Облачные брокерыНичего не нужно ставитьАбонентская плата, лимиты на сообщения, и данные объекта уходят в чужое облако

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

Что мы собрали в ELX-MQTT Broker

ELX-MQTT Broker — полноценный брокер MQTT 3.1.1 и 5.0, написанный с нуля на Go по спецификации, без сторонних библиотек протокола. Всё нужное лежит в одном исполняемом файле.

Живая веб-панель

Скорость сообщений, трафик, клиенты, дерево топиков и лента событий в реальном времени

Права на топики

ACL с запретом по умолчанию; одно правило с $u запирает каждое устройство в своей ветке

Мосты

Двусторонняя пересылка топиков между брокерами с TLS и защитой от петель

Отложенная публикация

$delayed/60/topic — доставка через минуту, переживает перезапуск

REST API

Всё, что умеет панель, доступно по токену, включая токены только на чтение

Один файл

Панель, хранилище SQLite и TLS внутри; ни Docker, ни внешней базы не нужно

ОбластьЧто есть
ПротоколMQTT 3.1.1 и 5.0 полностью: QoS 0/1/2, retain, завещание, постоянные сессии, разделяемые подписки, коды причин, пакет AUTH
ТранспортыTCP, TLS, MQTT поверх WebSocket и защищённого WebSocket
Учётные записиВстроенный список, MariaDB или MySQL, SQLite, CSV, JWT, внешняя служба HTTP
МаршрутизацияПереписывание топиков, автоматические подписки, мосты
ОграниченияВедро токенов на соединение, прореживание болтливых датчиков по шаблону топика
ПанельСемь языков интерфейса, встроенная документация без интернета
Лента событий вместо гаданийКогда клиент не подключается, панель прямо называет причину: неверный пароль, запрещённый топик, несовпадение версии протокола или ошибка TLS. Это быстрее, чем читать журналы самого устройства.

Скорость и число соединений

Удобство не должно стоить производительности, поэтому брокер прошёл нагрузочное тестирование на двух стендах: по сети с отдельным генератором нагрузки и на мощном сервере без сети. Главные цифры:

ПоказательРезультат
Одновременные соединения10 000 по сети без единого отказа; 30 000 без отказов и около 41 000 при попытке 50 000 на одной машине
Приём сообщений, QoS 0До ≈277 000 сообщений в секунду по сети
Доставка подписчикам≈1,35 млн сообщений в секунду при раздаче на 100 подписчиков
Задержка «издатель → брокер → подписчик»Медиана ≈1 мс по сети, 73 мкс без сети
УстойчивостьНи одного падения, зависания или ошибки в журнале за все прогоны

Потолком в тестах оказывался генератор нагрузки и сеть, а не брокер. Этого с большим запасом хватает и для умного дома, и для промышленного объекта с тысячами датчиков. Полный отчёт с методикой — на странице загрузки.

Работает на разных платформах

СистемаСборки
Windows 10 и 11Установщик или портативный исполняемый файл
Debian, Ubuntuamd64 — обычные серверы и компьютеры
Raspberry Pi и другие ARM-платыarm64 и armhf

Брокер написан на Go без CGO и не требует ничего, кроме самого себя: ни рантайма, ни Docker, ни внешней базы данных. Сохранённые сообщения, сессии, очереди, пользователи и настройки лежат в одном файле SQLite — резервная копия брокера сводится к копии этого файла.

Полностью бесплатно

ELX-MQTT Broker бесплатен целиком: нет платной редакции, в которую убраны мосты, панель или внешние источники учётных записей, и нет лимитов на число устройств. Все возможности, описанные выше, доступны в той сборке, которую вы скачиваете.

Как запустить

Debian / Ubuntu, amd64
wget https://elxsoftware.com/download/elxmqttbroker-linux-amd64
sudo install -m 755 elxmqttbroker-linux-amd64 /usr/local/bin/elxmqttbroker
sudo elxmqttbroker --install-service
sudo systemctl enable --now elxmqttbroker

На Windows достаточно запустить установщик или elxmqttbroker.exe. Панель открывается на http://<адрес>:8567, MQTT слушает порт 1883, MQTT поверх TLS — 8883.

Смените пароль администратораПервый вход — admin / admin, чтобы запуск не требовал настройки. Смените пароль до того, как брокер станет доступен из сети.

Пошаговая настройка пользователей, TLS и мостов — в документации. А если данные нужно забрать с устройств Modbus, посмотрите ELX-MODBUS: он публикует их прямо в этот брокер.