最近在做Processing
Framework的性能比较,做到Flink时,测出的数据性能变得及其差。
细看之后发现瓶颈出现在 Collector.collect()
方法,
可能是序列化,对象的复制话费了大量的时间。 在我的例子中,collect(SINGLE
OBJECGT)甚至要多到100ms (我这的OBJECT大概有500Bytes)
经过一番搜寻,这篇文章给了我答案
https://www.ververica.com/blog/curious-case-broken-benchmark-revisiting-apache-flink-vs-databricks-runtime
简单来说:
- 数据的存储结构尽量使用平整的方式
- 开启flink的object resue (collect()消耗瞬间减少到 < 1ms!)
- 另外可以参考: https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html#performance-comparison
其他的参考
- 动态提交时表明依赖
flink run -C <link to your dependencies jar> my-flink-job.jar
https://www.cnblogs.com/felixzh/p/10300002.html