apache/beam · error · RuntimeError
The Kafka Streams runner is experimental and is not part of…
Error message
The Kafka Streams runner is experimental and is not part of any Apache Beam release, so there is no published job server jar to download. Build one from a Beam source tree with ./gradlew -Pwith-kafka-streams-runner :runners:kafka-streams:job-server:shadowJar and pass it as --kafka_streams_job_server_jar, or point that option at a jar you already have. The runner is opt-in at build time, so the -Pwith-kafka-streams-runner flag is required; without it the runner is not part of the build at all.
What it means
The Kafka Streams runner is experimental and not part of any released Beam artifact, so the normal 'download the Beam job server jar' path always fails. When no locally built shadowJar exists either, path_to_jar raises this RuntimeError explaining that the jar must be built from source with the opt-in Gradle flag.
Solutions
- Build from a Beam source tree: ./gradlew -Pwith-kafka-streams-runner :runners:kafka-streams:job-server:shadowJar.
- Pass the built jar explicitly with --kafka_streams_job_server_jar=/path/to/shadowJar.
- Alternatively point the option at any Kafka Streams job server jar you already have.
Example fix
// before beam run --runner=KafkaStreamsRunner ... // after ./gradlew -Pwith-kafka-streams-runner :runners:kafka-streams:job-server:shadowJar beam run ... --kafka_streams_job_server_jar=runners/kafka-streams/job-server/build/libs/beam-runners-kafka-streams-job-server-<ver>-SNAPSHOT.jar
Defensive patterns
Strategy: validation
Validate before calling
local = subprocess_server.JavaJarServer.path_to_dev_beam_jar(
':runners:kafka-streams:job-server:shadowJar')
if not (options.kafka_streams_job_server_jar or os.path.exists(local)):
raise SystemExit('build the kafka-streams job server jar first') Try / catch
try:
jar = runner.path_to_jar()
except RuntimeError:
subprocess.run(['./gradlew', '-Pwith-kafka-streams-runner',
':runners:kafka-streams:job-server:shadowJar'], check=True) Prevention
- Remember the runner requires a source build with -Pwith-kafka-streams-runner
- Pass --kafka_streams_job_server_jar explicitly in CI
- Cache the built jar
When it happens
Trigger: Running a Kafka Streams pipeline without --kafka_streams_job_server_jar, where the dev jar path produced by JavaJarServer.path_to_dev_beam_jar(':runners:kafka-streams:job-server:shadowJar') does not exist on disk.
Common situations: Using pip-installed Apache Beam (no Beam source tree, so no dev jar); building Beam without -Pwith-kafka-streams-runner so the jar was never produced; assuming a published job server exists for releases.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- Could not find in
- Cython not found, cython extensions will not be generated…
- AWS dependencies are not installed, and no alternative…
- Azure dependencies are not installed. Unable to run.
- Bigquery dependencies are not installed.
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/398dc2daf47713b0.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/python/apache_beam/runners/portability/kafka_streams_runner.py:115
url = urllib.parse.urlparse(self._jar)
if not url.scheme:
raise ValueError(
'Unable to parse jar URL "%s". If using a full URL, make sure '
'the scheme is specified. If using a local file path, make sure '
'the file exists; you may have to first build the job server '
'using `./gradlew -Pwith-kafka-streams-runner '
'runners:kafka-streams:job-server:shadowJar`.' % self._jar)
return self._jar
# No jar was given, so look for one built from this source tree. The base
# class would fall back to Maven Central, but the job server is not
# published for any Beam release, so that download always fails and says
# nothing useful about why.
local_jar = subprocess_server.JavaJarServer.path_to_dev_beam_jar(
':runners:kafka-streams:job-server:shadowJar')
if os.path.exists(local_jar):
return local_jar
raise RuntimeError(
'The Kafka Streams runner is experimental and is not part of any '
'Apache Beam release, so there is no published job server jar to '
'download. Build one from a Beam source tree with\n'
' ./gradlew -Pwith-kafka-streams-runner '
':runners:kafka-streams:job-server:shadowJar\n'
'and pass it as --kafka_streams_job_server_jar, or point that option '
'at a jar you already have. The runner is opt-in at build time, so '
'the -Pwith-kafka-streams-runner flag is required; without it the '
'runner is not part of the build at all.')
def java_arguments(
self, job_port, artifact_port, expansion_port, artifacts_dir):
return [
'--artifacts-dir',
artifacts_dir,
'--job-port',
job_port,
'--artifact-port',View on GitHub (pinned to 12126d8942)