Перейти к содержанию

E. Airflow retry после частично выполненной выгрузки

Раздел 04 · Failure matrix

Тип материала: учебный архитектурный сценарий. Не описывает систему конкретной компании. Все операции, IDs и числа ниже — HYPOTHETICAL.

Проверка источников: 2026-11-02. Интеграционный fault test этого сценария — NOT_RUN; documented behavior и предлагаемый recovery не считаются выполненным испытанием.

Normal flow

Airflow 3.1.0 orchestrates bounded extraction по fixed data interval и immutable source manifest. Mapped tasks записывают deterministic tenant partitions в staging generation, reconcile task проверяет полный набор и только затем публикует manifest. Airflow task success не является commit всего отчёта.

Иллюстративная схема нормального пути:

flowchart LR
 S[Fixed interval and source hash] --> M[Mapped staging partitions]
 M --> R[Reconcile expected set]
 R --> P[Publish validated manifest]

Failure timeline

sequenceDiagram
 participant A as Airflow task
 participant S as Staging files
 participant R as Reconcile task
 A->>S: Write tenant partition p1
 Note over A: Crash before p2 or task ACK
 A->>S: Retry same interval and generation
 A->>S: Replace deterministic p1 and write p2
 R->>S: Check complete set and hashes
 R->>S: Publish validated manifest

Состояние систем после отказа

Участник Durable состояние Неопределённость / проверка
Scheduler Task может быть failed/retrying Значение не определяет presence файлов
Staging Часть partitions видна Не разрешать readers читать staging напрямую
Source Должен оставаться тем же cut Current time или mutable source разрушает repeatability

Retry и replay

Retry с append создаёт дубли. Retry с новым now interval пропускает/добавляет другие данные. Повтор той же generation и immutable cut заменяет deterministic outputs; новая backfill generation изолирована. Atomic rename локального файла не доказывает S3 multi-object atomicity.

Обнаружение проблемы

Проверить expected partition set, generation, source hash, checksums/counts и отсутствие premature ready marker. Green task без reconcile может означать недополноту отчёта. Наблюдать partial generation age и blocked publications.

Recovery protocol

  1. Удержать serving на последнем validated manifest.
  2. Проверить неизменность source manifest и fixed interval.
  3. Перезапустить missing/failed partitions с тем же identity; corrupt outputs заменить.
  4. Отклонить mixed generation и incomplete expected set.
  5. После full reconciliation опубликовать одну новую ready generation; сохранить audit связывания runs.
  6. Retention staging cleanup выполнять после cutoff читателей и evidence, не во время восстановления.

Гарантии и trade-offs

Локальные existing helpers проверяют deterministic replacement и manifest validation; они не дают cross-database consistent cut и не являются S3 publish protocol. Airflow scheduler/mapping/backfill execution и object-store cutover NOT_RUN.

Практическая проверка

Airflow retry/backfill lab повторно использует report_tasks.py. В fault test сначала должна реально существовать только одна partition, а затем reconciliation должна отказать до retry.

Источники и версии