问题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社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。