[{"data":1,"prerenderedAt":29},["ShallowReactive",2],{"article-data-curso-gcp-pub-sub-04":3},{"content":4,"date":5,"image":6,"sideArticles":7},"\u003C!DOCTYPE html>\r\n\u003Chtml lang=\"es\">\r\n\r\n\u003Chead>\r\n    \u003Cmeta charset=\"UTF-8\">\r\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    \u003Cmeta name=\"description\"\r\n        content=\"Aprende a gestionar errores en Google Cloud Pub/Sub mediante Dead Letter Queues (DLQ). Implementa políticas de reintento y flujos de cuarentena con Terraform para crear arquitecturas resilientes.\">\r\n    \u003Cmeta name=\"keywords\"\r\n        content=\"Pub/Sub, Dead Letter Queue, DLQ, Google Cloud, GCP, Terraform, Resiliencia, Gestión de Errores, Data Engineering\">\r\n    \u003Cmeta name=\"author\" content=\"Eduardo Martínez Agrelo\">\r\n    \u003Ctitle>Pub/Sub: Dead Letter Queue (DLQ) | Curso Pub/Sub GCP\u003C/title>\r\n    \u003Cstyle>\r\n        body {\r\n            font-family: sans-serif;\r\n            line-height: 1.6;\r\n        }\r\n\r\n        h1,\r\n        h2,\r\n        h3 {\r\n            color: #333;\r\n        }\r\n\r\n        ul {\r\n            list-style-type: disc;\r\n            margin-left: 20px;\r\n        }\r\n\r\n        code {\r\n            background-color: #f4f4f4;\r\n            padding: 2px 5px;\r\n            border-radius: 3px;\r\n            font-family: monospace;\r\n        }\r\n    \u003C/style>\r\n\u003C/head>\r\n\r\n\u003Cbody>\r\n    \u003Ch1>Pub/Sub: Dead Letter Queue (DLQ) (Resiliencia Ante Errores)\u003C/h1>\r\n\r\n    \u003Cp>\u003Cstrong>Autor:\u003C/strong> \u003Ca href=\"https://www.youtube.com/@EduardoMartinezAgrelo\" target=\"_blank\">Eduardo Martínez\r\n            Agrelo\u003C/a>\u003C/p>\r\n\r\n    \u003Cp>En un entorno de producción, las cosas fallan: una base de datos puede estar fuera de servicio temporalmente o un\r\n        mensaje puede llegar corrupto. En este laboratorio, aprenderemos a implementar una \u003Cstrong>Dead Letter Queue\r\n            (DLQ)\u003C/strong>, una técnica esencial para evitar que un error puntual bloquee todo nuestro pipeline de\r\n        datos.\u003C/p>\r\n\r\n    \u003Ch2>¿Qué es una Dead Letter Queue?\u003C/h2>\r\n\r\n    \u003Cp>Una DLQ es un Topic especial que actúa como una \"zona de cuarentena\". Cuando un mensaje no puede ser procesado\r\n        tras varios intentos, Pub/Sub lo retira de la circulación principal y lo envía a esta cola de mensajes muertos:\r\n    \u003C/p>\r\n    \u003Cul>\r\n        \u003Cli>\u003Cstrong>Evitar el Veneno de Mensaje (Poison Message):\u003C/strong> Impide que un mensaje corrupto se reintente\r\n            infinitamente, consumiendo recursos sin éxito.\u003C/li>\r\n        \u003Cli>\u003Cstrong>Auditabilidad:\u003C/strong> Permite a los ingenieros inspeccionar los mensajes fallidos manualmente para\r\n            corregir errores en el código o en los datos.\u003C/li>\r\n    \u003C/ul>\r\n\r\n    \u003Ch2>Políticas de Reintento y Max Delivery Attempts\u003C/h2>\r\n\r\n    \u003Cp>La clave de la resiliencia es el control sobre los reintentos. Mediante Terraform, definiremos una política que\r\n        limita cuántas veces Pub/Sub intentará entregar el mensaje antes de rendirse:\u003C/p>\r\n    \u003Cul>\r\n        \u003Cli>\u003Cstrong>max_delivery_attempts:\u003C/strong> El número de fallos permitidos (normalmente entre 5 y 100) antes de\r\n            mover el mensaje a la DLQ.\u003C/li>\r\n        \u003Cli>\u003Cstrong>Ack Deadline:\u003C/strong> El tiempo que Pub/Sub espera antes de considerar que un mensaje ha fallado si\r\n            no recibe confirmación.\u003C/li>\r\n    \u003C/ul>\r\n\r\n    \u003Ch2>Configuración de Permisos IAM\u003C/h2>\r\n\r\n    \u003Cp>Mover un mensaje de una suscripción a otro Topic requiere permisos. Es un error común olvidar que la Service\r\n        Account interna de Pub/Sub necesita permisos de \u003Ccode>publisher\u003C/code> sobre el Topic de la DLQ y de\r\n        \u003Ccode>subscriber\u003C/code> sobre la suscripción original. Automatizaremos estos permisos en nuestro archivo de\r\n        Terraform para garantizar un flujo sin fricciones.\u003C/p>\r\n\r\n    \u003Ch2>Implementación práctica\u003C/h2>\r\n\r\n    \u003Cp>Simularemos un fallo real en Python. Crearemos un consumidor que recibe mensajes pero nunca envía el\r\n        \u003Ccode>ack()\u003C/code>. Veremos en tiempo real cómo Pub/Sub reintenta la entrega hasta alcanzar nuestro límite\r\n        configurado, momento en el cual el mensaje \"desaparecerá\" de la cola activa para aparecer en nuestro Topic de\r\n        auditoría (DLQ).\u003C/p>\r\n\r\n    \u003Ch2>Conclusión: Tu arquitectura es ahora a prueba de balas\u003C/h2>\r\n    \u003Cp>Has transformado un sistema frágil en una arquitectura resiliente capaz de autogestionar sus errores. Ahora que\r\n        dominas el flujo de mensajes individuales y sus fallos, es hora de cambiar de escala. En el siguiente\r\n        laboratorio, aprenderemos a procesar mensajes de forma masiva mediante Jobs de tipo Batch.\u003C/p>\r\n\u003C/body>\r\n\r\n\u003C/html>","April 15, 2026","https://storage.googleapis.com/mp-blog/images/curso-gcp-pub-sub-04.jpg",[8,14,19,24],{"id":9,"title":10,"description":11,"image":12,"date":13},"curso-gcp-apache-spark-01","Spark: Infraestructura como Código con Terraform | Curso Spark, Scala y Terraform","Aprende a desplegar clústeres de Big Data profesionalmente. Domina Terraform para crear infraestructura como código (IaC) en Google Cloud y automatiza tu entorno de Dataproc para Spark.","https://storage.googleapis.com/mp-blog/images/curso-gcp-apache-spark-01.jpg","March 12, 2026",{"id":15,"title":16,"description":17,"image":18,"date":13},"curso-gcp-apache-spark-02","Spark: Ingesta (Raw to Bronze) y Formatos Columnares | Curso Spark, Scala y Terraform","Domina la ingesta de datos con Spark. Aprende a convertir JSONs pesados en formato Parquet, optimiza tu almacenamiento en un 85% y domina los esquemas estrictos con Scala.","https://storage.googleapis.com/mp-blog/images/curso-gcp-apache-spark-02.jpg",{"id":20,"title":21,"description":22,"image":23,"date":13},"curso-gcp-apache-spark-03","Spark: Limpieza y Calidad (Bronze to Silver) | Curso Spark, Scala y Terraform","Domina la limpieza de datos en Spark. Aprende a usar Scala para implementar la capa Silver (Plata) de tu arquitectura Medallón, utilizando Case Classes para mayor seguridad.","https://storage.googleapis.com/mp-blog/images/curso-gcp-apache-spark-03.jpg",{"id":25,"title":26,"description":27,"image":28,"date":13},"curso-gcp-apache-spark-04","Spark: Analítica Avanzada (Silver to Gold) | Curso Spark, Scala y Terraform","Domina el Análisis Avanzado con Spark. Aprende a calcular métricas de negocio con Window Functions y a extraer el Top 3 de canciones por país y día para tu capa Gold.","https://storage.googleapis.com/mp-blog/images/curso-gcp-apache-spark-04.jpg",1776363698529]