pystorm/streamparse for Python Apache Storm topologies
Run Python in Apache Storm topologies. Pythonic API, CLI tooling, and a topology DSL.
At a glance
- What is it?
- streamparse lets Python developers define Apache Storm spouts and bolts while retaining Storm as the distributed stream-processing runtime. It also exposes CLI entry points for cluster and project operations, but the README does not provide a complete installation or first-topology tutorial.
- Who is it for?
- streamparse is appropriate for teams that already operate Apache Storm and need Python code inside spouts or bolts, particularly for real-time, highly parallel stream processing. It is a poor fit for developers seeking a standalone Python queue system, an installation-free workflow, or a fully specified quickstart.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why streamparse sits between Python and Storm
streamparse addresses the programming-language boundary in Apache Storm deployments. According to the README, it allows developers to create Storm bolts and spouts in Python without writing Java. Its intended users are Python developers who need to process live data through Storm while working with a Python API rather than implementing topology components in Java. The README also describes a topology DSL, while `setup.py` registers CLI tools for managing Storm clusters and projects.
This makes streamparse a framework integration rather than a general-purpose stream processor. The repository description and README position streamparse as a Python layer for working with Apache Storm and live data streams. The repository topics explicitly connect it to `apache-storm`, `python`, and `storm`. Its `requirements.txt` also includes `pystorm>=3.1.1`, making the dependency relationship visible at the packaging level.
The project is aimed at workloads involving continuous streams and parallel computation. The README describes “real-time map/reduce style computation” and long-running, highly parallel Python processes. That scope differs from a conventional application where Python code consumes queued jobs through a worker system. streamparse is relevant when stream semantics, topology components, and Storm cluster operation are central to the design.
Spouts, bolts, and the Python-to-Storm data path
The documented architecture is concise: Python implementations correspond to Storm spouts and bolts, and `pystorm` connects that Python layer to Apache Storm. The README identifies spouts and bolts as Storm components without documenting their exact roles. The README does not provide a class-level API example, so it does not support claims about exact method names, tuple structures, grouping methods, or acknowledgment configuration.
The repository layout still provides useful implementation signals. The Python package lives under `streamparse/`, while `setup.py` discovers packages through `find_packages()`. Runtime dependencies include `pystorm>=3.1.1`, `simplejson`, `thriftpy2`, and `ruamel.yaml`. Those dependencies suggest that serialization and Storm RPC integration are part of the implementation, although the README does not document their individual roles sufficiently to describe an exact message path.
Streamparse also advertises topology-building support beyond handwritten component classes. The project description identifies a topology DSL, but no DSL syntax appears in the README. It would therefore be unsafe to invent a sample stream declaration or grouping expression. Engineers evaluating the project should inspect the documentation and `examples/` directory for the version they intend to deploy, especially because topology API details can change across major releases.
CLI entry points and Storm project operations
Packaging metadata in `setup.py` registers two console script names:
sparse = streamparse.cli.sparse:main
streamparse = streamparse.cli.sparse:mainBoth names point to the same `streamparse.cli.sparse:main` entry point. This confirms that streamparse supplies command-line tooling, but the README does not document individual subcommands, flags, cluster configuration files, or authentication settings. The two names may offer a shorter and a more explicit executable, but the repository overview does not explain whether one is intended for new installations or retained for compatibility.
The README describes these tools as useful for “managing Storm clusters and projects.” That is broad wording rather than an operational guide. It does not say whether submission, inspection, log retrieval, deployment, or configuration management are covered by the current release. Before treating the CLI as part of a deployment workflow, consult the stable documentation at `http://streamparse.readthedocs.io/` and test the commands against the Storm cluster version used by the project.
The repository includes `examples/redis/` and `examples/kafka-jvm/`. Their presence confirms that example integrations exist, but their directory names alone do not establish the APIs, broker requirements, or deployment steps used in either example. They are better starting points for repository inspection than evidence that a particular external integration is fully documented.
Installing streamparse and establishing a first topology
The README does not include installation commands, and its documentation links do not provide a first executable topology. It directs users to the stable documentation at `http://streamparse.readthedocs.io/stable/`. For that reason, this article does not invent a `pip install` line, Java runtime prerequisite, ZooKeeper setting, Storm command, or DSL example.
The repository does show how the distribution declares itself. `setup.py` names the package `streamparse`, imports version information from `streamparse/version.py`, reads package dependencies from `requirements.txt`, and registers the `sparse` and `streamparse` console scripts. The listed runtime requirements are:
cython
jinja2
Fabric39
pystorm>=3.1.1
requests
ruamel.yaml
setuptools
simplejson
texttable
thriftpy2A new user should begin with the stable documentation rather than treating this dependency list as a complete installation guide. The first concrete verification should be whether the selected Python environment can resolve these dependencies and whether `pystorm` matches the deployed Storm environment. After that, the documentation should be used to create the smallest spout-and-bolt topology, submit it through the documented Storm workflow, and inspect whether Python exceptions or serialized values are reported as expected. The README does not provide enough syntax to execute those steps faithfully.
Storm coupling, release age, and operational boundaries
The principal limitation is coupling. streamparse does not remove Apache Storm from the operational problem. The README presents Storm and streamparse together as a system for live stream processing, and the package depends directly on `pystorm>=3.1.1`. A team adopting it should therefore assess compatibility between its Python layer, `pystorm`, Storm deployment, and cluster configuration. The README does not document a compatibility matrix or a fallback path for unsupported combinations.
Another boundary is documentation depth. The README establishes the purpose, points to Read the Docs, links a user group, and links the roadmap, but it does not include rollback procedures, observability setup, deployment examples, or API migration notes. Its changelog points to the GitHub releases page rather than summarizing version changes locally. Engineers must therefore verify operational details outside the README.
The repository is not archived, and the last push was on 2026-04-22. The latest listed release is v5.0.1 from 2024-08-09, following v5.0.0 from 2024-07-23. The gap between the release list and the later push does not by itself explain what changed after v5.0.1. Upgrade cost should be assessed by reading the relevant release notes and checking whether an existing topology depends on APIs removed or changed in v5.
Apache-2.0 licensing and a queue-system alternative
The repository identifies its license as Apache-2.0 in `setup.py` and includes a `LICENSE` file. That supports reuse and modification under the terms of that license, subject to its notice, patent, and redistribution conditions. This paragraph does not replace legal review of the license or of any separate dependencies used in a deployment.
The clearest alternative described by the README is a Python worker-and-queue system built on a framework such as Celery or RQ. The approach differs in its execution model. The README contrasts Storm and streamparse with worker-and-queue systems built on frameworks such as Celery and RQ. streamparse is the relevant choice when continuous streams and Storm topology semantics matter. A queue system is more direct when jobs are discrete units that can wait for a worker to consume them.
That comparison also exposes streamparse's cost. Choosing it means accepting Apache Storm cluster management and a dependency on `pystorm`, even when the application logic is Python. Teams that only need a conventional task queue should first compare the operational requirements of those two models. Teams choosing streamparse should specifically validate their Storm deployment and topology deployment process before committing application code.
Editorial conclusion
streamparse is appropriate for teams that already operate Apache Storm and need Python code inside spouts or bolts, particularly for real-time, highly parallel stream processing. It is a poor fit for developers seeking a standalone Python queue system, an installation-free workflow, or a fully specified quickstart. Before adoption, verify the current Apache Storm and `pystorm` compatibility in the project documentation, review the available topology examples, and confirm that the package can be installed against your supported Python and Storm environment.
Frequently asked questions
What is streamparse used for in Apache Storm?
It is used to create Apache Storm spouts and bolts in Python without writing those topology components in Java. It also provides CLI tooling and a topology DSL.
How is streamparse installed?
The README does not provide installation commands. It directs users to the stable documentation at `http://streamparse.readthedocs.io/stable/`, while `setup.py` declares the package name, dependencies, and console script entry points.
What version is the latest streamparse release shown?
The latest listed release is v5.0.1, dated 2024-08-09. The repository's last push was on 2026-04-22, but the release list does not explain whether that push led to another release.
Can streamparse replace a Celery or RQ worker system?
The README describes Storm and streamparse as an alternative for real-time map/reduce-style computation and highly parallel Python processing. It does not claim that the project provides the same discrete-task queue model as Celery or RQ.
What license does streamparse use?
The project uses the Apache License 2.0, identified in `setup.py` and represented by the repository's `LICENSE` file.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/pystorm-streamparse)Was this useful?