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

liting liu closed FLINK-41312.
------------------------------
    Resolution: Won't Do

Closing as Won't Do after design review. Flink CDC supports heterogeneous 
sources and many-to-one routing; source Fluss tables can have different bucket 
keys, so there is no unique layout to inherit for a shared sink table. Target 
bucket keys should continue to be determined by explicit sink bucket.key or the 
existing defaults. The local automatic-inheritance draft has been reverted; 
this proposal will not be pursued.

> Preserve source bucket keys when auto-creating Fluss-to-Fluss sink tables
> -------------------------------------------------------------------------
>
>                 Key: FLINK-41312
>                 URL: https://issues.apache.org/jira/browse/FLINK-41312
>             Project: Flink
>          Issue Type: Improvement
>          Components: Flink CDC
>            Reporter: liting liu
>            Priority: Major
>
> h2. Motivation
> For Fluss-to-Fluss replication, a missing sink table is created 
> automatically. However, the source table's bucket keys are not carried in the 
> CDC schema. Unless the user repeats them in the sink's bucket.key option, the 
> new target can have a different bucket layout.
> The example below uses an ordinary non-partitioned table.
> h2. Minimal reproduction
> # Create a non-partitioned Fluss source table cdc_repro.orders with the 
> following definition:
> {code}
> Columns: id INT NOT NULL, tenant INT NOT NULL, marker STRING
> Primary key: (id, tenant)
> Bucket keys: (tenant)
> Bucket count: 2
> {code}
> # Leave cdc_repro.orders absent in a second Fluss cluster.
> # Start a Fluss-to-Fluss CDC pipeline for that table, without a sink 
> bucket.key override.
> # Inspect the bucket keys of the automatically created target table.
> The current code derives target bucket keys (id, tenant), instead of 
> preserving the source bucket keys (tenant). The columns and primary key can 
> therefore match while the bucket layout differs.
> h2. Current implementation
> Reviewed Apache Flink CDC master at db45d06a1e35bc6be87f7b58913c768f8f299d3e:
> * FlussMetadataAccessor.getTableSchema() passes only the Fluss schema and 
> partition keys to FlussConversions.toCdcSchema(); source bucket keys are not 
> propagated.
> * FlussMetaDataApplier.applyCreateTable() gets bucket keys from the sink 
> configuration.
> * FlussConversions.toFlussTable() defaults unspecified bucket keys to primary 
> keys minus partition keys.
> Source references:
> * 
> https://github.com/apache/flink-cdc/blob/db45d06a1e35bc6be87f7b58913c768f8f299d3e/flink-cdc-connect/flink-cdc-pipeline-connectors/flink-cdc-pipeline-connector-fluss/src/main/java/org/apache/flink/cdc/connectors/fluss/source/FlussMetadataAccessor.java#L98-L104
> * 
> https://github.com/apache/flink-cdc/blob/db45d06a1e35bc6be87f7b58913c768f8f299d3e/flink-cdc-connect/flink-cdc-pipeline-connectors/flink-cdc-pipeline-connector-fluss/src/main/java/org/apache/flink/cdc/connectors/fluss/utils/FlussConversions.java#L169-L186
> h2. Expected behavior / proposal
> When automatically creating a Fluss sink table from a Fluss source, preserve 
> the source bucket keys if no explicit sink bucket.key override is provided.
> * Keep explicit sink overrides authoritative.
> * Keep the current default for sources that do not provide Fluss bucket 
> metadata.
> * Preserve the existing target table's layout when the target already exists.
> The current documentation describes the existing default, so this issue 
> proposes improving the Fluss-to-Fluss auto-creation behavior rather than 
> claiming the implementation violates that documented default.
> h2. Related work and workaround
> FLINK-40850 / PR #4564 fixes compatibility checks for pre-created primary-key 
> tables with custom bucket keys. It explicitly leaves new-table creation 
> unchanged, so it does not address this case.
> The current workaround is to repeat the source bucket keys in the sink 
> configuration:
> {code:yaml}
> sink:
>   type: fluss
>   bootstrap.servers: <target-bootstrap>
>   bucket.key: cdc_repro.orders:tenant
> {code}
> h2. Validation scope
> The metadata propagation and defaulting behavior above were confirmed by 
> source-code inspection. A new upstream end-to-end reproduction has not been 
> run for this report.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to