// the find
faust-streaming/faust
Python Stream Processing. A Faust fork
faust-streaming is a community-maintained fork of Robinhood's Faust library, which brings Kafka Streams-style stream processing to Python using asyncio. It's for Python teams who want to write stateful stream processors without leaving Python or learning a JVM framework. The fork exists because the original repo went dark and stopped releasing.
1. Tables backed by RocksDB give you durable, distributed key-value state that survives restarts — this is what separates Faust from just 'consume Kafka in Python'. 2. Pure Python with asyncio means you can drop in NumPy, SQLAlchemy, or any ML library directly in your stream processor without bridging layers. 3. The windowing support (tumbling, hopping, sliding) is real and battle-tested — Robinhood ran this against billions of events daily. 4. The fork is actively maintained with aiokafka updates and Kafka transaction support, which the original never shipped.
1. The asyncio threading model bites you hard if any dependency does blocking I/O — the FAQ's suggestion to use eventlet as a bridge is a workaround for a fundamental mismatch, not a solution. 2. RocksDB's partition-per-changelog-topic design means table recovery after a crash can be slow and resource-heavy; at scale, you'll hit the 'too many open files' problem mentioned in the FAQ. 3. Still only one transport driver (aiokafka) — no Redpanda, no Pulsar, no fallback if aiokafka has a bug or compatibility gap. 4. At ~1900 stars for a project with years of history and a claimed Robinhood production pedigree, adoption is narrow; you'll hit edge cases that nobody else has hit and filed an issue for yet.