Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
2e44530
Add Kafka Streams runner skeleton module and portable entry points
junaiddshaukat May 16, 2026
61c891a
Address review notes on KafkaStreamsPipelineResult and state dir
junaiddshaukat May 19, 2026
cef6544
Address review feedback on Kafka Streams Runner skeleton
junaiddshaukat May 21, 2026
0d445f7
Drop setRunner(null) suppression; make applicationId required
junaiddshaukat May 22, 2026
d4c7dae
Catch Exception in KafkaStreamsRunner.run() to avoid job-server leak
junaiddshaukat May 23, 2026
64ad482
Merge pull request #38534: [GSoC 2026] Kafka Streams runner skeleton …
je-ik May 23, 2026
faefc95
[GSoC 2026] Kafka Streams runner — translation framework + Impulse tr…
junaiddshaukat May 28, 2026
0f875a0
Add temporary feature-branch CI for Kafka Streams runner (#38725)
junaiddshaukat May 28, 2026
ff554f7
[GSoC 2026] Kafka Streams runner — ExecutableStage (stateless ParDo) …
junaiddshaukat Jun 7, 2026
4c02a77
[GSoC 2026] Kafka Streams runner — Redistribute translator + Executab…
junaiddshaukat Jun 10, 2026
4636b1f
#38957: Add in-memory WatermarkManager core (per-source-partition tra…
junaiddshaukat Jun 15, 2026
1058e94
[GSoC 2026] Kafka Streams runner #38987: Wire WatermarkManager into E…
junaiddshaukat Jun 18, 2026
3e963a6
[GSoC 2026] Kafka Streams runner #39051: Add KStreamsPayload Serde fo…
junaiddshaukat Jun 27, 2026
5e65d47
[GSoC 2026] Kafka Streams runner #39141: Add GroupByKey (GlobalWindow…
junaiddshaukat Jun 30, 2026
4d5847f
[GSoC 2026] Kafka Streams runner #39211: Add KafkaStreamsTestRunner t…
junaiddshaukat Jul 7, 2026
27c4522
[GSoC 2026] Kafka Streams runner #39249: Support Create
junaiddshaukat Jul 9, 2026
ff323eb
[GSoC 2026] Kafka Streams runner #39273: Kafka Streams runner: Flatte…
junaiddshaukat Jul 15, 2026
75adf49
[GSoC 2026] Kafka Streams runner: surface SDK-harness metrics as Metr…
junaiddshaukat Jul 16, 2026
87911f0
[GSoC 2026] Kafka Streams runner: TestPipeline-dispatchable test runn…
junaiddshaukat Jul 17, 2026
d9cea58
[GSoC 2026] Kafka Streams runner: validatesRunner task; Create and Fl…
junaiddshaukat Jul 20, 2026
fca1435
[GSoC 2026] Kafka Streams runner: multi-output executable stages (#39…
junaiddshaukat Jul 22, 2026
b615ae8
[GSoC 2026] Kafka Streams runner: enable ParDoTest in the ValidatesRu…
junaiddshaukat Jul 23, 2026
47614a9
[GSoC 2026] Kafka Streams runner: windowed GroupByKey via ReduceFnRun…
junaiddshaukat Jul 28, 2026
2719876
[GSoC 2026] Kafka Streams runner: run on a real broker, correctly acr…
junaiddshaukat Aug 1, 2026
cf1f10b
[GSoC 2026] Kafka Streams runner: bound a bundle by element count (#3…
junaiddshaukat Aug 3, 2026
fc36301
[GSoC 2026] Kafka Streams runner: CombineTest coverage and two review…
junaiddshaukat Aug 4, 2026
5861f31
[GSoC 2026] Kafka Streams runner: read unbounded sources (#39611)
junaiddshaukat Aug 4, 2026
cb30afd
[GSoC 2026] Kafka Streams runner: user documentation, marked experime…
junaiddshaukat Aug 9, 2026
e051e06
[GSoC 2026] Kafka Streams runner: Python wrapper that starts its own …
junaiddshaukat Aug 10, 2026
4ff6180
[GSoC 2026] Kafka Streams runner: terminate a bounded pipeline when i…
junaiddshaukat Aug 11, 2026
5f1658f
[GSoC 2026] Kafka Streams runner: portable ValidatesRunner suite for …
junaiddshaukat Aug 13, 2026
511a40e
[GSoC 2026] Kafka Streams runner: separate the source's poll size fro…
junaiddshaukat Aug 14, 2026
65a2e40
[GSoC 2026] Kafka Streams runner: bound a source poll in time, not on…
junaiddshaukat Aug 16, 2026
104dc27
[GSoC 2026] Kafka Streams runner: ask for primitive reads in the Java…
junaiddshaukat Aug 16, 2026
49d459a
[GSoC 2026] Kafka Streams runner: put the runner behind an opt-in bui…
junaiddshaukat Aug 16, 2026
10ff557
[GSoC 2026] Kafka Streams runner: an application for measuring instan…
junaiddshaukat Aug 16, 2026
5b37024
[GSoC 2026] Kafka Streams runner: license header and Python formattin…
junaiddshaukat Aug 16, 2026
b12bfc1
[GSoC 2026] Kafka Streams runner: shorten the explanation comments
junaiddshaukat Aug 17, 2026
8d5f651
Merge pull request #39781: [GSoC 2026] Kafka Streams runner: shorten …
je-ik Aug 17, 2026
e268108
Build Kafka Streams runner during javaPreCommit (#18479)
je-ik Aug 17, 2026
8b3b08d
Merge pull request #39784: Build Kafka Streams runner during javaPreC…
je-ik Aug 17, 2026
b67cf23
[GSoC 2026] Kafka Streams runner: update the CHANGES.md entry
junaiddshaukat Aug 17, 2026
52dadba
Merge pull request #39786: [GSoC 2026] Kafka Streams runner: update t…
je-ik Aug 17, 2026
fd8a626
Merge remote-tracking branch 'origin/master' into feat/18479-kafka-st…
je-ik Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"comment": "Modify this file in a trivial way to cause this test suite to run.",
"modification": 1
}
1 change: 1 addition & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ PreCommit Jobs run in a schedule and also get triggered in a PR if relevant sour
| [ PreCommit Java HBase IO Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HBase_IO_Direct.yml) | N/A |`Run Java_HBase_IO_Direct PreCommit`| [![.github/workflows/beam_PreCommit_Java_HBase_IO_Direct.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HBase_IO_Direct.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HBase_IO_Direct.yml?query=event%3Aschedule) |
| [ PreCommit Java HCatalog IO Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HCatalog_IO_Direct.yml) | N/A |`Run Java_HCatalog_IO_Direct PreCommit`| [![.github/workflows/beam_PreCommit_Java_HCatalog_IO_Direct.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HCatalog_IO_Direct.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_HCatalog_IO_Direct.yml?query=event%3Aschedule) |
| [ PreCommit Java Kafka IO Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_IO_Direct.yml) | N/A |`Run Java_Kafka_IO_Direct PreCommit`| [![.github/workflows/beam_PreCommit_Java_Kafka_IO_Direct.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_IO_Direct.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_IO_Direct.yml?query=event%3Aschedule) |
| [ PreCommit Java Kafka Streams Runner ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml) | N/A |`Run Java_Kafka_Streams_Runner PreCommit`| [![.github/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml?query=event%3Aschedule) |
| [ PreCommit Java InfluxDb IO Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_InfluxDb_IO_Direct.yml) | N/A |`Run Java_InfluxDb_IO_Direct PreCommit`| [![.github/workflows/beam_PreCommit_Java_InfluxDb_IO_Direct.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_InfluxDb_IO_Direct.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_InfluxDb_IO_Direct.yml?query=event%3Aschedule) |
| [ PreCommit Java IOs Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_IOs_Direct.yml) | N/A |`Run Java_IOs_Direct PreCommit`| N/A |
| [ PreCommit Java JDBC IO Direct ](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_JDBC_IO_Direct.yml) | N/A |`Run Java_JDBC_IO_Direct PreCommit`| [![.github/workflows/beam_PreCommit_Java_JDBC_IO_Direct.yml](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_JDBC_IO_Direct.yml/badge.svg?event=schedule)](https://github.com/apache/beam/actions/workflows/beam_PreCommit_Java_JDBC_IO_Direct.yml?query=event%3Aschedule) |
Expand Down
74 changes: 74 additions & 0 deletions .github/workflows/beam_KafkaStreamsRunner_FeatureBranch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Temporary, feature-branch-only build for the Kafka Streams runner GSoC work.
#
# Beam's standard PreCommit workflows are gated on self-hosted runners and a
# `branches: ['master', 'release-*']` filter, so they never trigger for PRs
# targeting the `feat/18479-*` integration branch. This lightweight workflow
# bypasses that machinery: it runs on a GitHub-hosted runner and simply builds
# and tests the `runners/kafka-streams` module.
#
# REMOVE THIS WORKFLOW when the Kafka Streams runner work merges to master and
# the standard PreCommit (beam_PreCommit_Java_Kafka_Streams_Runner.yml) takes
# over.

name: KafkaStreams Runner Feature Branch Build

on:
pull_request:
branches:
- 'feat/18479-*'
paths:
- 'runners/kafka-streams/**'
- '.github/workflows/beam_KafkaStreamsRunner_FeatureBranch.yml'
push:
branches:
- 'feat/18479-*'
workflow_dispatch:

permissions:
contents: read

concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.number || github.ref }}'
cancel-in-progress: true

jobs:
build:
name: Kafka Streams runner build
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '11'
- name: Set up Gradle cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-kafka-streams-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-kafka-streams-
- name: Build and test Kafka Streams runner
run: ./gradlew -Pwith-kafka-streams-runner :runners:kafka-streams:build --no-daemon --stacktrace
- name: Run ValidatesRunner suite
run: ./gradlew -Pwith-kafka-streams-runner :runners:kafka-streams:validatesRunner --no-daemon --stacktrace
1 change: 1 addition & 0 deletions .github/workflows/beam_PreCommit_Java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ jobs:
-PdisableSpotlessCheck=true \
-PdisableCheckStyle=true \
-PenableJacocoReport \
-Pwith-kafka-streams-runner \
- name: Archive JUnit Test Results
uses: actions/upload-artifact@v7
if: ${{ !success() }}
Expand Down
119 changes: 119 additions & 0 deletions .github/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: PreCommit Java Kafka Streams Runner

on:
push:
tags: ['v*']
branches: ['master', 'release-*']
paths:
- "runners/kafka-streams/**"
- ".github/workflows/beam_PreCommit_Java_Kafka_Streams_Runner.yml"
pull_request_target:
branches: ['master', 'release-*']
paths:
- "runners/kafka-streams/**"
- 'release/trigger_all_tests.json'
- '.github/trigger_files/beam_PreCommit_Java_Kafka_Streams_Runner.json'
issue_comment:
types: [created]
schedule:
- cron: '15 2/6 * * *'
workflow_dispatch:

# Setting explicit permissions for the action to avoid the default permissions which are `write-all` in case of pull_request_target event
permissions:
actions: write
pull-requests: write
checks: write
contents: read
deployments: read
id-token: none
issues: write
discussions: read
packages: read
pages: read
repository-projects: read
security-events: read
statuses: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.number || github.event.pull_request.head.label || github.sha || github.head_ref || github.ref }}-${{ github.event.schedule || github.event.comment.id || github.event.sender.login }}'
cancel-in-progress: true

env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}

jobs:
beam_PreCommit_Java_Kafka_Streams_Runner:
name: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
strategy:
matrix:
job_name: ["beam_PreCommit_Java_Kafka_Streams_Runner"]
job_phrase: ["Run Java_Kafka_Streams_Runner PreCommit"]
timeout-minutes: 60
if: |
github.event_name == 'push' ||
github.event_name == 'pull_request_target' ||
(github.event_name == 'schedule' && github.repository == 'apache/beam') ||
github.event_name == 'workflow_dispatch' ||
github.event.comment.body == 'Run Java_Kafka_Streams_Runner PreCommit'
runs-on: [self-hosted, ubuntu-24.04, main]
steps:
- uses: actions/checkout@v6
- name: Setup repository
uses: ./.github/actions/setup-action
with:
comment_phrase: ${{ matrix.job_phrase }}
github_token: ${{ secrets.GITHUB_TOKEN }}
github_job: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
- name: Setup environment
uses: ./.github/actions/setup-environment-action
- name: run Kafka Streams runner build script
uses: ./.github/actions/gradle-command-self-hosted-action
with:
gradle-command: :runners:kafka-streams:build
arguments: -Pwith-kafka-streams-runner
max-workers: 4
- name: Archive JUnit Test Results
uses: actions/upload-artifact@v7
if: ${{ !success() }}
with:
name: JUnit Test Results
path: "**/build/reports/tests/"
- name: Publish JUnit Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
commit: '${{ env.prsha || env.GITHUB_SHA }}'
comment_mode: ${{ github.event_name == 'issue_comment' && 'always' || 'off' }}
files: '**/build/test-results/**/*.xml'
large_files: true
- name: Archive SpotBugs Results
uses: actions/upload-artifact@v7
if: always()
with:
name: SpotBugs Results
path: '**/build/reports/spotbugs/*.html'
- name: Publish SpotBugs Results
uses: jwgmeligmeyling/spotbugs-github-action@v1.2
if: always()
with:
name: Publish SpotBugs
path: '**/build/reports/spotbugs/*.html'
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@

## New Features / Improvements

* (Java) Added an experimental Kafka Streams runner, which executes a Beam pipeline as an ordinary Kafka Streams application with no cluster to operate. It supports a subset of the model and is not built by default; pass `-Pwith-kafka-streams-runner` to include it ([#18479](https://github.com/apache/beam/issues/18479)).
* Capability introduces an indicator for aggregations and timers firing during a pipeline drain, allowing users and sinks to recognize and appropriately handle potentially incomplete or partial data ([#36884](https://github.com/apache/beam/issues/36884)).
* Added support for setting disk provisioned IOPS and throughput in Dataflow runner via `--diskProvisionedIops` and `--diskProvisionedThroughputMibps` pipeline options (Java/Go/Python) ([#38349](https://github.com/apache/beam/issues/38349)).
* TriggerStateMachineRunner changes from BitSetCoder to SentinelBitSetCoder to
Expand Down
4 changes: 4 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,10 @@ tasks.register("javaPreCommit") {
dependsOn(":runners:java-fn-execution:build")
dependsOn(":runners:java-job-service:build")
dependsOn(":runners:jet:build")
// Only when the opt-in flag put it in the build; see settings.gradle.kts.
if (findProject(":runners:kafka-streams") != null) {
dependsOn(":runners:kafka-streams:build")
}
dependsOn(":runners:local-java:build")
dependsOn(":runners:portability:java:build")
dependsOn(":runners:prism:java:build")
Expand Down
Loading
Loading