Skip to content

[AMORO-4127] Add mixed Flink 1.19 support#4141

Merged
xxubai merged 5 commits intoapache:masterfrom
j1wonpark:add-mixed-flink-1.19
Mar 28, 2026
Merged

[AMORO-4127] Add mixed Flink 1.19 support#4141
xxubai merged 5 commits intoapache:masterfrom
j1wonpark:add-mixed-flink-1.19

Conversation

@j1wonpark
Copy link
Copy Markdown
Contributor

Why are the changes needed?

Close #4127.

Amoro's mixed-format Flink integration currently supports Flink 1.17 and 1.18. Iceberg's multi-engine support matrix includes Flink 1.19, and aligning Amoro's supported versions with Iceberg reduces friction for future Iceberg upgrades.

Brief change log

  • Add v1.19/amoro-mixed-flink-1.19 module with pom.xml depending on iceberg-flink-1.19 and paimon-flink-1.19
  • Add v1.19/amoro-mixed-flink-runtime-1.19 module
  • Register both modules in amoro-format-mixed/amoro-mixed-flink/pom.xml
  • Update README.md and docs/_index.md to include Flink 1.19.x in the supported version matrix
  • Update docs/engines/flink/flink-get-started.md and using-logstore.md to cover Flink 1.19
  • Add dev/e2e/kind-config.yaml for local E2E cluster setup

Note on amoro-mixed-flink-common: The common module compiles against Flink 1.18 APIs (provided scope). All APIs used in common are confirmed compatible with Flink 1.19 — deprecated items (RichParallelSourceFunction, open(Configuration), getExecutionConfig()) are scheduled for removal in Flink 2.0 and continue to work in 1.19 with fallback support. No breaking API changes were identified between Flink 1.18 and 1.19 for the APIs used in this module.

Note on CI: The existing CI workflows build all Flink version modules in a single pass (no per-version matrix); registering the new modules in pom.xml is sufficient for CI coverage.

How was this patch tested?

  • Add some test cases that check the changes thoroughly including negative and positive cases if possible

  • Add screenshots for manual tests if appropriate

  • Run test locally before making a pull request

Documentation

  • Does this pull request introduce a new feature? yes
  • If yes, how is the feature documented? docs

- Add v1.19/amoro-mixed-flink-1.19 and v1.19/amoro-mixed-flink-runtime-1.19 modules
- Register new modules in parent pom.xml
- Update documentation to include Flink 1.19 in supported version matrix
- Add kind cluster config for local E2E testing

Signed-off-by: Jiwon Park <jpark92@outlook.kr>
@github-actions github-actions bot added type:docs Improvements or additions to documentation module:mixed-flink Flink moduel for Mixed Format type:infra type:build labels Mar 24, 2026
<dependencies>
<dependency>
<groupId>org.apache.amoro</groupId>
<artifactId>amoro-mixed-flink-common</artifactId>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shared module is still hard-pinned to Flink/Iceberg/Paimon 1.18

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. I initially kept amoro-mixed-flink-common pinned to 1.18 to avoid potential runtime breakage on the v1.18 module, but after reviewing the Flink 1.19 release notes there are no breaking API changes — only deprecations scheduled for Flink 2.0. Will update.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After attempting the update, I found an actual breaking change: Output.emitRecordAttributes(RecordAttributes) was added as an abstract method in Flink 1.19, and RecordAttributes itself doesn't exist in Flink 1.18. So bumping common to 1.19 breaks the v1.18 module at runtime.

To support both 1.18 and 1.19 simultaneously, the shared common module approach hits a limit here. Do you have a preferred way to handle this — e.g. keeping common pinned to 1.18 and overriding the affected class in the v1.19 module, or a different architecture?

Copy link
Copy Markdown
Contributor

@xxubai xxubai Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is an empty output implementation. I think it may can just implement an empty method: emitRecordAttributes. HDYT @czy006

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — bumped amoro-mixed-flink-common to Flink/Iceberg/Paimon 1.19 and added an empty emitRecordAttributes to EMPTY_OUTPUT in MixedFormatWriter.

Flink 1.17/1.18 runtime compat is preserved: their Output interface doesn't have emitRecordAttributes, so it's never dispatched and RecordAttributes is never loaded. The project already used this "compile against newer, run on older" pattern (common was previously compiled against Flink 1.18 while also running on 1.17).


## Environment preparation
Download Flink and related dependencies, and download Flink 1.17/1.18 as needed. Taking Flink 1.17 as an example:
Download Flink and related dependencies, and download Flink 1.17/1.18/1.19 as needed. Taking Flink 1.18 as an example:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update releated flink versions to flink 1.18?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some places still tells users to build the 1.17 runtime

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — unintentionally changed the example version from 1.17 to 1.18, which is out of scope for this PR. Reverted to 1.17.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The remaining 1.17 references (build command, path, example script) are intentionally left as-is — updating them is part of the Flink 1.17 drop PR which will be submitted separately. Will be cleaned up there.

@xxubai
Copy link
Copy Markdown
Contributor

xxubai commented Mar 24, 2026

cc @czy006

Signed-off-by: Jiwon Park <jpark92@outlook.kr>
@xxubai xxubai changed the title [AMORO-4127][mixed-flink] Add mixed Flink 1.19 support [AMORO-4127] Add mixed Flink 1.19 support Mar 24, 2026
- Update flink.version from 1.18.1 to 1.19.1
- Replace iceberg-flink-1.18 with iceberg-flink-1.19
- Replace paimon-flink-1.18 with paimon-flink-1.19
- Add empty emitRecordAttributes() to EMPTY_OUTPUT in MixedFormatWriter
  to satisfy the new abstract method added in Flink 1.19 Output interface

Flink 1.17/1.18 runtime compatibility is preserved via JVM lazy class
loading: emitRecordAttributes is never dispatched in pre-1.19 runtimes
since the method does not exist in their Output interface, so
RecordAttributes is never loaded.

Signed-off-by: Jiwon Park <jpark92@outlook.kr>
Flink 1.19 added a check that rejects dropping the currently active
database (DropDatabaseOperation validates current catalog/database).
Switch to default_catalog before dropping the test database to avoid
the "Cannot drop a database which is currently in use" error.

Signed-off-by: Jiwon Park <jpark92@outlook.kr>
Move dev/e2e/kind-config.yaml to a separate PR as requested during review.

Signed-off-by: Jiwon Park <jpark92@outlook.kr>
@xxubai
Copy link
Copy Markdown
Contributor

xxubai commented Mar 27, 2026

I’ll merge this if there are no more comments in the next few days.

@xxubai xxubai added this to the Release 0.9.0 milestone Mar 27, 2026
@xxubai xxubai merged commit 45f074d into apache:master Mar 28, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module:mixed-flink Flink moduel for Mixed Format type:build type:docs Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Improvement]: Add mixed Flink 1.19 support to align with Iceberg engine support

3 participants