Skip to content

RobustMQ is a next-generation, high-performance, cloud-native, converged message queue that is compatible with multiple mainstream message queuing protocols and has complete Serveless capabilities.

License

Notifications You must be signed in to change notification settings

robustmq/robustmq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RobustMQ Logo

Next generation cloud-native converged message queue.

🚀 Introduction

RobustMQ is a next-generation high-performance cloud-native converged message queue. The goal is to implement a message queue based on Rust that can be compatible with multiple mainstream message queue protocols and has complete Serverless architecture.

It has long wanted to support multi-protocol and have a full Serverless architecture. At the same time, we hope to keep the architecture simple while adapting to different deployment scenarios and deployment requirements. To achieve lower deployment, operation and maintenance, and use costs.

《About RobustMQ》

Official documentation:

Tips: We are still young, please give us some time to grow up. We expect RobustMQ to become the next Apache top-level project in the message queue space.

Planning

In the first phase, the basic framework of the cluster (such as metadata storage service, storage adaptation layer, bring your own storage layer, etc.) and the functions related to MQTT protocol will be developed. The goal is to complete the RobustMQ architecture and adapt it to the MQTT protocol, and achieve production availability on the MQTT protocol.

Welcome to our development plan.

We are still young and development plans can change quickly.

Release planing:

💡 Features

  • 100% Rust: A message queuing kernel implemented entirely in Rust.
  • Multi-protocol: Support MQTT 3.1/3.1.1/5.0, AMQP, RocketMQ Remoting/GRPC, Kafka Protocol, OpenMessing, JNS, SQS and other mainstream message protocols.
  • Layered architecture: computing, storage, scheduling independent three-tier architecture, each layer has the ability of cluster deployment, rapid horizontal scaling capacity.
  • Plug-in storage: Standalone plug-in storage layer implementation, you can choose the appropriate storage layer according to your needs. It is compatible with traditional and cloud-native architectures, and supports cloud and IDC deployment patterns.
  • High cohesion architecture: It provides built-in metadata storage components, distributed Journal storage services, and has the ability to deploy quickly, easily and cohesively.
  • Rich functions: support sequential messages, dead message messages, transaction messages, idempotent messages, delay messages and other rich message queue functions.

Architecture

RobustMQ is a typical distributed layered architecture with separate computing layer, storage layer, and scheduling layer. By the control layer (Placement Center), computing Layer (Multi-protocol computing layer), Storage Adapter layer (Storage Adapter Layer), independent remote storage layer (Standalone storage) engine) consists of four parts. Each layer has the ability to quickly scale up and down, so as to achieve a complete Serverless capability of the whole system.

image

  • Placement Center

    The metadata storage and scheduling component of the RobustMQ cluster. It is responsible for cluster-related metadata storage, distribution, scheduling, and so on. Such as cluster node uplinking, configuration storage/distribution, and so on.

  • Multi-protocol computing layer

    Broker Cluster, the computing layer of RobustMQ cluster. It is responsible for the adaptation of various messaging protocols and the implementation of message-related functions. The received data is written to the Storage Layer through the Storage Adapter Layer.

  • Storage Adapter Layer

    Storage adapter layer component, its role to a variety of protocols MQ Topic/Queue/Partition unified abstract Shard. It is also responsible for the adaptation of different storage components, such as local file storage, remote HDFS, object storage, self-developed storage components, and so on. Thus, Shard data can be persistently stored to different storage engines.

  • Standalone storage engine refers to a standalone storage engine, such as cloud object storage (e.g. AWS S3), HDFS Cluster, Data Lake Cluster (iceberg, hudi, etc.). The RobustMQ is similar to the RobustMQ Journal Server, Apache BookKeeper's distributed, segmented storage service. It is responsible for reliable storage of high-performance message data, and has the ability of rapid horizontal and horizontal expansion without perception.

RobustMQ MQTT

RobustMQ MQTT is RobustMQ's complete implementation of the MQTT protocol. The goal is to build a high-performance, full-featured message queuing MQTT product in Rust that can be deployed in clusters. The ultimate goal of this feature is to rival enterprise-grade MQTT products such as EMQX and HiveMQ.

