[Task]: Implement dynamic scaling for KinesisIO EFO consumer
- 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
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