Arroyo is a distributed stream processing engine written in Rust that defines pipelines in SQL, performing stateful computation over bounded and unbounded sources with event-time processing and watermarks.
One binary carries the API, controller, and workers, scheduled as processes, on nodes, or on Kubernetes, with Postgres or SQLite for configuration and object storage for checkpoints as Parquet. Pipelines are SQL planned through DataFusion over Arrow batches. Apache-2.0 and free; Arroyo Cloud is the managed option.
How Arroyo answers the questions Stream Processing turns on.
| How it works | |
| Processing model | Streaming dataflow DAG on Arrow batches; SQL planned with DataFusion |
| APIs | SQL; UDFs in Rust or Python, async and aggregate included; REST API and web UI |
| Windowing | Tumbling, sliding (HOP), session |
| Event time and lateness | Watermarks emitted by sources as a fixed offset from the event timestamp; late rows are discarded, no side outputs |
| State backend | Worker memory in the open-source release, so state is bounded by RAM; checkpointed to object storage as Parquet |
| Delivery guarantee | Exactly-once: Chandy-Lamport checkpoints · transactional Kafka sinks |
| Reading results | Through sinks only: there is no serving layer |
| Running it | |
| What you run | A single binary running the API, controller and workers; process, node or Kubernetes scheduler, plus Postgres or SQLite for config and object storage for checkpoints |
| Scaling | Rescale by restarting from a checkpoint, not online; subtasks are placed by the process, node or Kubernetes scheduler |
| Connections | |
| Connectors | Kafka, Redpanda, Confluent, Kinesis, NATS, MQTT, RabbitMQ, Fluvio, WebSocket, SSE, polling HTTP, Postgres and MySQL; sinks add Iceberg, Delta Lake, filesystem, Redis and webhooks |
vs Arroyo: Self-hosted · Managed · Java, Python, Go
vs Arroyo: Self-hosted · Managed · Free · Subscription · Operational complexity: High · Java, Scala, Python
vs Arroyo: Self-hosted · Managed · Free · Subscription · Operational complexity: High · Batch · Streaming · Scala, Python, Java