Features

  1. Cluster deployment: A single cluster supports thousands of Broker nodes, supporting unaware smooth horizontal scaling capabilities.
  2. Full protocol support: All features of MQTT3.1, 3.1.1, 5.0 protocols are supported
  3. High performance: A single machine supports millions of connections and high concurrent message throughput.
  4. Multiple communication protocols: Support TCP, TCP SSL, WebSocket, WebSocket SSL, QUIC, HTTP and other access methods.
  5. Plug-in storage: Support offline messages, support a variety of message persistence storage engines.
  6. Fully functional: It supports essential features like testament messages and retained messages, along with all the functionalities of enterprise MQTT brokers such as HiveMQ and EMQX. For the full features, see the RobustMQ MQTT documentation

Get Started

To start the order, you need to start the Placement Center first, and then start the MQTT Broker.

Binary packages run

Download .tar.gz
$ wget https://github.com/robustmq/robustmq/releases/download/v0.1.0-beta/robustmq-apple-mac-arm64-0.1.0-beta.tar.gz
$ tar -xzvf robustmq-apple-mac-arm64-0.1.0-beta.tar.gz
$ cd robustmq-apple-mac-arm64-0.1.0-beta
Start the Placement Center and MQTT Server for a node
$ bin/robust-server placement-center start config/placement-center.toml
$ bin/robust-server mqtt-server start config/mqtt-server.toml
Start the Placement Center and MQTT Server for 3 nodes
# Start Placement Center
$ bin/robust-server placement-center start example/mqtt-cluster/placement-center/node-1.toml
$ bin/robust-server placement-center start example/mqtt-cluster/placement-center/node-2.toml
$ bin/robust-server placement-center start cexample/mqtt-cluster/placement-center/node-3.toml

# Start MQTT Broker
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-1.toml
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-2.toml
$ bin/robust-server mqtt-server start example/mqtt-cluster/mqtt-server/node-3.toml

Cargo runs

Quickly launch the sample cluster
$ git clone https://github.com/robustmq/robustmq.git
$ cd roubustmq

# start cluster
$ sh example/mqtt-cluster/start.sh

# stop cluster
$ sh example/mqtt-cluster/stop.sh
Start the Placement Center and MQTT Server for a node
$ cargo run --package cmd --bin placement-center -- --conf=config/placement-center.toml
$ cargo run --package cmd --bin mqtt-server -- --conf=config/mqtt-server.toml
Start the Placement Center and MQTT Server for 3 node
# Start Placement Center
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-1.toml
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-2.toml
$cargo run --package cmd --bin placement-center -- --conf=example/mqtt-cluster/placement-center/node-3.toml

# Start MQTT Broker
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-1.toml
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-2.toml
cargo run --package cmd --bin mqtt-server -- --conf=example/mqtt-cluster/mqtt-server/node-3.toml

Test Cases

You need to install the cargo-nextes command first. Please refer to documentation《Testing》

  • Unit Tests

    Run all unit tests:

    make test
    
  • Integration Tests

    For MQTT Broker:

    make mqtt-ig-test
    

    For Placement Center:

    make place-ig-test
    

    For Journal Engine:

    make journal-ig-test
    

Packaging

Follow the "make help" prompts to build packages for different platforms

FWR3KG21WF:robustmq bytedance$ make help

Usage:
  make <target>

Build Mac Release
  build-mac-release               Build mac version robustmq.

Build Linux Release
  build-linux-release             Build linux version robustmq.

Build Win Release
  build-win-release               Build win version robustmq.

Build Arm Release
  build-arm-release               Build arm version robustmq.
  test                            Integration testing for Robustmq
  clean                           Clean the project.
  help                            Display help messages.

MQTT functional tests

MQTT functionality was tested through the MQTTX tool. MQTTX quick start: https://mqttx.app/zh/docs/get-started.

RobustMQ AMQP

In the planning

RobustMQ Kafka

In the planning

RobustMQ RocketMQ

In the planning

RobustMQ ...

In the planning

Contributing

Contribution Guidelines

Please refer to contribution guidelines for more information.

Contact us

  • Slack: Join RobustMQ Slack

  • Google Group: Join RobustMQ Google Group

  • Wechat Group: If you're interested in contributing to this project or discussing development topics, scan the QR Code to join our WeChat group for real-time discussions and collaboration.

WeChat QR Code
  • Personal wechat: Wechat group QR code will be updated regularly. If the QR code expires, the developer's personal wechat can be added.
WeChat QR Code

License

RobustMQ uses the Apache 2.0 license to strike a balance between open contributions and allowing you to use the software however you want