*What*

In the next Iceberg 1.7 release with Flink 1.20 support [1], I am proposing
to make the following changes for *Flink* *1.20 only* .

1. Mark the old `FlinkSource` as deprecated and redirect users to the
FLIP-27 `IcebergSource` in the Javadoc.

2. Make the FLIP-27 source the default for Flink SQL. Users can still opt
back to the old source via config if needed. Due to the change of source
implementation and checkpoint state, users won't be able to restore from
checkpoint/savepoint for the upgrade to Flink 1.20 and Iceberg 1.7. As
Flink doesn't guarantee state compatibility for new major-minor Flink
version upgrades e.g. from 1.19 to 1.20 [12], this should be acceptable to
Flink SQL users. We should clearly call out the change and state
incompatibility in the release notes.

*Why*

FLIP-27 is the new source interface introduced by Flink in early 2021. The
new FLIP-27 `IcebergSource` implementation [2] was added into Iceberg
around mid of 2022. It was initially added as @Experimental and requires
code change to switch to the new API. For Flink SQL jobs, default is still
the old `FlinkSource` implementation and requires config change to opt in
to the FLIP-27 `IcebergSource`.

It has been two years since the initial introduction of FLIP-27 source
implementation in Iceberg. Now is probably a good time to switch the
default to FLIP-27 source.

1. The community has continue to improve the FLIP-27 sources, like JSON
serializer for FileScanTask [3], split discovery throttling [4], watermark
alignment [5], split enumerator monitoring metrics [6], metadata table
reading [8], speculative execution [9]. Those improvements are not
available in the old source implementation.
2. We have recently closed the remaining gaps like limit pushdown [10],
inferring source parallelism [11] for batch execution to achieve feature
parity between the old and new FLIP-27 source.
3.FLIP-27 source has been used by many users in the production environment
for almost two years now. It has been battle tested.
4. The old SourceFunction interface has been marked as deprecated since
Flink 1.18 on Aug 2023 [7].


*References*
[1] https://github.com/apache/iceberg/pull/10881
[2] https://github.com/apache/iceberg/projects/23
[3] https://github.com/apache/iceberg/issues/1698
[4] https://github.com/apache/iceberg/pull/6299
[5] https://github.com/apache/iceberg/pull/8553
[6] https://github.com/apache/iceberg/pull/9524
[7] https://issues.apache.org/jira/browse/FLINK-28046
[8] https://github.com/apache/iceberg/pull/6222
[9] https://github.com/apache/iceberg/pull/10548
[10] https://github.com/apache/iceberg/pull/10748
[11] https://github.com/apache/iceberg/pull/10832
[12]
https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/ops/upgrading/#table-api--sql

Reply via email to