你说的这个在写入之前进行shuffle(先执行一个group by主键)这个操作我认为应该是Flink框架层面的事情,不应该在作业层面显式添加。
Flink框架应该在执行sink的时候判断目标表是否有主键,如果有主键的话应该插入一个group by算子将相同主键的记录发到同一个TaskManager处理。
我听说 Flink新版本1.15还是1.16不记得了已经改进了这个问题,有谁知道吗?有相关issue或PR链接没?











在 2023-02-19 13:43:29,"RS" <tinyshr...@163.com> 写道:
>Hi,
>connector里面配置的主键控制是写入存储的,有些存储在写入数据的时候,能根据主键自动更新去重
>所以我感觉,你这里的应该是想在计算的时候shuffle(写入之前),你应该需要先执行一个 group by 主键,然后再执行insert into
>
>
>Thanks
>
>
>
>在 2023-02-17 15:56:51,"casel.chen" <casel_c...@126.com> 写道:
>>作业场景是kafka cdc数据源关联几张redis维表再和其他流表进行双流regular inner 
>>join,最后将打宽表写入mongodb。使用的是flink 1.13.2 sql模式。开了debug日志。
>>测试下来发现相同主键的记录在不同的taskmanager上打了日志(我是在Sink 
>>Function的invoke方法打的日志),该行为导致最终结果表数据不正确。
>>
>>
>>请问:
>>flink sql写数据到带主键表时能确保相同主键的记录都被同一个taskmanager处理吗?
>>是因为flink版本旧不支持吗?从flink哪个版本开始支持的呢?
>>我理解flink 
>>sql结果表上定义主键的目的就是期望按主键进行shuffle,确保相同主键的数据被同一个taskmanager处理以确保正确的变更顺序,不知道我理解得对不对。
>>

回复