Implementation:Apache Flink HybridSource CreateEnumerator
| Knowledge Sources | |
|---|---|
| Domains | Stream_Processing, Source_Architecture |
| Last Updated | 2026-02-09 00:00 GMT |
Overview
Concrete tool for creating hybrid source enumerators and readers that wrap source-specific implementations provided by the Apache Flink connector-base module.
Description
HybridSource.createEnumerator creates a HybridSourceSplitEnumerator wrapping the source chain. HybridSource.createReader creates a HybridSourceReader that delegates to source-specific readers. The enumerator uses a SplitEnumeratorContextProxy to translate between HybridSourceSplit and source-specific splits.
Usage
These are internal factory methods called by the Flink runtime when deploying the source.
Code Reference
Source Location
- Repository: Apache Flink
- File: flink-connectors/flink-connector-base/src/main/java/org/apache/flink/connector/base/source/hybrid/HybridSource.java
- Lines: L116-136
Signature
@Internal
@Override
public SourceReader<T, HybridSourceSplit> createReader(SourceReaderContext readerContext)
throws Exception {
return new HybridSourceReader<>(readerContext);
}
@Internal
@Override
public SplitEnumerator<HybridSourceSplit, HybridSourceEnumeratorState> createEnumerator(
SplitEnumeratorContext<HybridSourceSplit> enumContext) {
return new HybridSourceSplitEnumerator(enumContext, sources, 0, null);
}
@Internal
@Override
public SplitEnumerator<HybridSourceSplit, HybridSourceEnumeratorState> restoreEnumerator(
SplitEnumeratorContext<HybridSourceSplit> enumContext,
HybridSourceEnumeratorState checkpoint) throws Exception {
return new HybridSourceSplitEnumerator(
enumContext, sources, checkpoint.getCurrentSourceIndex(), checkpoint);
}
Import
import org.apache.flink.connector.base.source.hybrid.HybridSource;
// Internal methods
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| enumContext | SplitEnumeratorContext<HybridSourceSplit> | Yes | Runtime enumerator context |
| readerContext | SourceReaderContext | Yes | Runtime reader context |
Outputs
| Name | Type | Description |
|---|---|---|
| enumerator | HybridSourceSplitEnumerator | Wrapping enumerator for the source chain |
| reader | HybridSourceReader<T> | Wrapping reader for the current source |
Usage Examples
Initialization Flow
// Flink runtime calls:
// 1. hybridSource.createEnumerator(context)
// -> HybridSourceSplitEnumerator(context, sources, startIndex=0, restoredState=null)
//
// 2. hybridSource.createReader(context)
// -> HybridSourceReader(readerContext) with currentSourceIndex=-1
//
// 3. enumerator.start()
// -> switchEnumerator() creates source[0]'s enumerator
// -> sends SwitchSourceEvent to all readers