提升 Flink 广播性能
Improving Flink broadcast performance
我有一个管道,我在其中对事件流应用转换规则(来自广播状态);当我 运行 在没有连接的情况下并行广播流和原始流时,流性能非常好,但是当我广播时性能急剧下降。我怎样才能获得更好的性能。运算符之间传递的数据在 byte[] 中,数据占用空间也很小。
我附上了两种场景的快照:
- 顶行显示来自 Kafka 的流消费事件,底行
显示从另一个主题使用的规则。有了这个设置,我可以
每个任务管理器处理实现高达 ~20K msg/sec 的吞吐量
4 分钟 12Gb 数据
2. 我已将广播流与数据流连接起来
以后处理。请注意,仅用于衡量性能
广播 我已经确定数据中没有消耗任何记录
流(顶行)。在广播状态的处理端,我是
仅将收到的消息存储到 MapState。通过这个设置我可以得到
每个任务管理器处理 12Gb 的吞吐量高达 ~1000 msg/sec
18 分钟内的数据。
您所做的不仅仅是连接广播和键控流。以前,每个事件只经过一次网络洗牌(重新平衡、散列和广播连接),现在每个事件有四到五次洗牌。
每次洗牌都很昂贵。尝试减少更改并行度或使用 keyBy 的次数。
我有一个管道,我在其中对事件流应用转换规则(来自广播状态);当我 运行 在没有连接的情况下并行广播流和原始流时,流性能非常好,但是当我广播时性能急剧下降。我怎样才能获得更好的性能。运算符之间传递的数据在 byte[] 中,数据占用空间也很小。
我附上了两种场景的快照:
- 顶行显示来自 Kafka 的流消费事件,底行 显示从另一个主题使用的规则。有了这个设置,我可以 每个任务管理器处理实现高达 ~20K msg/sec 的吞吐量 4 分钟 12Gb 数据
您所做的不仅仅是连接广播和键控流。以前,每个事件只经过一次网络洗牌(重新平衡、散列和广播连接),现在每个事件有四到五次洗牌。
每次洗牌都很昂贵。尝试减少更改并行度或使用 keyBy 的次数。