[ 
https://issues.apache.org/jira/browse/FLINK-40780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated FLINK-40780:
-----------------------------------
    Labels: pull-request-available  (was: )

> FORWARD edge silently converted to REBALANCE on parallelism mismatch corrupts 
> changelog (upsert/retract) streams
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-40780
>                 URL: https://issues.apache.org/jira/browse/FLINK-40780
>             Project: Flink
>          Issue Type: Bug
>          Components: Runtime / Coordination
>            Reporter: Rui Fan
>            Assignee: Rui Fan
>            Priority: Major
>              Labels: pull-request-available
>
> h2. Problem
> When a FORWARD (pointwise) edge connects two operators whose parallelism 
> differs, the runtime silently replaces the ForwardPartitioner with a 
> REBALANCE (round-robin) partitioner (introduced in FLINK-30213). This is 
> correct for append-only streams, but for order-sensitive changelog streams 
> (upsert/retract) it silently produces wrong, non-deterministic results — no 
> error, no failing job.
> A FORWARD edge preserves the upstream partitioning, and the planner relies on 
> this to skip a redundant keyed exchange when the input is already partitioned 
> by the required key. Downgrading it to REBALANCE breaks that guarantee: 
> records for the same key are scattered across downstream subtasks, so a keyed 
> operator or upsert sink no longer sees a key's changelog in order.
> h2. Example
> A streaming global aggregation into an upsert sink:
> INSERT INTO upsert_sink SELECT 1 AS k, COUNT(*) FROM src;
> Compiled at parallelism 1, the whole path (GroupAggregate → Calc → Sink) 
> chains via FORWARD — correct. If the sink is later run at a higher 
> parallelism than the parallelism-1 aggregate (e.g. via a per-vertex 
> parallelism override / rescale), the edge into the sink stays FORWARD but now 
> spans 1→N: the single key's changelog is spread round-robin across N writers, 
> which interleave writes to the same key and yield a non-deterministic final 
> value.
> h2. Proposed fix
> Add a config option controlling the behavior when a FORWARD edge spans 
> mismatched parallelism:
> pipeline.forward-edge.parallelism-mismatch-mode (enum)
> - REBALANCE — current behavior (downgrade to REBALANCE). Default 
> (backward-compatible).
> - FAIL — reject the job with a clear exception.
> - KEEP_FORWARD — keep the 1-to-1 mapping (order-preserving; the 
> pre-FLINK-30213 behavior).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to