Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.
Как поступать при перекосе (skew) по user_id при JOIN таблиц транзакций и пользователей? Как выбрать оптимальный ключ распределения?
Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала найдите горячие ключи и размер сторон JOIN. Помогают broadcast маленького справочника, обработка горячих ключей отдельно, salting и поддерживаемая адаптивная оптимизация.
Простое увеличение числа партиций не разделит один чрезвычайно частый user_id. При salting транзакциям назначают дополнительный бакет, а соответствующую строку справочника размножают по бакетам; исходный результат соединения должен сохраниться.
Ключ распределения выбирают с высокой кардинальностью, ровной частотой и совместимостью с частыми join. Не меняйте смысл равенства на произвольный transaction_id только ради баланса. В Spark проверяйте применимость AQE skew join и реальный план.
Источник: Документация Apache Kafka.