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 |
| Маршрутизация | Переписывание топиков, автоматические подписки, мосты |
| Ограничения | Ведро токенов на соединение, прореживание болтливых датчиков по шаблону топика |
| Панель | Семь языков интерфейса, встроенная документация без интернета |
Скорость и число соединений
Удобство не должно стоить производительности, поэтому брокер прошёл нагрузочное тестирование на двух стендах: по сети с отдельным генератором нагрузки и на мощном сервере без сети. Главные цифры:
| Показатель | Результат |
|---|---|
| Одновременные соединения | 10 000 по сети без единого отказа; 30 000 без отказов и около 41 000 при попытке 50 000 на одной машине |
| Приём сообщений, QoS 0 | До ≈277 000 сообщений в секунду по сети |
| Доставка подписчикам | ≈1,35 млн сообщений в секунду при раздаче на 100 подписчиков |
| Задержка «издатель → брокер → подписчик» | Медиана ≈1 мс по сети, 73 мкс без сети |
| Устойчивость | Ни одного падения, зависания или ошибки в журнале за все прогоны |
Потолком в тестах оказывался генератор нагрузки и сеть, а не брокер. Этого с большим запасом хватает и для умного дома, и для промышленного объекта с тысячами датчиков. Полный отчёт с методикой — на странице загрузки.
Работает на разных платформах
| Система | Сборки |
|---|---|
| Windows 10 и 11 | Установщик или портативный исполняемый файл |
| Debian, Ubuntu | amd64 — обычные серверы и компьютеры |
| Raspberry Pi и другие ARM-платы | arm64 и armhf |
Брокер написан на Go без CGO и не требует ничего, кроме самого себя: ни рантайма, ни Docker, ни внешней базы данных. Сохранённые сообщения, сессии, очереди, пользователи и настройки лежат в одном файле SQLite — резервная копия брокера сводится к копии этого файла.
Полностью бесплатно
ELX-MQTT Broker бесплатен целиком: нет платной редакции, в которую убраны мосты, панель или внешние источники учётных записей, и нет лимитов на число устройств. Все возможности, описанные выше, доступны в той сборке, которую вы скачиваете.
Как запустить
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: он публикует их прямо в этот брокер.