Локальная ячейка во Флинке - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть поток данных, содержащий ключ, который мне нужно смешать и сопоставить с данными, связанными с этим ключом. Каждый ключ принадлежит разделу, и каждый раздел может быть загружен из базы данных.

Данные достаточно велики, и только несколько сотен из сотен тысяч разделов могут уместиться в одном диспетчере задач.

Мой текущий подход заключается в использовании partitionCustom на основе key.partition и кэшировании данных раздела внутри RichMapFunction для смешивания и сопоставления без повторной загрузки данных разделов.

Когда число из-за слишком высокой скорости передачи сообщений в одном и том же разделе я столкнулся с проблемой «горячей точки» / производительности.

Какие инструменты есть в Flink для повышения пропускной способности в этом случае?

Есть ли способы настройки расписания и оптимизации размещения заданий на основе времени наладки на машинах и истории максимального времени обработки?

1 Ответ

1 голос
/ 29 февраля 2020

Похоже, что (а) ваши данные на базе БД также разбиты на разделы, и (б) у вас перекос в ваших ключах, когда один раздел получает намного больше ключей, чем другие разделы.

Предполагая, что выше это правильно, и вы сделали профилирование кода для своего кода «смешивать и сопоставлять», чтобы сделать его достаточно эффективным, и тогда у вас останутся ручные оптимизации. Например, если вы знаете, что ключи в разделе X встречаются гораздо чаще, вы можете поместить все эти ключи в один раздел, а затем распределить оставшиеся ключи среди других разделов.

Другой подход заключается в добавлении оператор «дозатор», который помещает до N ключей для одного и того же раздела в группу (обычно для этого также требуется время ожидания до flu sh, чтобы данные не зависали). Если вы можете пакетировать достаточно ключей, то может быть не так уж плохо загружать данные БД по требованию для раздела, связанного с каждой партией ключей.

...