Skip to content

[FLINK-39619][docs] Add release notes for Flink 2.3#28123

Open
lihaosky wants to merge 3 commits intoapache:masterfrom
confluentinc:flink-2.3-release-note
Open

[FLINK-39619][docs] Add release notes for Flink 2.3#28123
lihaosky wants to merge 3 commits intoapache:masterfrom
confluentinc:flink-2.3-release-note

Conversation

@lihaosky
Copy link
Copy Markdown
Contributor

@lihaosky lihaosky commented May 7, 2026

What is the purpose of the change

Adds the release notes for the upcoming Flink 2.3 release, modeled on the format of the
2.2 release notes.
Contents are derived from the FLIP wiki pages for the FLIPs included in 2.3 (FLIP-339, FLIP-487,
FLIP-495, FLIP-547, FLIP-549, FLIP-550, FLIP-553, FLIP-555, FLIP-557, FLIP-558, FLIP-559,
FLIP-560, FLIP-561, FLIP-564, FLIP-565), with motivation/impact details pulled from each FLIP's
umbrella JIRA where present.

JIRA: FLINK-39619

Brief change log

Section coverage in docs/content/release-notes/flink-2.3.md:

  • Table SQL / API: FROM_CHANGELOG/TO_CHANGELOG PTFs (FLIP-564), CREATE/ALTER MATERIALIZED TABLE parity (FLIP-550), START_MODE for materialized table evolution (FLIP-557), ARTIFACT keyword (FLIP-559), SinkUpsertMaterializer / ON CONFLICT (FLIP-558), Process Table Function enhancements (FLIP-565).
  • Connectors: Native S3 FileSystem (FLIP-555).
  • Runtime: Adaptive Partition Selection (FLIP-339), AdaptiveScheduler rescale history (FLIP-495) + Web UI (FLIP-487), checkpointing during recovery (FLIP-547), Application Management (FLIP-549), Application Capability Enhancement (FLIP-560), robust OTel gRPC exporter (FLIP-553).
  • Documentation: docs restructure (FLIP-561).

Verifying this change

This change is a docs-only addition; no code paths are exercised.

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): no
  • The public API, i.e., is any changed class annotated with @Public(Evolving): no
  • The serializers: no
  • The runtime per-record code paths (performance sensitive): no
  • Anything that affects deployment or recovery: no
  • The S3 file system connector: no

Documentation

  • Does this pull request introduce a new feature? no
  • If yes, how is the feature documented? docs (release notes only)

@flinkbot
Copy link
Copy Markdown
Collaborator

flinkbot commented May 7, 2026

CI report:

Bot commands The @flinkbot bot supports the following commands:
  • @flinkbot run azure re-run the last Azure build


#### Robust OTel gRPC metric exporter

##### [FLINK-38603](https://issues.apache.org/jira/browse/FLINK-38603) (FLIP-553)
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.

Thank you for the update of release notes!

For this FLIP only 2/3 have been merged before the release cut off. Attribute name truncation is in master branch but won't be released in this round

Copy link
Copy Markdown
Contributor

@twalthr twalthr left a comment

Choose a reason for hiding this comment

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

@lihaosky I would use the effective documentation added as part of the FLIP for the release notes. Not all FLIPs are fully completed. Also we should add the content of the Release Notes field in JIRA to this document.

Comment on lines +36 to +52
The DataStream API has long offered `toChangelogStream()` and `fromChangelogStream()` for working
with changelog streams; Flink 2.3 brings equivalent functionality to SQL via two new built-in
Process Table Functions:

A JDK update (affecting JDK 11.0.30+, 17.0.18+, 21.0.10+, and 24+) disabled `TLS_RSA_*` cipher suites.
This was done to support forward-secrecy (RFC 9325) and comply with the IETF Draft on *Deprecating Obsolete Key Exchange Methods in TLS*.
- `FROM_CHANGELOG` converts an append-only stream that carries an operation column (and optional
before/after row descriptors) into a dynamic table. A configurable `op_mapping` makes it
straightforward to plug in custom CDC formats (e.g. Debezium-style `c`/`u`/`d` codes), and
`invalid_op_handling` (`FAIL`/`LOG`/`SKIP`) controls how rows with unmapped operation codes
are treated.
- `TO_CHANGELOG` is the inverse: it materializes a dynamic table back into an append-only
changelog stream. This is the first SQL-level operator that lets users convert
retract/upsert streams into append form, which is useful for archival, audit and writing to
append-only sinks. `produces_full_deletes` controls whether `-D` records carry the full row.

