我已经尝试使用Flink流媒体一段时间,使用雅虎流媒体基准测试等基准:https://github.com/yahoo/streaming-benchmarks应该给系统带来压力,但我从来没有达到过令人满意的CPU利用率 - 实际上它主要是低至约25%使用所有可用的系统核心(parallelism = nodes * cores)和每个核心一个TaskManager插槽。
最近,我开始使用Gelly的Flink的Graph API,使用一些提供的示例算法(例如Pagerank),批量处理数据集,从数万到数亿个顶点不等。
我占用了四个32个核心的TaskManagers,根据文档的建议,我设置了taskmanager.numberOfTaskSlots: 32
和parallelism.default: 128
。
即使我增加这些值,平均CPU利用率也不会超过40%。因此,由于我的资源没有得到充分利用,我的性能很低。
我还想指出一个事实,在某些情况下,我注意到更低的并行度(和CPU利用率)更好的性能。
我错过了什么?
源中具有更多唯一键和更多聚合运算符的数据越多,您的CPU级别就越高。例如,我有250k消息每秒kafka(flink源每秒读取多少),具有近170K唯一密钥,5分钟翻滚窗口和每个消息15个聚合。我有一个3节点,16个核心的flink集群,具有源并行性15,聚合并行性48和接收并行性3.我的每个节点的CPU使用率一直在85-90%左右。
您可以只输入更多消息,并复制聚合逻辑以对每条消息执行更多操作。尝试从每条消息中获取更多唯一键。