Release Date: 2018-08-31


EMQ X 3.0, named "promise of Tomorrow", is a major release.

EMQ X 3.0 is the first release that supports MQTT 5 Protocol standard; meanwhile it is backward compatible with MQTT 3 (3.1 & 3.1.1)

Besides supporting MQTT 5, EMQ X 3.0 comes with more functional features. Performance and stability are also improved significantly after refactoring some core components.

MQTT 5 Protocol Support

The EMQ X 3.0 implements most features of MQTT 5 specification. New MQTT 5 features include:

  • New packet type.

    In MQTT 5 there is new packet type AUTH for authentication exchange.

  • Session expiry

    Clean session flag in MQTT 3 is now split to Clean Start Flag and a Session Expiry Interval.

  • Message expiry

    Allow an expiry interval to be set when a message is published.

  • Reason code on all ACKs

    All responding packet includes a reason code. The communication partner can know if a request is successful or failed with what reason.

  • Reason string on all ACKs

    An optional reason string to reason code is allowed.

  • Server disconnect

    Now server can disconnect a connection.

  • Payload format and content type

    Can specify the payload format and a MIME style content type when publishing.

  • Request/Response

    Formalized request and response communication pattern.

  • Shared subscriptions

    EMQ X 2.x supports shared subscription on single-node as an unstandardized feature. Now in EMQ X 3.0, the shared subscription is cluster-wide.

  • Subscription ID

    With a subscription ID the client is able to know the message comes from which subscription.

  • Topic alias

    Topic can can have an integer alias, this reduces the communication overhead.

  • User properties

    User properties can be added in most packets.

  • Maximum packet size

    Broker specified max packet size is implemented in EMQ X 2.x already, When a oversized message is received, it will be dropped, and the client will get disconnected without informed about the reason. Now in EMQ X 3.0, the broker can disconnect the MQTT connection with a reason code.

  • Optional Server feature availability

    Define the allowed features of the broker and specify them to the client.

  • Subscription options

    Provide subscription options primarily to allow for message bridge applications.

  • Will delay

    Allow to specify a delay between end of connection and sending the will message. This allows for brief interruptions of the connection without notification to others.

  • Server keep alive

    Server can specify a keepalive value it wishes the client to use.

  • Assigned ClientID

    In case where the ClientID is assigned by the server, return the assigned ClientID.

  • Server reference

    Allow the server to specify an alternate server to use on CONNACK or DISCONNECT.

Evolved Clustering Architecture

The clustering architecture is evolved. Now a single cluster is able to serve ten-millions of concurrent connections.

----------             ----------
|  EMQX  |<--- MQTT--->|  EMQX  |
|--------|             |--------|
|  Ekka  |<----RPC---->|  Ekka  |
|--------|             |--------|
| Mnesia |<--Cluster-->| Mnesia |
|--------|             |--------|
| Kernel |<----TCP---->| Kernel |
----------             ----------
  • Ekka is introduced to auto-cluster EMQX, and to auto-heal the cluster after net-split, following clustering methods are now supported:

    • manual: nodes join a cluster manually;
    • static: auto-clustering from a pre-defined node list;
    • mcast: auto-clustering using IP multicast;
    • dns: auto-clustering using DNS A-records;
    • etcd: auto-clustering using etcd;
    • ks8: auto-clustering using kubernetes.
  • A scalable RPC is introduced to mitigate network congestion among nodes to reduce the risk of net-split.

Rate limiting

The rate limiting is introduced to make the broker more resilient, there are 2 kinds of configurations to control:

  1. The overall message receiving rate in bytes;
  2. The rate of accepting new connections.

Other Feature improvements and Bug Fixes

  • Upgraded esockd;
  • Switched to cowboy HTTP stack for higher HTTP connection performance;
  • Refactored the ACL caching mechanism;
  • Added local and remote MQTT bridge;
  • Introduced "zone" in to EMQX, different zone can have different configuration;
  • Refactored session module, data copy among nodes is reduced, thus higher inter-nodes communication efficiency;
  • Improved of OpenLDAP Access Control;
  • Added a new plugin for delayed publish;
  • Support new statistic and metrics to Prometheus;
  • Improved the hooks.
Version 3.0.0 Version 3.0-rc.5 Version 3.0-rc.4 Version 3.0-rc.3 Version 3.0-rc.2 Version 3.0-rc.1 Version 3.0-beta.4 Version 3.0-beta.3 Version 3.0-beta.2 Version 3.0-beta.1 Version 2.3.11 Version 2.3.10 Version 2.3.9 Version 2.3.8 Version 2.3.7 Version 2.3.6 Version 2.3.5 Version 2.3.4 Version 2.3.3 Version 2.3.2 Version 2.3.1 Version 2.3.0 Version 2.3-rc.2 Version 2.3-rc.1 Version 2.3-beta.4 Version 2.3-beta.3 Version 2.3-beta.2 Version 2.3-beta.1 Version 2.2.0 Version 2.2-rc.2 Version 2.2-rc.1 Version 2.2-beta.3 Version 2.2-beta.2 Version 2.2-beta.1 Version 2.1.2 Version 2.1.1 Version 2.1.0 Version 2.1.0-rc.2 Version 2.1.0-beta.1 Version 2.1-beta Version 2.0.7 Version 2.0.6 Version 2.0.5 Version 2.0.4 Version 2.0.3 Version 2.0.2 Version 2.0.1 Version 2.0 Version 2.0-rc.3 Version 2.0-rc.2 Version 2.0-beta.3 Version 2.0-beta.2 Version 2.0-beta.1 Version 1.1.3 Version 1.1.2 Version 1.1.1 Version 1.1 Version 1.0.2 Version 1.0.1 Version 1.0 Version 0.17.1-beta Version 0.17.0-beta Version 0.16.0-beta Version 0.15.0-beta Version 0.14.1-beta Version 0.14.0-beta Version 0.13.1-beta Version 0.13.0-beta Version 0.12.3-beta Version 0.12.2-beta Version 0.12.1-beta Version 0.12.0-beta Version 0.11.0-beta Version 0.10.4-beta Version 0.10.3-beta Version 0.10.2-beta Version 0.10.1-beta Version 0.10.0-beta Version 0.9.3-alpha Version 0.9.2-alpha Version 0.9.0-alpha Version 0.9.1-alpha Version 0.8.6-beta Version 0.8.5-beta Version 0.8.4-beta Version 0.8.3-beta Version 0.8.2-alpha Version 0.8.1-alpha Version 0.8.0-alpha Version 0.7.1-alpha Version 0.7.0-alpha Version 0.6.2-alpha Version 0.6.1-alpha Version 0.6.0-alpha Version 0.5.5-beta Version 0.5.4-alpha Version 0.5.3-alpha Version 0.5.2-alpha Version 0.5.1-alpha Version 0.5.0-alpha Version 0.4.0-alpha Version 0.3.4-beta Version 0.3.3-beta Version 0.3.2-beta Version 0.3.1-beta Version 0.3.0-beta Version 0.2.1-beta Version 0.2.0 Version 0.1.5 Version 0.1.3 Version 0.1.4 Version 0.1.2 Version 0.1.1 Version 0.1.0