开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

各位老师,flink 中 clickhouse 的实时去重怎么搞?

问题1:各位老师, clickhouse 的实时去重怎么搞?flink sink 到 ck 还是在某一时间点有重复的 目前是执行一次手动去重
问题2:api 里 dataStream 开窗去重再S ink ?OPTIMIZE TABLE * 目前是每次查询前 掉一次

展开
收起
真的很搞笑 2023-08-09 13:15:15 260 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    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压力。

    2023-08-10 17:27:09
    赞同 展开评论 打赏
  • 回答1:clickhouse就不支持实时去重啊,你要是数据本身重复,你可以在flink里做去重,在写。要是因为flink导致的重复。你就走端到端一致性搞
    回答2:为啥呀开窗。。。直接用状态存一下 然后进行数据比对嘛。。然后给个ttl,此回答整理自钉群“【③群】Apache Flink China社区”

    2023-08-09 13:19:38
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    阿里云 ClickHouse 企业版技术白皮书 立即下载
    ClickHouse在手淘流量分析应用实践Jason Xu 立即下载
    云数据库clickhouse最佳实践 立即下载