TLDR; иногда трудно проанализировать проблему. У меня есть две удачные догадки / снимки - если вы используете бэкэнд состояния RocksDB, вы можете переключиться на FsStateBackend - обычно это быстрее, и RocksDB имеет больше смысла с большими размерами состояний, которые не помещаются в память (или если вам действительно нужна функция дополнительных контрольных точек ). Во-вторых, возиться с параллелизмом, увеличивающимся или уменьшающимся.
Я бы заподозрил то же, что написал @ArvidHeise. У вас размер контрольной точки не велик, но он также не тривиален. Это может добавить дополнительные накладные расходы, чтобы перенести работу за порог едва поспевания за трафиком c, чтобы не отставать и вызывать противодавление. Если вы находитесь под обратным давлением, задержка будет только накапливаться, поэтому даже изменение пары% дополнительных служебных данных может иметь значение между сквозными задержками в миллисекундах и неограниченным постоянно растущим значением.
Если вы можете не просто добавить больше ресурсов, вы должны проанализировать, что именно добавляет эти дополнительные издержки и какой ресурс является узким местом.
- Это процессор? Проверьте использование процессора в кластере. Если это ~ 100%, это то, что вам нужно оптимизировать.
- Это IO? Проверьте использование ввода-вывода в кластере и сравните его с максимальной пропускной способностью / числом запросов в секунду, которое вы можете достичь.
- Если использование ЦП и ввода-вывода низкое, вы можете попытаться увеличить параллелизм, но. ..
- Имейте в виду перекос данных. Противодавление может быть вызвано одной задачей, и в этом случае сложно проанализировать проблему, так как это будет один узкий поток (на IO или CPU), а не целая машина.
После выяснения того, какой ресурс является узким местом, возникает следующий вопрос: почему? Это может быть сразу видно, как только вы его увидите, или может потребоваться копаться, например, проверять журналы G C, прикреплять profiler et c.
Ответы на эти вопросы могут либо дать вам информацию о том, что вы можете попытаться оптимизировать в своей работе, либо позволить вам настроить конфигурацию, либо дать нам (разработчикам Flink) дополнительную точку данных, которую мы могли бы попытаться оптимизировать на Flink. сторона.