4

我一直在试验 Flink 流式传输,使用 Yahoo 流式传输基准测试之类的基准测试:https ://github.com/yahoo/streaming-benchmarks这应该会给系统带来压力,但我从未达到令人满意的 CPU 利用率 - 在事实上,使用所有可用系统内核(并行度 = 节点*内核)和每个内核一个 TaskManager 插槽时,它主要低至 ~25%。

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

我占用了四个 TaskManager,每个具有 32 个内核,并且按照我设置的文档的建议taskmanager.numberOfTaskSlots: 32parallelism.default: 128.

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

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

我错过了什么?

4

1 回答 1

1

源中具有更多唯一键和更多聚合运算符的数据越多,您的 CPU 水平就越高。例如,我每秒有 250k 条消息到 kafka 中(flink 源每秒读取的次数一样多),几乎有 170K 唯一键,5 分钟滚动窗口和每条消息 15 个聚合。我有一个 3 节点、16 核的 flink 集群,源并行度为 15,聚合并行度为 48,接收器并行度为 3。我的 CPU 使用率在每个节点中始终保持在 85-90% 左右。

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

于 2019-01-15T14:14:51.590 回答