Tiered storage plugin for RabbitMQ streams. Uploads committed stream data to Amazon S3 in the background. Consumers read from local disk when data is available and fall back to S3 for older data.
Streams retain data in S3 indefinitely (or according to a remote retention policy) at low cost, while local disk only holds recent data. Consumers see a single continuous stream regardless of where the data lives.
For a detailed description of the design, start with docs/README.md.
rabbitmq-stream-s3 has matured considerably and is now at a beta level of stability. The core design has settled and the main subsystems (upload path, read path, garbage collection, retention, and manifest replication) are implemented and exercised by an extensive test suite, formal models, and a Jepsen harness.
It remains pre-1.0, so some interfaces and behavior may still change.
This plugin depends on rabbitmq_prometheus. Enabling rabbitmq_stream_s3
implicitly enables rabbitmq_prometheus, which opens the Prometheus
metrics endpoint on port 15692.
This project currently requires specific development branches of the rabbitmq-server and osiris repositories:
Branch: streams-tiered-storage
Branch: tiered-storage-abstractions
See Tiered Storage Support for RabbitMQ Streams.
- Clone the RabbitMQ server repository:
git clone https://github.com/amazon-mq/upstream-to-rabbitmq-server.git
cd upstream-to-rabbitmq-server
- Switch to the required branch:
git checkout streams-tiered-storage
- Build:
make
For more information on building and developing RabbitMQ plugins, see plugin-development.
See docs/operations.md for all configuration options.
The minimum required configuration is:
stream_s3.bucket = my-rabbitmq-streams-bucket
stream_s3.region = us-east-1
- docs/README.md: overview and reading guide
- docs/user-guide.md: behavior (no implementation details)
- docs/concepts.md: streaming primitives and how the plugin extends them
- docs/manifest.md: manifest tree structure and concurrency control
See CONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.