Как поступать при перекосе (skew) по user_id при JOIN таблиц транзакций и пользователей? Как выбрать оптимальный ключ распределения?

Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.

Короткий ответ

Что ответить на собеседовании

Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.

Подробный разбор

Ответ с пояснениями

Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.

Простое увеличение числа партиций не разделит один чрезвычайно частый user_id. При salting транзакциям назначают дополнительный бакет, а соответствующую строку справочника размножают по бакетам; исходный результат соединения должен сохраниться.

Ключ распределения выбирают с высокой кардинальностью, ровной частотой и совместимостью с частыми join. Не меняйте смысл равенства на произвольный transaction_id только ради баланса. В Spark проверяйте применимость AQE skew join и реальный план.

Источник: Документация Apache Kafka.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее