使用 MemoryStateBackend 需要增加非常多的 Heap 空间用于存储窗口内的状态数据(样本),相对于把数据放到磁盘的优点是处理性能非常好,但缺点很明显:由于 Java 对象在内存的存储效率不高,GB 级别的内存只能存储百兆级别的真实物理数据,所以会有很大的内存开销,且 JVM 大堆 GC 停机时间相对较高,影响作业整体稳定,另外遇到热点事件会有 OOM 风险。
使用 RocksDB 则需要较少的 Heap 空间即可,加大 Native 区域用于读缓存,结合 RocksDB 的高效磁盘读写策略仍然有很好的性能表现。
Note:全量的样本拼接负载使用 16 台机器无法完全服务,因此我们通过对数据进行不同比例的抽样来进行压测。当出现反压时,我们认为作业已经达到性能瓶颈。
曹富强、晨馨,微博机器学习研发中心-高级系统工程师。现负责微博机器学习平台数据计算/数据存储模块,主要涉及实时计算 Flink、Storm、Spark Streaming,数据存储Kafka、Redis,离线计算 Hive、Spark 等。目前专注于Flink/Kafka/Redis在微博机器学习场景的应用,为机器学习提供框架,技术,应用层面的支持。
福利来了 ![数据处理能力相差 2.4 倍?Flink 使用 RocksDB 和 Gemini 的性能对比实验-LMLPHP 数据处理能力相差 2.4 倍?Flink 使用 RocksDB 和 Gemini 的性能对比实验-LMLPHP]()
Apache Flink 极客挑战赛
本文分享自微信公众号 - Flink 中文社区(gh_5efd76d10a8d)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。