apache / apache/beam

[Task]: Implement dynamic scaling for KinesisIO EFO consumer

Open
#26,258 0 comments 0 reactions 0 assignees View on GitHub
aws io java kinesis P3 task
Dominant language
Java
Stars
8.7k
Forks
4.7k
Avg merge
1d 20h
Merged PRs (30d)
196

Description

### What needs to happen?

Current version of KinesisIO EFO consumer can not adapt to data skew in Kinesis shards. Moreover, when consuming from a stream which experiences often re-sharding, some runner workers may end up having 0 subscriptions.

Non-EFO consumer has implementation of `getSplitBacklogBytes()` which runners can use for dynamic scaling:

https://github.com/apache/beam/blob/cd0f44b3751c9d4b583b2a3e2e1d10aeb75695b9/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/KinesisReader.java#L161

`EFOKinesisReader` should implement a similar mechanism, too:

https://github.com/apache/beam/blob/cd0f44b3751c9d4b583b2a3e2e1d10aeb75695b9/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/kinesis/EFOKinesisReader.java#L31

### Issue Priority

Priority: 3 (nice-to-have improvement)

### Issue Components

- [ ] Component: Python SDK
- [X] Component: Java SDK
- [ ] Component: Go SDK
- [ ] Component: Typescript SDK
- [X] Component: IO connector
- [ ] Component: Beam examples
- [ ] Component: Beam playground
- [ ] Component: Beam katas
- [ ] Component: Website
- [ ] Component: Spark Runner
- [ ] Component: Flink Runner
- [ ] Component: Samza Runner
- [ ] Component: Twister2 Runner
- [ ] Component: Hazelcast Jet Runner
- [ ] Component: Google Cloud Dataflow Runner

Contributor guide

Open the contributing guide

Research direction

Start by comparing KinesisReader.java, especially getSplitBacklogBytes(), with EFOKinesisReader.java. Trace how runners use the existing backlog mechanism for dynamic scaling. Done means the EFO reader provides an equivalent mechanism that adapts to shard data skew and avoids workers ending up with zero subscriptions.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, java
Domain
data-engineering, stream-processing
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.