2 releases

0.1.1 Oct 28, 2024
0.1.0 Oct 7, 2024

#644 in Database interfaces

Download history 154/week @ 2024-10-04 40/week @ 2024-10-11 20/week @ 2024-10-18 158/week @ 2024-10-25 46/week @ 2024-11-01 11/week @ 2024-11-08 18/week @ 2024-11-15 17/week @ 2024-11-22 20/week @ 2024-11-29 38/week @ 2024-12-06

93 downloads per month
Used in 9 crates

Apache-2.0

16KB
142 lines

Morax

Discord Apache 2.0 licensed Build Status

Morax is aimed at providing message queue and data streaming functionality based on cloud native services:

  • Meta service is backed by Postgres compatible relational database services (RDS, Aurora, etc.).
  • Data storage is backed by S3 compatible object storage services (S3, MinIO, etc.).

Usage

Currently, Morax supports basic PubSub APIs for Apache Kafka and WAL Service. You can try it out with the following steps.

  1. Start the environment that provides a Postgres instance and a MinIO instance:

    docker compose -f ./dev/docker-compose.yml up
    
  2. Build the morax binary:

    cargo x build
    
  3. Start the broker:

     ./target/debug/morax start --config-file ./dev/config.toml
    

Try out the Apache Kafka broker

Now, a Kafka broker is running at localhost:9092. You can use your favorite Kafka client to interact with it.

You can also get an impression of the interaction by reading the test cases in:

Try out the WAL Service broker

Also, a WAL broker is running at localhost:8848. You can talk to it with the morax-wal-client. The wire protocol is HTTP so that all the HTTP ecosystem is ready for use.

You can also get an impression of the interaction by reading the test cases in:

Design

To support multiple providing message queue and data streaming APIs, Morax is designed as a modular system:

  • Common functionalities like logging, async runtime, and protos are shared;
  • Interfaces of meta service and data storage are shared;
  • Each protocol implements their own wire protocol and message format;
  • Each protocol shares the basic topic metadata model, with optional additional specific properties;
  • Each protocol shares the basic data storage model, the payload is protocol specific, with a common header;
  • Thus, each protocol shares similar publishing/producing APIs;
  • On the contrary, each protocol implements their own subscription and consumer group management.

License

This project is licensed under Apache License, Version 2.0.

Dependencies

~12–25MB
~350K SLoC