2022/12/06 菜鸟记录.
场景: Doris 的并发update 配置已打开 (enable_concurrent_update = true).
Flink任务1: 监听Kafka TopicA 修改表1某条数据的a字段.
Flink任务2: 监听Kafka TopicB 修改表1某条数据的b字段.
当后端人员同时向TopicA和TopicB发送数据, 并且修改的是同一条数据的a和b时, 结果只能成功修改其中一个. 后台不报错.
背景: Flink版本 1.14.4
Doris版本 1.1.0
原因: Doris 目前支持的是行更新, 就算我只更新一个字段, 其他所有字段的值也会被覆盖一遍. 而且 Doris 是先读在写, 假如原始数据为 (null,null), 两次update并发执行, 会先并发读取这一行的原始数据,两次update读取的都是 (null,null), 再分别修改成 (a,null) 和 (null,b). 然后行更新, 覆盖写, 要么 (a,null) 覆盖 (null,b), 要么反之, 于是出现了这种只能修改成功一个字段的结果.
解决: 在两次update之间加一个延时, 让后端人员在两次发送Kafka之间sleep一下.