Автоматическая эволюция схемы ... Заметка

Автоматическая эволюция схемы в фреймворке приема данных нового поколения Pinterest

Pinterest разработал надежную автоматизированную систему эволюции схем для своей платформы приема данных CDC на базе Kafka. Изменения схем являются критически важным межсистемным контрактом, и неконтролируемая эволюция может привести к сбоям конвейера и несогласованности данных. Их решение направлено на обеспечение безопасной, повторяемой и масштабируемой эволюции схем, рассматривая ее как многоэтапный процесс сходимости. Архитектура включает источники CDC, Kafka, Flink для преобразования и Spark для upsert-операций в таблицы Iceberg.Ключевым компонентом является надежная модель онбординга, которая использует файлы определения схем со стабильными числовыми идентификаторами в качестве источника истины. Обновления автоматически распространяются через Kafka, Flink, Spark и Iceberg посредством развертывания на основе PR с версионированием и аудитом. Система поддерживает в основном аддитивные изменения схем для обеспечения обратной совместимости и минимизации сложности. Изменения типов строго ограничены теми, которые сохраняют семантическое значение, например, расширение числовой точности.Эволюция схем управляется трехфазной моделью сходимости для поддержания доступности конвейера. Первая фаза обновляет схемы Iceberg, вторая фаза развертывает обновленный код Flink и Spark, а третья фаза обеспечивает сходимость данных. Этот поэтапный подход отделяет распространение схем от корректности данных, допуская временные расхождения в рамках определенного SLA. Pinterest использует модель, основанную на SLA, для эволюции схем, отдавая приоритет предсказуемости и операционной безопасности.Стратегии развертывания тщательно управляются, особенно для Flink, чтобы предотвратить потерю данных. Неподдерживаемые или неоднозначные случаи, такие как значения по умолчанию или изменения первичных ключей, имеют специальные пути ручного восстановления. Неоднозначные различия CREATE TABLE разрешаются путем сравнения с фактической историей DDL базы данных, а не путем вывода намерений из текстовых изменений. Параллельные изменения схем обрабатываются последовательно для предотвращения состояний гонки, обеспечивая сериализованную сходимость. Преобразования столбцов управляются путем аннотирования схем необходимыми преобразованиями, которые затем встраиваются в конвейер приема данных. Механизмы обработки ошибок и восстановления, особенно для сбоев Spark, гарантируют, что обработка возобновляется с последнего успешного водяного знака.
CdXz5zHNQW_srAU1TSiiq.png