问题1:各位老师, clickhouse 的实时去重怎么搞?flink sink 到 ck 还是在某一时间点有重复的 目前是执行一次手动去重
问题2:api 里 dataStream 开窗去重再S ink ?OPTIMIZE TABLE * 目前是每次查询前 掉一次
各位老师,flink 中 clickhouse 的实时去重怎么搞?[阿里云实时计算 Flink版]
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
问题1:各位老师, clickhouse 的实时去重怎么搞?flink sink 到 ck 还是在某一时间点有重复的 目前是执行一次手动去重
问题2:api 里 dataStream 开窗去重再S ink ?OPTIMIZE TABLE * 目前是每次查询前 掉一次
Flink sink到ClickHouse存在重复的原因可能是:
Flink的水位传递语义导致消息重试产生重复
方法是开启ExactlyOnce传输语义:
Copy
set “table.sink.failover-enabled” = true
set “table.sink.insert-only” = true
也可以在ClickHouse中配置去重表,在插入之前去重
在Flink中使用开窗去重:
java
Copy
// 按照某字段分组去重
dataStream
.keyBy(keySelector)
.window(TumblingEventTimeWindows.of(Time.minutes(15)))
.reduce(new ReducingStateDescriptor(new UniqueValueReducer(), …))
ClickHouse OPTIMIZE定期动态优化表也可以,建议设置较长周期如每天。
另外可以开启本地压缩以减少开销。
考虑数据特征,选择适合的去重方式,一般地优先在计算层进行,减轻Db压力。
回答1:clickhouse就不支持实时去重啊,你要是数据本身重复,你可以在flink里做去重,在写。要是因为flink导致的重复。你就走端到端一致性搞
回答2:为啥呀开窗。。。直接用状态存一下 然后进行数据比对嘛。。然后给个ttl,此回答整理自钉群“【③群】Apache Flink China社区”