E. Airflow retry после частично выполненной выгрузки¶
Тип материала: учебный архитектурный сценарий. Не описывает систему конкретной компании. Все операции, 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¶
- Удержать serving на последнем validated manifest.
- Проверить неизменность source manifest и fixed interval.
- Перезапустить missing/failed partitions с тем же identity; corrupt outputs заменить.
- Отклонить mixed generation и incomplete expected set.
- После full reconciliation опубликовать одну новую ready generation; сохранить audit связывания runs.
- 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.
Источники и версии¶
- Airflow best practices — 3.1.0.