// the find
robinhood/faust
Python Stream Processing
Faust is a Python stream processing library that ports Kafka Streams concepts — stateful tables, windowed aggregations, changelog replication — to async Python. It was built at Robinhood and ran billions of events per day there. The repo is officially deprecated; active development has moved to the community fork at faust-streaming/faust.
The @app.agent decorator pattern is genuinely clean — async generator functions as stream processors is the right abstraction, no DSL required. Stateful tables backed by RocksDB with Kafka changelog replication handle the hard part of distributed state correctly: failover means another node consumes the changelog and takes over, not a cold restart. LiveCheck is a standout feature — it lets you write end-to-end tests for your stream pipelines that run continuously in production, which most stream frameworks skip entirely. Static typing with mypy throughout, unusual for Python async code of this vintage, makes refactoring agents considerably safer.
The repo is abandoned — use faust-streaming/faust instead, not this one. The RocksDB dependency is painful in practice: native compilation, ulimit adjustments on macOS, frequent pip install failures in CI; if your team isn't prepared to manage native deps, you'll hit this immediately. Kafka is the only supported broker — no Redis Streams, no RabbitMQ, no Pulsar — so if you're not already on Kafka, the infrastructure cost is the whole conversation. The asyncio model is a trap for CPU-bound processing: it's easy to accidentally block the event loop in a stream handler and silently kill throughput, and the GIL means threading won't save you.