最近在做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

简单来说:

  1. 数据的存储结构尽量使用平整的方式
  2. 开启flink的object resue (collect()消耗瞬间减少到 < 1ms!)

另有一些参考文章:

  1. https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html#performance-comparison