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

Flink这种场景中的,第四步将 状态存储从内存换成rockdbs之后,还能扛得住吗?

第一层1个 flink sql 任务是将所有跟订单id有关的业务表 进行 10s的窗口去重获取到订单id; 第二层7个 flink sql任务,根据订单id分别查询对应的表,获取到宽表所需要的对应字段,分别发往下游的kafka中,第三层1个 flink sql任务,都是消费上面的kafka, 分别对7种主题的订单数据进行row_number()获取对应的 最新的订单主题数据,然后group by打宽到订单维度的 大宽表,将宽表落到clickhosue 并发送到kafka ;第四层 3个flink sql任务,对上游大宽表对应的 kafka消息 的 订单数据进行row_number()获取对应的 最新的订单宽表数据,按照天,周,月进行聚合,聚合表落到clickhouse表; Flink这种场景中的,第四步将 状态存储从内存换成rockdbs之后,还能扛得住吗?

展开
收起
三分钟热度的鱼 2024-03-06 17:09:28 23 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在使用Flink SQL进行数据处理的场景中,如果状态数据量比较大,使用RocksDB作为状态存储后端通常是一个可行的选择。根据您描述的四层Flink作业流程,其中第四步考虑将状态存储从内存切换到RocksDB,这种改变是有可能支撑起您的数据处理需求的。

    以下是一些关于使用RocksDB作为状态存储的分析:

    1. 状态大小:RocksDB能够保存TB级别的状态,这非常适合那些状态特别大的Flink作业,尤其是当状态大小超过JVM堆内存容量时。
    2. 性能优化:虽然RocksDB的性能依赖于适当的调优,但通过调整配置参数,例如Block Cache的大小,可以显著提高读写性能。
    3. 增量检查点:RocksDB是唯一支持增量检查点(incremental checkpointing)的状态后端选项,这可以减少检查点操作的时间和资源消耗。
    4. 延迟可预测性:如果您希望有更可预测的延迟,RocksDB由于其稳定的性能表现,通常能够满足这一需求。
    5. 不受垃圾回收影响:与基于内存的状态后端相比,RocksDB不受Java垃圾回收的影响,有助于减少由垃圾回收引起的停顿时间。
    6. 持久化保障:使用RocksDB可以将状态数据持久化到磁盘上,即使在作业失败后,也能保证状态数据不会丢失,这对于确保作业的稳定性和容错能力非常重要。

    总体而言,考虑到您提到的订单数据处理场景,特别是需要处理上百GB级别的大状态,使用RocksDB作为状态后端是比较合理的选择。它不仅能够提供足够的存储空间来保存大量状态,还能通过优化获得良好的性能表现。当然,为了达到最佳效果,您可能需要根据实际情况对RocksDB进行细致的性能调优。

    2024-03-06 22:20:29
    赞同 展开评论 打赏
  • 压力会比较大,你用的云产品吗?云上gemini表现会好一些。此回答整理自钉群“实时计算Flink产品交流群”

    2024-03-06 17:20:28
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载