Flink 和 Gelly 无法实现高 CPU 利用率

raw*_*uds 5 benchmarking cpu-usage apache-flink gelly

我已经尝试 Flink 流有一段时间了,使用像 Yahoo 流基准这样的基准: https: //github.com/yahoo/streaming-benchmarks应该会给系统带来压力,但我从未达到令人满意的 CPU 利用率 - 在事实上,使用所有可用的系统核心(并行度 = 节点*核心)和每个核心一个 TaskManager 插槽时,其效率主要低至约 25%。

最近,我开始使用 Gelly,Flink 的图形 API,使用一些提供的示例算法(例如 Pagerank),批量处理从数万到数亿个顶点的数据集。

我占用了四个任务管理器,每个任务管理器有 32 个核心,并且按照我设置的文档taskmanager.numberOfTaskSlots: 32parallelism.default: 128.

即使我增加这些值,平均 CPU 利用率也不会超过 40%。因此,由于我的资源没有得到充分利用,我的绩效很低。

我还想指出这样一个事实:在某些情况下,我注意到较低的并行级别(和 CPU 利用率)具有更好的性能。

我缺少什么?

小智 1

源中的数据越多、唯一键越多、聚合运算符越多,CPU 级别就越高。例如,我每秒有 25 万条消息传入 kafka(flink 源每秒读取同样多的消息),每条消息有近 17 万个唯一键、5 分钟的滚动窗口和 15 个聚合。我有一个 3 节点、16 核 Flink 集群,源并行度为 15,聚合并行度为 48,接收器并行度为 3。每个节点的 CPU 使用率始终在 85-90% 左右。

您可以注入更多消息,并复制聚合逻辑以对每条消息执行更多操作。尝试从每条消息中获取更多唯一的密钥。