← ALB News · curated headline

Миграция продакшен-контура OpenMetadata с Airflow 2 на Airflow 3: что сломалось и как мы это чинили

Habr · RU · Programming · 11/3/2026, 3:50:47 AM

Наш ingestion-контур — это сервис на базе Apache Airflow, который крутит пайплайны загрузки метаданных в OpenMetadata. Поверх стандартного Airflow у нас живёт плагин openmetadata-managed-apis (через него UI OpenMetadata деплоит и дёргает DAG'и), свои утилиты логирования и свой Docker-образ со строго зафиксированными зависимостями. Когда мы решили переезжать с Airflow 2 на Airflow 3, мы прочитали официальный migration guide и думали, что основная работа — переименовать параметры и импорты. Спойлер: переименование заняло один вечер, а вся миграция — четыре месяца, несколько десятков коммитов и одну полную смену архитектурного решения на ходу. Ниже — честный разбор по следам нашей git-истории. Сначала хронология: это была не миграция, а жизнь на двух мажорах Если восстановить события по коммитам, картина выглядит так. Новый репозиторий под тройку мы завели в начале марта — и с первого же коммита положили в него constraints-файлы для обеих линеек: и для Airflow 3.1.x, и для старого доброго 2.10.5. Страховка с нулевого дня, и, как показала практика, не лишняя. Дальше две недели шла интенсивная работа в ветке airflow-3: даги, плагин, логирование, типы. Но в конце марта — после того как «миграция уже почти закончена» — в develop влилась параллельная ветка airflow-2.11 с фиксами для старой линии. Продакшен всё ещё жил на двойке, и его надо было обслуживать. Последствия этого мерджа обнаружились в начале апреля: рефакторинг дагов под новый API пришлось делать заново, потому что develop «отъехал» к дагам в старом стиле. Та же самая правка, что была сделана в середине марта, во второй раз прошла по тем же файлам в начале апреля. Отдельно весной мы продолжали латать сборку двойки: откаты транзитивных зависимостей и свежие constraints для 2.11.x датированы апрелем — когда, казалось бы, мы уже «на тройке». Читать далее

Continue to Habr →

You are being forwarded in 6s — stay on this page