You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[](https://twitter.com/quix_io)
Quix Streams is a cloudnative library for processing data in Kafka using pure Python. It’s designed to give you the power of a distributed system in a lightweight library by combining the low-level scalability and resiliency features of Kafka with an easy to use Python interface (to ease newcomers to stream processing).
13
+
Quix Streams is a cloud-native library for processing data in Kafka using pure Python. It’s designed to give you the power of a distributed system in a lightweight library by combining Kafka's low-level scalability and resiliency features with an easy-to-use Python interface (to ease newcomers to stream processing).
11
14
12
-
Quix Streams has the following benefits:
13
-
14
-
- Pure Python (no JVM, no wrappers, no cross-language debugging).
15
-
- No orchestrator, no server-side engine.
15
+
It has the following benefits:
16
16
- Streaming DataFrame API (similar to pandas DataFrame) for tabular data transformations.
17
-
- Easily integrates with the entire Python ecosystem (pandas, scikit-learn, TensorFlow, PyTorch etc).
18
-
- Support for many serialization formats, including JSON (and Quix-specific).
19
-
- Support for stateful operations using RocksDB.
20
-
- Support for aggregations over tumbling and hopping time windows.
21
-
- "At-least-once" and "exactly-once" Kafka processing guarantees.
22
-
- Designed to run and scale resiliently via container orchestration (like Kubernetes).
23
-
- Easily runs locally and in Jupyter Notebook for convenient development and debugging.
24
-
- Seamless integration with the fully managed [Quix Cloud](https://quix.io/product) platform.
25
-
26
-
Use Quix Streams to build event-driven, machine learning/AI or physics-based applications that depend on real-time data from Kafka.
17
+
- Custom stateful operations via a state object.
18
+
- Custom reducing and aggregating over tumbling and hopping time windows.
19
+
- Exactly-once processing semantics via Kafka transactions.
20
+
- Pure Python with no need for a server-side engine.
27
21
22
+
Use Quix Streams to build simple Kafka producer/consumer applications or leverage stream processing to build complex event-driven systems, real-time data pipelines and AI/ML products.
# Use a stateful function to persist data to the state store and update the value in place
97
-
sdf = sdf.update(count, stateful=True)
98
-
99
-
# Print the result before producing it
100
-
sdf = sdf.update(lambdavalue, ctx: print('Producing a message:', value))
101
-
102
-
# Produce the result to the output topic
103
-
sdf = sdf.to_topic(output_topic)
104
-
105
-
if__name__=="__main__":
106
-
# Run the streaming application
107
-
app.run(sdf)
69
+
# Produce alerts to the output topic
70
+
sdf = sdf.to_topic(alerts_topic)
108
71
72
+
# Run the streaming application
73
+
app.run(sdf)
109
74
```
110
75
111
-
112
-
### How It Works
113
-
There are two primary components:
114
-
-`StreamingDataFrame` - a predefined declarative pipeline to process and transform incoming messages.
115
-
-`Application` - to manage the Kafka-related setup & teardown and message lifecycle (consuming, committing). It processes each message with the dataframe you provide it.
116
-
117
-
Under the hood, the `Application` will:
118
-
- Consume a message.
119
-
- Deserialize it.
120
-
- Process it with your `StreamingDataFrame`.
121
-
- Produce it to the output topic.
122
-
- Automatically commit the topic offset and state updates after the message is processed.
123
-
- React to Kafka rebalancing updates and manage the topic partitions.
124
-
- Manage the State store.
125
-
- Handle OS signals and gracefully exit the application.
126
-
127
76
### Tutorials
128
77
129
78
To see Quix Streams in action, check out the Quickstart and Tutorials in the docs:
@@ -134,64 +83,54 @@ To see Quix Streams in action, check out the Quickstart and Tutorials in the doc
-`StreamingDataFrame` - a predefined declarative pipeline to process and transform incoming messages.
89
+
-`Application` - to manage the Kafka-related setup, teardown and message lifecycle (consuming, committing). It processes each message with the dataframe you provide for it to run.
90
+
91
+
Under the hood, the `Application` will:
92
+
- Consume and deserialize messages.
93
+
- Process them with your `StreamingDataFrame`.
94
+
- Produce it to the output topic.
95
+
- Automatically checkpoint processed messages and state for resiliency.
96
+
- Scale using Kafka's built-in consumer groups mechanism.
138
97
139
-
This library doesn't have any dependency on any commercial products, but if you use it together with Quix Cloud you will get some advantages out of the box during your development process such as:
140
-
- Auto-configuration.
141
-
- Monitoring.
142
-
- Data explorer.
143
-
- Data persistence.
144
-
- Pipeline visualization.
145
-
- Metrics.
146
98
147
-
and more.
99
+
### Deployment
100
+
You can run Quix Streams pipelines anywhere Python is installed.
148
101
149
-
Quix Streams provides a seamless integration with Quix Cloud, and it can automatically configure the `Application` using Quix SDK Token.
102
+
Deploy to your own infrastructure or to [Quix Cloud](https://quix.io/product) on AWS, Azure, GCP or on-premise for a fully managed platform.
103
+
You'll get self-service DevOps, CI/CD and monitoring, all built with best in class engineering practices learned from Formula 1 Racing.
150
104
151
105
Please see the [**Connecting to Quix Cloud**](https://quix.io/docs/quix-streams/quix-platform.html) page
152
106
to learn how to use Quix Streams and Quix Cloud together.
153
107
154
-
### What's Next
108
+
##Roadmap 📍
155
109
156
-
This library is being actively developed.
110
+
This library is being actively developed by a full-time team.
157
111
158
112
Here are some of the planned improvements:
159
113
160
114
-[x][Windowed aggregations over Tumbling & Hopping windows](https://quix.io/docs/quix-streams/v2-0-latest/windowing.html)
161
-
-[x][State recovery based on Kafka changelog topics](https://quix.io/docs/quix-streams/advanced/stateful-processing.html#fault-tolerance-recovery)
115
+
-[x][Stateful operations and recovery based on Kafka changelog topics](https://quix.io/docs/quix-streams/advanced/stateful-processing.html)
-[X]["Exactly Once" delivery guarantees for Kafka message processing (AKA transactions)](https://quix.io/docs/quix-streams/configuration.html#processing-guarantees)
117
+
-[x]["Exactly Once" delivery guarantees for Kafka message processing (AKA transactions)](https://quix.io/docs/quix-streams/configuration.html#processing-guarantees)
164
118
-[ ] Joins
165
119
-[ ] Windowed aggregations over Sliding windows
166
120
-[ ] Support for Avro and Protobuf formats
167
121
-[ ] Schema Registry support
168
122
169
123
170
-
To find out when the next version is ready, make sure you watch this repo
171
-
and join our [Quix Community on Slack](https://quix.io/slack-invite)!
172
-
173
-
## Contribution Guide
174
-
175
-
Contributing is a great way to learn and we especially welcome those who haven't contributed to an OSS project before.
176
-
<br>
177
-
We're very open to any feedback or code contributions to this OSS project ❤️.
178
-
179
-
Before contributing, please read our [Contributing](https://github.com/quixio/quix-streams/blob/main/CONTRIBUTING.md) file for how you can best give feedback and contribute.
180
-
181
-
## Need help?
182
-
183
-
If you run into any problems, please create an [issue](https://github.com/quixio/quix-streams/issues) or ask in #quix-help in our [Quix Community on Slack](https://quix.io/slack-invite).
184
-
185
-
## Community 👭
186
-
187
-
Join the [Quix Community on Slack](https://quix.io/slack-invite), a vibrant group of Python developers, data enthusiasts and newcomers to Apache Kafka, who are learning and leveraging Quix Streams for real-time data processing.
188
-
189
-
## License
124
+
## Get Involved 🤝
190
125
191
-
Quix Streams is licensed under the Apache 2.0 license. View a copy of the License file [here](https://github.com/quixio/quix-streams/blob/main/LICENSE).
126
+
- Please use [GitHub issues](https://github.com/quixio/quix-streams/issues) to report bugs and suggest new features.
127
+
- Join the [Quix Community on Slack](https://quix.io/slack-invite), a vibrant group of Kafka Python developers, data engineers and newcomers to Apache Kafka, who are learning and leveraging Quix Streams for real-time data processing.
128
+
- Watch and subscribe to [@QuixStreams on YouTube](https://www.youtube.com/@QuixStreams) for code-along tutorials from scratch and interesting community highlights.
129
+
- Follow us on [X](https://x.com/Quix_io) and [LinkedIn](https://www.linkedin.com/company/70925173) where we share our latest tutorials, forthcoming community events and the occasional meme.
130
+
- If you have any questions or feedback - write to us at support@quix.io!
192
131
193
-
## Stay in touch 👋
194
132
195
-
You can follow us on [Twitter](https://twitter.com/quix_io) and [Linkedin](https://www.linkedin.com/company/70925173) where we share our latest tutorials, forthcoming community events and the occasional meme.
133
+
## License 📗
196
134
197
-
If you have any questions or feedback - write to us at support@quix.io!
135
+
Quix Streams is licensed under the Apache 2.0 license.
136
+
View a copy of the License file [here](https://github.com/quixio/quix-streams/blob/main/LICENSE).
0 commit comments