To support these and future JDK versions, the default value for the Flink configuration option `security.ssl.algorithms` has been changed to a modern, widely available cipher suite:
The two PTFs are designed to be symmetric, so `FROM_CHANGELOG(TO_CHANGELOG(table))` round-trips
correctly. Both support `PARTITION BY` for parallel execution and `uid` for query evolution, and
they expose a `state_ttl` parameter for state retention.
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.

The FLIP is not fully implemented yet, only some signatures made it to the release. @gustavodemorais could you write short summary what works in 2.3?

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.

Hey @twalthr — confirmed against release-2.3.

FROM_CHANGELOG (FLINK-39261)

  • Append-only stream with an op column → updating dynamic table.
  • Default op codes (INSERT, UPDATE_BEFORE, UPDATE_AFTER, DELETE).
  • Custom op column name via op => DESCRIPTOR(my_op).
  • Custom op_mapping with comma-separated keys.
  • Unmapped or NULL op codes fail with TableRuntimeException. No error_handling argument (the master-only follow-up that adds FAIL/SKIP was not cherry-picked).
  • Java Table#fromChangelog(...) and PyFlink Table.from_changelog(...) (FLINK-39479).
  • Row semantics only — PARTITION BY is rejected (FLINK-39537 is open).
  • Retract output only — UPDATE_AFTER without UPDATE_BEFORE (upsert) is rejected.

TO_CHANGELOG (FLINK-39259, FLINK-39349, FLINK-39419)

  • Dynamic table → append-only stream with an op column.
  • Custom op column name and op_mapping; deletion-flag pattern via comma-separated keys.
  • Filtering: only mapped operations forwarded.
  • Row semantics, full deletes, requires UPDATE_BEFORE upstream.
  • Java Table#toChangelog(...) and PyFlink Table.to_changelog(...) (FLINK-39442).
  • No PARTITION BYTO_CHANGELOG set semantics (FLINK-39614) landed on master after the 2.3 cut.
  • Retract input only.

Not in 2.3

  • state_ttl argument — not supported yet, not declared on either PTF in any branch.
  • FROM_CHANGELOG error_handling (FLINK-39495 + follow-up, master only). The can be back-ported to 2.3
  • FROM_CHANGELOG PARTITION BY (FLINK-39537, open). We are done with the work and we need to merge to master and backport to 2.3
  • TO_CHANGELOG PARTITION BY (FLINK-39614, master). Merged to master and needs to be backported to 2.3
  • Conditional traits for PTFs (FLINK-39392, master). needs to be backported to 2.3.
  • Upsert input/output for either PTF.

Release-notes adjustments to consider

  • Drop the state_ttl mention — not declared on either PTF.
  • Drop invalid_op_handling / LOG — the parameter doesn't exist; even on master only error_handling (FAIL/SKIP) exists, and it's not in 2.3.
  • Drop produces_full_deletesTO_CHANGELOG in 2.3 is locked to full deletes; no such argument is exposed.
  • Soften "Both support PARTITION BY" — neither does in 2.3 yet, unless we backport it and we will let you know.
  • The "round-trips correctly" claim holds only for the row-semantics retract case.

Copy link
Copy Markdown
Contributor

@raminqaf raminqaf May 8, 2026

Choose a reason for hiding this comment

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

I will discuss with @gustavodemorais on the remaining PRs that are on master and if we backport them to 2.3. We will let you know to update the release notes! Many thanks!

Comment on lines +117 to +123
- **`ValueView`**: a new lazy single-value state primitive (`value()`, `update()`, `isEmpty()`,
`clear()`) joins the existing `MapView` and `ListView` for working with single-element state
efficiently.
- **Broadcast state**: PTFs support broadcast state through the new
`@ArgumentHint(ArgumentTrait.BROADCAST_SEMANTIC_TABLE)` and `@StateHint(StateKind.BROADCAST)`
annotations, plus `@ArgumentHint(ArgumentTrait.NOTIFY_STATEFUL_SETS)` for re-evaluating keys
when broadcast state changes.
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.

This has not made it to 2.3 yet.

@alpinegizmo
Copy link
Copy Markdown
Contributor

We should include https://issues.apache.org/jira/browse/FLINK-37399 and https://issues.apache.org/jira/browse/FLINK-35661. These are critical issues it would be good to highlight.

@github-actions github-actions Bot added the community-reviewed PR has been reviewed by the community. label May 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-reviewed PR has been reviewed by the community.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants