cursus

Comparison with Other Messaging Systems

This document compares cursus with other popular messaging systems to help you understand its positioning, strengths, and trade-offs.

High-Level Comparison Matrix

Feature cursus Apache Kafka NATS (JetStream) RabbitMQ Redis Streams
Model Log-based (Pull/Stream) Log-based (Pull) Pub/Sub & Log Queue-based (Push) Log-based (Pull)
Storage Disk (mmap, Async) Disk (Sequential) Memory/Disk Memory/Disk In-memory (Optional Disk)
Ordering Guaranteed per Partition Guaranteed per Partition Guaranteed Complex (Consumer-side) Guaranteed
Complexity Very Low (Single Binary) High (JVM, KRaft/ZK) Low (Go, Single Binary) Medium (Erlang) Low
Throughput High (Optimized I/O) Very High High Medium Very High (In-memory)
Replication Raft-based Leader/Follower Raft (JetStream) Quorum Queues Leader/Follower
Deduplication Built-in (30m window) Idempotent Producer Consumer-side Plugin-based Manual/Scripted

cursus vs. Apache Kafka

cursus is heavily inspired by Kafka’s partitioned log architecture but aims for a much smaller operational footprint.

cursus vs. NATS (JetStream & Core)

NATS distinguishes between Core NATS (ephemeral, at-most-once) and JetStream (persistent, at-least-once). Cursus takes a unified approach that combines elements of both.


The “Core vs. Streaming” Distinction in cursus

When comparing to NATS, it’s helpful to understand where Cursus sits:

Feature NATS Core NATS JetStream cursus
Persistence None (In-memory only) Disk/Memory Disk (Async Batching)
Delivery Guarantee At-most-once At-least-once At-least-once (Idempotent)
Flow Control Limited (Slow Consumer) Full (Pull/Push) Full (Consumer-driven Pull)
Message Replay No Yes Yes (Offset-based)
Use Case Control plane, RPC Data streaming, Logs Lightweight Data Backbone

cursus vs. RabbitMQ

RabbitMQ is a feature-rich, “smart broker” that handles complex routing.

cursus vs. Redis Streams

Redis Streams provides a log-like data structure within an in-memory database.


Summary: When to use cursus?

Choose cursus if you need:

  1. Kafka-like semantics (partitioning, log-based persistence) without the operational complexity of Kafka.
  2. Lightweight footprint for edge deployments or microservices where resource efficiency is critical.
  3. High-performance disk I/O on Linux environments.
  4. Built-in idempotency and deduplication for reliable message delivery.

Choose something else if you need: