New scalable, fault-tolerant, and efficient open-source MQTT broker
github.com
github.com
Also why wasn't emqx used? Why is this solution better for their use case?
I guess they could have used the OSS HiveMQ version as a base though. No idea why they didn't do that.
Also, sometimes it could be used because in the previous company where the project author worked they've used Kafka. And the cycle continues.
Please see the architecture doc for more details: https://thingsboard.io/docs/mqtt-broker/architecture/
We have implemented TBMQ to satisfy our enterprise customers' needs. Some of them used hivemq before but decided to ask us to build a new solution (TBMQ) as they were not fully satisfied with hivemq. One of the most important advantages we provided is cluster support in our open-source version compared to hivemq.
TBMQ is a scalable, fault-tolerant broker with the capacity to handle 4M+ concurrent client connections, supporting a minimum of 3M messages per second throughput per single cluster node with low latency delivery. In the cluster mode, its capabilities are further enhanced, enabling it to support more than 100M concurrently connected clients.
You can refer to the TBMQ documentation to set up the broker and understand its primary features, including the MQTT protocol.
These are strong numbers without benchmarks.
You can find another test here: https://thingsboard.io/docs/mqtt-broker/reference/3m-through...
Now - realize this is how natural gas pipelines are monitored/controlled in the mountains. You want that kind of communication to be reliable and scalable right?
I started developing a system ~a decade ago and ended up writing my own messaging protocols/queue systems. It's been an uphill battle, and if there's something a little more modern in the wings I'm all ears (I'm porting over to more modern uC's so it makes sense to re-evaluate the stack I suppose...)
When you run the broker on the same device as your clients you can do some really nice things, like take messages out of the device and into your development machine. Or inject them.
Domain expertise can be a liability as well as an advantage.
Something that lets you integrate authentication with your auth provider and has built in multi-tenancy?
https://www.emqx.io/docs/en/latest/access-control/authn/auth...
They have a community edition available as a docker image or packages for popular Linux distros.
It supports integration with OAuth, LDAP, Radius, ,...
To be clear, I am not asking why not Rabbit instead of Kafka. No. Why not just RabbitMQ with MQTT plugin instead of this broker.
Key points can be found there and everyone will choose their own priorities. For us these are: * https://bloomberg.github.io/blazingmq/docs/introduction/comp... * https://bloomberg.github.io/blazingmq/docs/introduction/comp... (Kafka is Java as well as TBMQ, Kafka already does not depend on Zookeeper) * https://bloomberg.github.io/blazingmq/docs/introduction/comp... * https://bloomberg.github.io/blazingmq/docs/introduction/comp... (for this we recommend reviewing our test - https://thingsboard.io/docs/mqtt-broker/reference/3m-through...)
Edit: thanks a lot!
Written in Go, single-binary deployment... there's a lot to love about NATS !
I cannot speak to performance of NATS as we used it in low-traffic / low-demand setting. In terms of convenience, when used from Go, iirc, it offered some kind of built-in serialization (unlike eg. ZMQ, where you'd have to add your own).
Debugging lost messages was painful, but I've never used a tool where it wasn't...
Other fancy stuff is yes, one binary to run it, and it can also through gossiping, support a distributed KV / object store like etcd / s3 except you can register watchers on it (https://docs.nats.io/nats-concepts/jetstream/key-value-store...).