What's Changed
Breaking changes💥
Prefix topic names with source__
for auto-generated source topics
By default, each Source provides a default topic by implementing the default_topic()
method.
"source__"
for better visibility across other topics in the cluster.
This doesn't apply when the topic is passed explicitly via app.dataframe(source, topic)
or app.add_source(source, topic)
.
After upgrading to 3.4.0, the existing Sources using default topics will look for the topic with the new name on restart and create it if
doesn't exist.
To keep using the existing topics, pass the pre-configured Topic
instance with the existing name and serialization config:
from quixstreams import Application
app = Application(...)
# Configure the topic instance to use it together with the Source
topic = app.topic("<existing topic name>", value_serializer=..., value_deserializer=..., key_serializer=..., key_deserializer=...)
source = SomeSource(...)
# To run Sources together with a StreamingDataFrame:
sdf = app.dataframe(source=source, topic=topic)
# or for running Sources stand-alone:
app.add_source(source=source, topic=topic)
by @daniil-quix in #651 #662
Features 🌱
- Amazon Kinesis Sink by @gwaramadze in #642 #649
- Amazon Kinesis Source by @tim-quix in #646
- Amazon S3 Sink by @gwaramadze in #654
- Amazon S3 Source by @tim-quix in #653
- PostgreSQL Sink by @tomas-quix in #641
- Redis Sink by @daniil-quix in #655
- Stateful sources API implementation by @quentin-quix in #615 #631
Improvements 💎
- On
app.stop()
, commit checkpoint before closing the consumer by @daniil-quix in #638 - Trigger
AdminClient.poll
on initialization by @daniil-quix in #661
Docs 📄
- Remove the list of supported connectors from the Connectors docs. by @daniil-quix in #664
Other
- CI: Implement mypy pre-commit check by @quentin-quix in #643
- Update pydantic requirement from <2.10,>=2.7 to >=2.7,<2.11 by @dependabot in #652
- mypy: make quixstreams.state.* pass type checks by @quentin-quix in #657
Full Changelog: v3.3.0...v3.4.0