Files
upstream-seaweedfs/weed/mq
upstream-mirror 0a8656d310
Some checks failed
go: build dev binaries / cleanup (push) Successful in 3s
Codespell / Check for spelling errors (push) Failing after 2s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 2s
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 2s
go: build binary / Test (push) Failing after 1s
go: build binary / Test 32-bit (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 2s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 2s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 4s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 2s
KMS Tests / KMS Provider Integration Tests (push) Failing after 3s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 2s
Performance / CPU and Heap Profile (push) Failing after 2s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
go: build binary / Go Vet (push) Failing after 3s
go: build binary / Go Vet 32-bit (push) Failing after 2s
go: build binary / Build (push) Failing after 3s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 2s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 2s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 2s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Failing after 2s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Failing after 3s
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Failing after 2s
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Failing after 2s
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Failing after 3s
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Failing after 4s
S3 SSE Tests / S3 SSE Compatibility Test (push) Failing after 2s
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Failing after 2s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 2s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 2s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Failing after 2s
S3 SSE Tests / S3 SSE Copy Operations Test (push) Failing after 3s
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Failing after 2s
S3 SSE Tests / S3 SSE Performance Test (push) Failing after 2s
S3 SSE Tests / S3 Volume Encryption Test (push) Failing after 4s
Ceph S3 tests / Basic S3 tests (KV store) (push) Failing after 2s
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Failing after 4s
Ceph S3 tests / S3 CORS tests (push) Failing after 3s
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (SQL store) (push) Failing after 2s
test s3 over https using aws-cli / awscli-tests (push) Failing after 2s
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Failing after 3s
Vacuum Integration Tests / Vacuum Integration Tests (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 2s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Failing after 2s
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been skipped
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been skipped
Star History / Regenerate star history chart (push) Failing after 1s
top-up: 11 source files 128-600 KB
2026-09-16 03:28:49 +05:00
..
2026-09-16 03:28:49 +05:00

SeaweedMQ Message Queue on SeaweedFS (WIP, not ready)

What are the use cases it is designed for?

Message queues are like water pipes. Messages flow in the pipes to their destinations.

However, what if a flood comes? Of course, you can increase the number of partitions, add more brokers, restart, and watch the traffic level closely.

Sometimes the flood is expected. For example, backfill some old data in batch, and switch to online messages. You may want to ensure enough brokers to handle the data and reduce them later to cut cost.

SeaweedMQ is designed for use cases that need to:

  • Receive and save large number of messages.
  • Handle spike traffic automatically.

What is special about SeaweedMQ?

  • Separate computation and storage nodes to scale independently.
    • Unlimited storage space by adding volume servers.
    • Unlimited message brokers to handle incoming messages.
    • Offline messages can be operated as normal files.
  • Scale up and down with auto split and merge message topics.
    • Topics can automatically split into segments when traffic increases, and vice verse.
  • Pass messages by reference instead of copying.
    • Clients can optionally upload the messages first and just submit the references.
    • Drastically reduce the broker load.
  • Stateless brokers
    • All brokers are equal. One broker is dynamically picked as the leader.
    • Add brokers at any time.
    • Allow rolling restart brokers or remove brokers at a pace.

Design

How it works?

Brokers are just computation nodes without storage. When a broker starts, it reports itself to masters. Among all the brokers, one of them will be selected as the leader by the masters.

A topic needs to define its partition key on its messages.

Messages for a topic are divided into segments. One segment can cover a range of partitions. A segment can be split into 2 segments, or 2 neighboring segments can be merged back to one segment.

During write time, the client will ask the broker leader for a few brokers to process the segment.

The broker leader will check whether the segment already has assigned the brokers. If not, select a few brokers based on their loads, save the selection into filer, and tell the client.

The client will write the messages for this segment to the selected brokers.

Failover

The broker leader does not contain any state. If it fails, the masters will select a different broker.

For a segment, if any one of the selected brokers is down, the remaining brokers should try to write received messages to the filer, and close the segment to the clients.

Then the clients should start a new segment. The masters should assign other healthy brokers to handle the new segment.

So any brokers can go down without losing data.

Auto Split or Merge

(The idea is learned from Pravega.)

The brokers should report its traffic load to the broker leader periodically.

If any segment has too much load, the broker leader will ask the brokers to tell the client to close current one and create two new segments.

If 2 neighboring segments have the combined load below average load per segment, the broker leader will ask the brokers to tell the client to close this 2 segments and create a new segment.