You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Ran Tao (Jira)" <ji...@apache.org> on 2026/05/18 02:57:00 UTC

[jira] [Created] (FLINK-39696) Distributed SchemaOperator emits FlushEvent with schema operator subtaskId instead of upstream sourcePartition

Ran Tao created FLINK-39696:
-------------------------------

             Summary: Distributed SchemaOperator emits FlushEvent with schema operator subtaskId instead of upstream sourcePartition
                 Key: FLINK-39696
                 URL: https://issues.apache.org/jira/browse/FLINK-39696
             Project: Flink
          Issue Type: Bug
          Components: Flink CDC
            Reporter: Ran Tao


In the distributed schema evolution topology, the source identity used by the schema-change path and the flush path is inconsistent.

{*}Current behavior{*}:
1. DistributedPrePartitionOperator preserves the original upstream source partition when it broadcasts a schema change event.
2. Distributed SchemaOperator forwards that identity to the coordinator via {*}SchemaChangeRequest(sourcePartition, sinkSubTaskId, schemaChangeEvent){*}.
3. SchemaCoordinator also deduplicates distributed schema change events by (sourcePartition, schemaChangeEvent).
4. However, when SchemaOperator emits the downstream FlushEvent, it currently uses the SchemaOperator subtask id instead of the original source partition.

As a result, the same distributed schema change is identified by different keys in different parts of the pipeline:
 * SchemaChangeRequest / coordinator deduplication use the original source partition
 * FlushEvent / FlushSuccessEvent use the SchemaOperator subtask id

This makes the flush lineage inconsistent with the schema-change lineage in distributed topology, and duplicated broadcast branches of one upstream schema change cannot be consistently aligned by the original source partition.

{*}Expected behavior{*}:
FlushEvent in distributed SchemaOperator should carry the original upstream source partition, i.e. the same source identity already used in SchemaChangeRequest.

{*}Suggested fix{*}:
In {*}org.apache.flink.cdc.runtime.operators.schema.distributed.SchemaOperator#requestSchemaChange{*}, construct FlushEvent with schemaChangeRequest.getSourceSubTaskId() instead of the current SchemaOperator subtask id.

A simple regression test can reproduce the issue:
 * source partition = 0
 * distributed SchemaOperator subtask = 1
 * process a CreateTableEvent
 * the first emitted FlushEvent should use 0, not 1



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