Найти в Дзене
CODERIKK

🔹 Обработка ошибок в ETL: retry и dead-letter (не страшно

) 🔹 Как организовать retry и dead-letter для ETL, чтобы не терять данные? 🔸 Повторные попытки нужны, потому что большинство ошибок — временные (сеть, таймаут, блокировка). Без retry вы теряете записи или получаете неконсистентные состояния; exceptions нужно разделять на retryable и fatal. 🔸 Используйте retry с лимитом и backoff; при исчерпании попыток — помещайте запись в dead-letter queue (DLQ). Обрабатывайте exceptions отдельно: non-retryable сразу в DLQ. Введите идемпотентность и транзакции для consistency. attempts = 0 while attempts < 5: try: load(record) # загрузка в БД break except TransientError: attempts += 1 sleep(2**attempts) except FatalError: send_to_dlq(record, reason="fatal") break else: send_to_dlq(record, reason="retry_exhausted") 🔸 Практика: логируйте попытки, храните last_error и retry_count; реобрабатывайте DLQ вручную или скриптом, проверяя идемпотентность и восстанавливая consistency. 📚 Ключ: retry для transient, DLQ для poison, exceptions — фильтруй п

🔹 Обработка ошибок в ETL: retry и dead-letter (не страшно)

🔹 Как организовать retry и dead-letter для ETL, чтобы не терять данные?

🔸 Повторные попытки нужны, потому что большинство ошибок — временные (сеть, таймаут, блокировка). Без retry вы теряете записи или получаете неконсистентные состояния; exceptions нужно разделять на retryable и fatal.

🔸 Используйте retry с лимитом и backoff; при исчерпании попыток — помещайте запись в dead-letter queue (DLQ). Обрабатывайте exceptions отдельно: non-retryable сразу в DLQ. Введите идемпотентность и транзакции для consistency.

attempts = 0

while attempts < 5:

try:

load(record) # загрузка в БД

break

except TransientError:

attempts += 1

sleep(2**attempts)

except FatalError:

send_to_dlq(record, reason="fatal")

break

else:

send_to_dlq(record, reason="retry_exhausted")

🔸 Практика: логируйте попытки, храните last_error и retry_count; реобрабатывайте DLQ вручную или скриптом, проверяя идемпотентность и восстанавливая consistency.

📚 Ключ: retry для transient, DLQ для poison, exceptions — фильтруй по типу, consistency — через идемпотентность и транзакции.

#CODERIKK #Etl #Middle

➡️ Мы в Telegram - Сетке - Дзен

Буду рад вашей реакции здесь⬇️