Я некоторое время экспериментировал с потоковой передачей Flink, используя такие тесты, как тест потоковой передачи Yahoo: https://github.com/yahoo/streaming-benchmarks, которые должны нагружать систему, но я так и не добился удовлетворительной загрузки ЦП — на самом деле она составляла всего ~ 25% при использовании всех доступных ядер системы (параллелизм = узлы * ядра) и один слот TaskManager на ядро.
Недавно я начал работать с Gelly, Flink Graph API, используя некоторые из предоставленных примеров алгоритмов (например, PageRank), наборы данных пакетной обработки, варьирующиеся от десятков тысяч до сотен миллионов вершин.
Я занимаю четыре TaskManager'а по 32 ядра в каждом, и как подсказывает документация, ставлю taskmanager.numberOfTaskSlots: 32
и parallelism.default: 128
.
Даже если я увеличу эти значения, средняя загрузка процессора никогда не превысит 40%. Следовательно, я получаю низкую производительность, поскольку мои ресурсы используются не полностью.
Я также хочу отметить тот факт, что в некоторых случаях я заметил более высокую производительность при более низких уровнях параллелизма (и загрузки ЦП).
Что мне не хватает?