Feature Request / Improvement
The Flink ContinuousIcebergEnumerator currently provides no observability into scan planning efficiency. Spark exposes scan metrics via its native metrics system, Flink has no equivalent.
Additionally, BaseIncrementalScan.planFiles() does not emit ScanReport via metricsReporter(), unlike SnapshotScan (batch) which already does.
Problem
When running Flink streaming jobs on large Iceberg tables, operators have no visibility into:
- Whether partition pruning is effective (skipped manifests/files)
- How long scan planning takes per cycle (latency spikes)
- How much data is being scanned (file sizes)
- Whether compaction is needed (growing result file counts)
This makes it difficult to diagnose slow streaming pipelines, validate table maintenance effectiveness, or set meaningful SLOs.
Proposed Solution
- Wire metricsReporter() support into BaseIncrementalScan.planFiles(), bringing incremental scans to parity with batch scans (SnapshotScan).
- Expose all ScanMetricsResult fields as Flink gauges on the ContinuousIcebergEnumerator's coordinator metric group, reporting per-scan (last-value) snapshots.
Query engine
Flink
Willingness to contribute
Feature Request / Improvement
The Flink ContinuousIcebergEnumerator currently provides no observability into scan planning efficiency. Spark exposes scan metrics via its native metrics system, Flink has no equivalent.
Additionally, BaseIncrementalScan.planFiles() does not emit ScanReport via metricsReporter(), unlike SnapshotScan (batch) which already does.
Problem
When running Flink streaming jobs on large Iceberg tables, operators have no visibility into:
This makes it difficult to diagnose slow streaming pipelines, validate table maintenance effectiveness, or set meaningful SLOs.
Proposed Solution
Query engine
Flink
Willingness to contribute