提升 Flink 广播性能

Improving Flink broadcast performance

我有一个管道,我在其中对事件流应用转换规则(来自广播状态);当我 运行 在没有连接的情况下并行广播流和原始流时,流性能非常好,但是当我广播时性能急剧下降。我怎样才能获得更好的性能。运算符之间传递的数据在 byte[] 中,数据占用空间也很小。

我附上了两种场景的快照:

  1. 顶行显示来自 Kafka 的流消费事件,底行 显示从另一个主题使用的规则。有了这个设置,我可以 每个任务管理器处理实现高达 ~20K msg/sec 的吞吐量 4 分钟 12Gb 数据

2. 我已将广播流与数据流连接起来 以后处理。请注意,仅用于衡量性能 广播 我已经确定数据中没有消耗任何记录 流(顶行)。在广播状态的处理端,我是 仅将收到的消息存储到 MapState。通过这个设置我可以得到 每个任务管理器处理 12Gb 的吞吐量高达 ~1000 msg/sec 18 分钟内的数据。

您所做的不仅仅是连接广播和键控流。以前,每个事件只经过一次网络洗牌(重新平衡、散列和广播连接),现在每个事件有四到五次洗牌。

每次洗牌都很昂贵。尝试减少更改并行度或使用 keyBy 的次数。