Flink写入StarRocks是怎样保证精确一次性的?

【详述】flink-connector-starrocks 内部实现是通过缓存并批量由 stream load 导入,而导入的精确一次性时依赖与StarRocks的label,即flink会把label 存储到checkpoint,但是在StarRocks端,label的保存时长只有30分钟,如果flink任务挂掉30分钟再重启,即使flink保证label没有变化,但是对StarRocks来说也是一个新的label,数据再写入就会重复,怎么能保证精确一次性呢?

1赞

这个label默认保留是3天

1.请问哪里可以查看到这个默认值
2.这个默认值是可修改的吗
3.如果存在过多label是不是会影响数据库的写入性能

我好像在文章中找到了相关的FE的配置label_keep_max_second,默认是三天,感谢

精确一次性目前有两种方式,1,理论上两阶段提交,也就是做checkpoint的时候提交,而不是每一个label作为提交,我没有看代码,估计是没有实现两阶段提交的逻辑,这个逻辑有一个缺点就是加大的数据延迟,我们这边实际上都不想要两阶段提交的;2,通过目标表的主键模型去重,达到精确一次的效果,实际生产我们优先选择主键模型的,如果没有主键,最好的方式就是两阶段提交了。

目前是使用label机制去保证精确一致性的,虽然主键模型用幂等性的方式去保证了数据精确一次性,但是并不是所有情况都适合使用主键模型的,一些追加的明细数据还是更倾向于使用明细模型,而且这类明细模型数据量通常比较大,主键模型写入需要更新数据显然也没有明细模型写入速度快

请问,flink往starrock里写数据,sink保证精确一次是怎么设置参数呢?

可以设置 sink.semantic 参数,之前使用的时候感觉不太稳定,因为是 checkpoint 完成后再提交,存在数据延迟以及 checkpoint 过大的问题,容易导致作业挂掉。