Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Added¶
Per-endpoint feature flags for the built-in web endpoints:
web_stats_enabled,web_graph_enabled,web_router_enabled,web_tables_enabledandweb_metrics_enabled. Previouslydebugwas the only control, and it enabled the statistics and graph endpoints together, while/routerand/tablecould not be turned off at all — even though/tableserves table data over HTTP. The statistics and graph flags take their default fromdebug, so behaviour is unchanged unless you set them.New
/performance/endpoint (web_metrics_enabled, off by default) returning throughput, latency percentiles, consumer lag and table statistics as JSON. Consumer lag and latency percentiles are computed here —Monitortracks read and log-end offsets but never derives lag, and keeps raw latency deques rather than summaries. Needs no extra dependency, and is independent of bothdebugandfaust.sensors.prometheus. Custom frameworks can expose the same payload withfaust.sensors.metrics.performance_metrics().Framework-neutral web servers:
App.web_server()accepts anymode.Serviceas a replacement for the legacyfaust.web/aiohttp stack. The custom server starts after table recovery and obeysweb_enabled/--without-web.faust.contrib.asgi: co-host any ASGI application with the worker, in one process and one event loop.faust_lifespan()runs Faust from an ASGI lifespan;FaustLifespanMiddlewaresupplies lifespan support to Django and other ASGI applications without a lifespan hook;serve_asgi()installs the ASGI app as the worker’s only web server. Newfaust[asgi]extra;faust[fastapi]adds FastAPI as well.faust.contrib.opentelemetry: OpenTelemetry tracing.setup_opentelemetry()continues a trace from Kafka message headers into your agents — the hopopentelemetry-instrumentation-aiokafkacannot bridge, because Faust’s consumer runs in its own thread. FastAPI apps are instrumented automatically when an SDK is configured. Newfaust[opentelemetry]extra.New userguide page: FastAPI and other ASGI applications.
Fixed¶
Faust apps no longer resolve an event loop when agents, tables or the transport are declared at import time. Previously that pinned the app to a loop that was never run, so starting it from
asyncio.run()— as uvicorn does — failed with “Please create objects with the same loop as running with” or “Task … got Future … attached to a different loop” (#322, #435, #448).faust[aerospike]installed nothing:requirements/extras/aerospike.txtshipped without the matchingBUNDLESentry insetup.py, despite being advertised in the README. A new test guards both directions of that mapping.agent.test_context()records what a yielding agent yields even when its function is not itself an async-generator function — a callable object with an async-generator__call__, or a function returning an async generator. Previously the wrapper classified the agent withinspect.isasyncgenfunction(), which isFalsefor both shapes, so they were treated as never yielding andagent.resultswas filled with the values sent in rather than the values yielded. Nothing raised, so tests kept passing while asserting against their own input.Every Kafka rebalance failed when
opentracingwas not installed. The no-op stand-in Faust falls back to gave its spans no tracer, buttraced_from_parent_spanstarts a child span fromparent.tracer, soon_partitions_revokedandon_partitions_assignedboth raisedAttributeError. Becauseon_rebalance_start()had already run, the app was left mid-rebalance rather than crashing outright, surfacing as agents that timed out and stalled. The stand-in now matches the real library across the surface Faust uses, and a new parity test guards it.traced_from_parent_span()no longer assumes the parent span it is given has a tracer. A span is whatever the configured tracer hands back, and starting a child fromparent.tracerbreaks on any that carries none — as the no-op stand-in’s did before the fix above (#786). Tracing is instrumentation, so it now runs the wrapped function untraced rather than failing its caller.
Changed¶
The
examples/fastapi/directory is nowexamples/fastapi_project/. The old name shadowed the realfastapipackage when running the siblingexamples/fastapi_example.py, so neither example could be run as documented.
v0.12.1 - 2026-07-19¶
Packaging-only patch release. v0.12.0’s wheels published to PyPI, but its source distribution was rejected under PEP 625; this release fixes the sdist filename so the full set of artifacts publishes.
Fixed¶
Build the source distribution with
python -m buildand a PEP 625-compliant (normalized) filename —faust_streaming-<version>.tar.gzinstead of the legacyfaust-streaming-<version>.tar.gzthat PyPI now rejects (#712).
v0.12.0 - 2026-07-19¶
Added¶
Re-add the confluent-kafka transport driver (
confluent://, install with thefaust[ckafka]extra), rewritten and tested against the releasedconfluent-kafkaAPI.Support Python 3.13 and 3.14 (tested with and without the Cython extensions).
on_clearhandlers on(Global)TableandChangeloggedSet(#645).Live-broker integration test harness: CI now starts a real Kafka broker and round-trips messages through both the aiokafka and confluent-kafka client libraries (#706).
Changed¶
Dropped support for Python 3.8 and 3.9 (#650); the minimum supported version is now Python 3.10.
Replaced the unmaintained
arediswithredis-pyfor the Redis store and leader (#635).Support recent
aiokafkareleases: handle 0.13.0 removing theapi_versionparameter (#674), and guard aiokafka metadata/admin calls by the negotiated protocol-API version while keeping the Faust partition assignor for changelog tables (#682).Modernize CI and wheel building: updated wheel runners, Windows wheels, a refreshed
cibuildwheel, and an updated test matrix (#690).Pin
black/isortand update theclickconstraint for reproducible CI (#677, #680).
Fixed¶
Fix release-artifact upload/download for
upload-artifact@v4(#684).
Dependencies¶
Runs on the maintained mode fork
mode-streaming >= 0.4.0.aiokafka >= 0.10.0, now compatible with recent aiokafka releases (0.13.x / 0.14.x) — see #674 and #682.Adds
confluent-kafka >= 2.0.0, required by the optionalfaust[ckafka]transport driver.The
faust[cchardet]extra now uses the maintainedfaust-cchardetfork in place of the unmaintainedcchardet.
v0.8.10 - 2022-09-14¶
Changed¶
Change
aioeventletextension tofaust-aioeventletUpdate versioning of
click>=6.7,<8.2
v0.8.9 - 2022-09-04¶
Added¶
Add improvements to documentation (#351) (2091326 by William Barnhart).
Added aerospike to stores (#350) (ba000ee by William Barnhart).
Add aerospike docs (#348) (3680bbd by William Barnhart).
Add noqa: b024 to base classes to pass lint check (#344) (7648c6e by William Barnhart).
Address topics.py error in #175 by callling message.message (#342) (76f720a by William Barnhart).
Changed¶
Change version to 0.8.9 in preparaion of next release (6475f8c by William Barnhart).
Fixed¶
Fix running
make developand restorepre-committool (#145) (85534ec by Taybin Rutkin).
v0.8.8 - 2022-08-15¶
Added¶
Adding intervaltree to manage gaps in topics to prevent oom (#282) (1e7be3a by Vikram Patki).
v0.8.7 - 2022-08-11¶
Added¶
Add dist.yml for uploading builds to pypi (#338) (79d672c by William Barnhart).
Fixed¶
Removed¶
Remove a broken link in readme.md (#332) (9eb770a by Sefa Degirmenci).
v0.8.6 - 2022-07-19¶
Added¶
Add method to rocksdb for backing up partitions (#304) (0bb2685 by William Barnhart).
Fixed¶
v0.8.5 - 2022-06-02¶
Added¶
Fixed¶
Fix readme typos (#308) (26ff8fc by William Barnhart).
Fix user guide create channel example to run (#299) (f52b783 by Robbie Palmer).
Fix (#287) (ed026a0 by ameen-orca).
Fix: rewrite non enabled unit tests (#272) (d15d349 by Christoph Brand).
Fix aiohttp threadedproducer driver python36, add unit tests (#277) (784bee7 by Christoph Brand).
v0.8.4 - 2022-02-25¶
Fixed¶
v0.8.2 - 2022-02-04¶
Fixed¶
Fix errors in seek when flow is not active (#264) (a313821 by Vikram Patki).
v0.8.1 - 2022-01-19¶
v0.8.0 - 2022-01-11¶
v0.7.9 - 2022-01-07¶
Fixed¶
Fix condition to delete old table keys (#251) (a0e9a31 by Dima Kovalchuk).
v0.7.8 - 2021-12-18¶
v0.7.7 - 2021-12-17¶
Fixed¶
Fix race conditions on rebalance (#241) (6f3c783 by Vikram Patki).
v0.7.6 - 2021-12-15¶
Removed¶
Remove wait_first and extra log (#240) (6e5c301 by ekerstens).
v0.7.5 - 2021-12-14¶
v0.7.4 - 2021-12-13¶
Fixed¶
v0.7.3 - 2021-12-10¶
v0.7.2 - 2021-12-10¶
v0.7.1 - 2021-12-10¶
v0.7.0 - 2021-12-03¶
v0.6.14 - 2021-11-30¶
Fixed¶
v0.6.13 - 2021-11-29¶
v0.6.12 - 2021-11-18¶
Added¶
Add default to external_topic_distribution (#222) (23c2d90 by Stegallo).
v0.6.11 - 2021-11-17¶
Added¶
Add all partitions of global tables as active in order to let them recover in the beginning (#213) (60a8696 by aoberegg).
Fixed¶
Removed¶
Remove outdated colorclass library (#204) (9385c81 by Taybin Rutkin).
v0.6.10 - 2021-10-21¶
Added¶
Adding new feature to retry on aerospike runtime exceptions issue#202 (#203) (868d7a4 by Vikram Patki).
Fixed¶
Fix canonical url when setting either port of host from the cli (#196) (808312b by Ran K).
Fixes #197 (#198) (3959268 by David Parker).
Fix routing method #188 (#191) (835f37e by Ondřej Chmelař).
Fix for reassign table keys faust-streaming#171 (#174) (c1a6b0e by Philipp Jaschke).
Fix for #121 (#168) (fe343c0 by Taybin Rutkin).
Fix markdown formatting in changelog (727987b by Taybin Rutkin).
Fix lint warning (e80829c by Taybin Rutkin).
v0.6.9 - 2021-07-06¶
Fixed¶
Fix error messages in faust app #166 (b06e579 by Vikram Patki 24489).
v0.6.8 - 2021-06-29¶
Fixed¶
v0.6.7 - 2021-06-07¶
v0.6.6 - 2021-06-03¶
Fixed¶
v0.6.5 - 2021-05-14¶
Added¶
Adding replication factor to the leader topic (#150) (7ab0647 by Vikram Patki).
Fixed¶
Fix tests directory name in makefile (#134) (1a5c431 by Taybin Rutkin).
v0.6.4 - 2021-04-26¶
Fixed¶
Fix rocksdb for use with global tables or tables that use_partitioner (#130) (ec3ac3e by aoberegg).
v0.6.3 - 2021-04-06¶
Added¶
Adding changelog (72c59b7 by Vikram Patki 24489).
Fixed¶
Fix for https://github.com/faust-streaming/faust/issues/126 (#127) (159ad62 by Vikram Patki).
v0.6.2 - 2021-03-12¶
Added¶
Add app_name to prometheus metrics (#120) (e0010f7 by Alexey Kuzyashin).
v0.6.1 - 2021-02-28¶
Fixed¶
Fix scan options (#117) (750e3ad by Vikram Patki).
Fix iterating over keys when changelog topic is set. (#106) (7d29cad by aoberegg).
Fix race (out of order) in flushing topics (wrong state is stored in changelog) (#112) (a841a0e by trauter).
Fix agents with multiple topics (#116) (70e5516 by Stevan Milic).
v0.6.0 - 2021-02-25¶
Fixed¶
Fix table rebalance issue (#110) (cd136ad by Bob Haddleton).
v0.5.2 - 2021-02-19¶
Fixed¶
Fix extra parameter (#101) (#109) (d3f28bd by Bob Haddleton).
v0.5.1 - 2021-02-18¶
v0.5.0 - 2021-02-18¶
v0.4.7 - 2021-02-10¶
Added¶
Adding changelog for release (4f7735d by Vikram Patki 24489).
Fixed¶
v0.4.6 - 2021-01-29¶
Fixed¶
v0.4.5 - 2021-01-28¶
Added¶
Adding performance improvement for getters (#87) (d4392d5 by Vikram Patki).
v0.4.3 - 2021-01-26¶
v0.4.2 - 2021-01-21¶
Added¶
Adding threaded producer (#68) (fda7e52 by Vikram Patki).
v0.4.1 - 2021-01-15¶
Added¶
Add web_ssl_context to allow internal web server to support https (#69) (fcb6b18 by Bob Haddleton).
Fixed¶
Fix for outdated sensors after rebalancing (#72) (0a4d059 by krzysieksulejczak).
0.4.0 - 2020-12-22¶
Changed¶
Change requirements from mode to mode-streaming (#65) (e239534 by Thomas Sarboni).
v0.4.0 - 2020-12-18¶
Added¶
Add backpressure to slow stream processing to avoid filing up the buffer (#55) (ccaf0a7 by Vikram Patki).
Fixed¶
v0.3.1 - 2020-12-07¶
Fixed¶
Fix recovery issue in transaction and reprocessing message in consumer (#49) (be1e6db by Vikram Patki).
v0.3.0 - 2020-11-24¶
v0.2.2 - 2020-11-20¶
Fixed¶
Fix for canceled from mode (#42) (1131106 by Vikram Patki).
Fixed ack for tombstones in cython-stream (#39) (41d3e6b by trauter).
Fix commited offset is always behind the real offset by 1 (#33) (18230a7 by Vikram Patki).
Fix(aiokafka): release all fetch waiters (#32) (9fe472f by Vikram Patki).
Fix commited offset is always behind the real offset by 1 (361b09d by Maxim Musayev).
Fix(aiokafka): release all fetch waiters (8cd7ad4 by Bob Haddleton).
Fix: readme updated (7493b6e by marcosschroh).
v0.2.1 - 2020-11-13¶
Fixed¶
Fix typo (#26) (0db67af by M).
v0.2.0 - 2020-11-11¶
v0.1.1 - 2020-11-11¶
Fixed¶
v0.1.0rc6 - 2020-11-10¶
Fixed¶
Fixed recovery hang (1f3111a by Vikram Patki 24489).
v0.1.0rc5 - 2020-11-09¶
Fixed¶
Fixed recovery hang (40ea0b0 by Vikram Patki 24489).
v0.1.0rc3-2 - 2020-11-08¶
Fixed¶
Fixed recovery hang (7902e02 by Vikram Patki 24489).
Fixed recovery hang and undefined set_close method in aiokafka (06755bc by Vikram Patki 24489).
Fix: manifest and setup.py fixed. close #20 (d34b084 by marcosschroh).
Fix: codecov added (2caf669 by marcosschroh).
Fixed typo (774e36d by Vikram Patki 24489).
v0.1.0 - 2020-11-04¶
Added¶
First release of faust fork
Replaced robinhood-aiokafka with aiokafka
Implemented transaction support with aiokafka instead of using the the MultiTXNProducer in the robinhood-aiokafka version. Note that this new transaction implementation will create a producer for each kafka group/partition pair