MySQL CDC a BigQuery: lo que las sincronizaciones periódicas pasan por alto y cómo lo evita binlog
MySQL CDC to BigQuery: what periodic syncs miss, and how binlog avoids it

La mayoría de los pipelines de MySQL a un almacén de datos usan sincronizaciones periódicas basadas en SELECT, que no detectan eliminaciones ni estados intermedios de las filas. Este artículo explica cómo la captura de datos de cambios (CDC) basada en binlog captura cada INSERT, UPDATE y DELETE en orden, y detalla los requisitos de configuración de MySQL, los privilegios necesarios y cómo aterrizar los datos de forma fiable en BigQuery.
Un pipeline que aterriza datos incompletos a tiempo es peor que uno que ocasionalmente va unos minutos atrasado pero nunca se equivoca.
- karakanb
Aviso: soy cofundador de Bruin (https://github.com/bruin-data/bruin), somos competidores de Erathos.
Parece un artículo de marketing bastante directo. Me sorprendió gratamente conocer Erathos, ¡buen producto!
Personalmente no soy un gran fanático de CDC en producción. El movimiento de datos en streaming generalmente es propenso a confusión y alimenta malos patrones de datos como eliminaciones duras sin registros de auditoría, sin marcas de tiempo en actualizaciones o eliminaciones, etc., que suelen ser la razón por la que no se pueden utilizar cargas por lotes. Requieren un entendimiento operativo decente de la base de datos subyacente y tienen algunos inconvenientes como los que mencionaron los de Erathos en el artículo. Ofrecemos CDC tanto en nuestra plataforma en la nube como en nuestras herramientas de código abierto, pero si pudiera, siempre elegiría una carga incremental por lotes con un valor de cursor sobre una conexión CDC.
Entiendo que a veces es necesario debido a la complejidad organizativa o razones de bases de datos heredadas, la mía es solo una preferencia personal.
Si alguien busca una herramienta de CDC de código abierto que funcione como un CLI independiente en Go, echen un vistazo a ingestr: https://github.com/bruin-data/ingestr
- gpaulbagetti
Escribí esto después de ver el mismo modo de fallo demasiadas veces: un trabajo de sincronización de MySQL que se ve bien en el panel pero ha estado eliminando silenciosamente eliminaciones y actualizaciones intermedias durante meses, porque está comparando instantáneas en lugar de leer el binlog. Intenté explicar exactamente qué tiene que ser cierto en el lado de MySQL (imagen de fila, binlog_row_value_options, server-id, retención) para que CDC sea realmente completo, no solo "eventualmente consistente". Estoy feliz de profundizar en cualquiera de estos puntos en los comentarios.