Финализация разделов в фреймво... Заметка

Финализация разделов в фреймворке приема данных нового поколения Pinterest

В этой статье представлено решение для определения того, когда данные достаточно полны для последующего использования в новой системе приема данных Pinterest. Система, построенная на таких технологиях, как Kafka, Flink и Iceberg, обрабатывает данные непрерывно, что создает проблему для пакетных заданий, которые ранее полагались на однократные пакетные задания для финализации. Данные, разделенные по времени и сгруппированные по временным столбцам, позволяют потребителям считывать определенные срезы без сканирования полных таблиц. В пакетных системах раздел считался окончательным после завершения записи продюсером; однако потоковая система непрерывно записывает данные в разделы, что затрудняет традиционную финализацию. Для решения этой проблемы Pinterest разработала механизм финализации разделов на основе времени событий в приемнике Flink-to-Iceberg. Эта система извлекает время событий из записей, собирает статистику, такую как минимальное и максимальное время событий между контрольными точками Flink, и сохраняет ее в сводках снимков Iceberg. Затем алгоритм использует эту статистику для генерации водяного знака, указывающего точку, до которой раздел считается полным, гарантируя, что он всегда увеличивается. Этот водяной знак сохраняется как свойство таблицы Iceberg, позволяя последующим заданиям запрашивать его для запуска обработки. Механизм передается в базовые таблицы заданием upsert, гарантируя, что сигнал передается вместе с данными. Реализация использует расширяемые возможности приемника Iceberg-Flink: аккумуляторы собирают статистику записей в подзадачах записи, а процессоры фиксации выполняют пользовательскую логику до и после фиксации Iceberg. Такая конструкция обеспечивает нулевые накладные расходы, когда расширения не настроены, и гарантирует, что финализация разделов эффективно интегрирована в конвейер потоковой передачи данных.
CdXz5zHNQW_u1wkB0MUto.png