Descripción general de las transmisiones de cambios

Un flujo de cambios observa y transmite los cambios en los datos de una base de datos de Spanner (inserciones, actualizaciones y eliminaciones) casi en tiempo real.

En esta página, se ofrece una descripción general de alto nivel de los flujos de cambios de Spanner: qué hacen y cómo funcionan. Para obtener información sobre cómo crear y administrar flujos de cambios en la base de datos y conectarlos a otros servicios, sigue los vínculos que se indican en Próximos pasos.

Propósito de los flujos de cambios

Los flujos de cambios proporcionan una forma flexible y escalable de transmitir los cambios de datos a otros servicios. Los casos de uso comunes incluyen los siguientes:

  • Replicar los cambios de datos de Spanner en un almacén de datos, como BigQuery, para realizar análisis

  • Activar la lógica de la aplicación según los cambios de datos enviados a una cola de mensajes, como Pub/Sub

  • Almacenar cambios de datos en Cloud Storage con fines de archivo o cumplimiento

Configuración del flujo de cambios

Spanner trata los flujos de cambios como objetos de esquema, al igual que las tablas y los índices. Por lo tanto, creas, modificas y borras flujos de cambios mediante instrucciones de DDL y puedes ver los flujos de cambios de una base de datos del mismo modo que otros objetos de esquema administrados por DDL.

Puedes configurar un flujo de cambios para observar los cambios en los datos en una base de datos completa o limitar su alcance a tablas y columnas específicas. Una base de datos puede tener varias flujos de cambios, y una tabla o columna en particular puede tener varias transmisiones que la miren dentro de los límites.

También puedes configurar un flujo de cambios para especificar un período de retención de datos o un tipo de captura de valor.

Cuando se emite el DDL que crea un flujo de cambios, se inicia una operación de larga duración. Cuando se completa, el flujo de cambios nuevo comienza a observar de inmediato las tablas y columnas que se le asignaron.

Observar tablas y columnas de manera implícita

Las transmisiones de cambios que supervisan una tabla completa ven de manera implícita todas las columnas de esa tabla, incluso cuando se actualiza esa definición de tabla. Por ejemplo, cuando agregas columnas nuevas a esa tabla, el flujo de cambios comienza a observar esas columnas nuevas automáticamente, sin necesidad de ninguna modificación en su configuración. Del mismo modo, el flujo de cambios deja de observar automáticamente las columnas que se descartan en esa tabla.

Los flujos de cambios de toda la base de datos funcionan de la misma manera. Observan de manera implícita todas las columnas de cada tabla, miran de forma automática las tablas o columnas agregadas después de la creación del flujo de cambios y dejan de observar las tablas o columnas que se descartan.

Supervisa tablas y columnas de forma explícita

Si configuras un flujo de cambios para que observe solo columnas específicas en una tabla y, luego, agregas columnas a esa tabla, el flujo de cambios no comenzará a observar esas columnas, a menos que vuelvas a configurar ese flujo de cambios para hacerlo.

El esquema de la base de datos trata los flujos de cambios como objetos dependientes de cualquier columna o tabla que observe de forma explícita. Antes de descartar cualquier columna o tabla de este tipo, debes quitarla de forma manual de la configuración de cualquier flujo de cambios que la observe de forma explícita.

Tipos de cambios en los datos que controlan los flujos

Los cambios en los datos que supervisa un flujo de cambios incluyen todas las inserciones, actualizaciones y eliminaciones realizadas en las tablas y columnas que supervisa. Estos cambios pueden provenir de las siguientes fuentes:

Los flujos de cambios solo pueden observar los cambios en los datos de las columnas y tablas creadas por el usuario. No supervisan índices, vistas, otros flujos de cambios ni tablas del sistema, como el esquema de información o las tablas de estadísticas. Los flujos de cambios no observan las columnas generadas, a menos que la columna sea parte de la clave primaria. Siempre se realiza un seguimiento de las columnas de clave primaria.

Además, los flujos de cambios no supervisan los cambios de esquema ni los cambios de datos que resulten directamente de los cambios de esquema. Por ejemplo, una transmisión de cambios que observa una base de datos completa no consideraría descartar una tabla como un cambio en los datos, aunque esta acción quite todos los datos de esa tabla de la base de datos.

Cómo Spanner escribe y almacena flujos de cambios

Cada vez que Spanner detecta un cambio en los datos de una columna que observa un flujo de cambios, escribe un registro de cambio de datos en su almacenamiento interno. Lo hace de forma síncrona con ese cambio de datos, dentro de la misma transacción. Spanner ubica ambas escrituras para que el mismo servidor las procese, lo que minimiza el procesamiento de escritura.

Contenido de un registro de cambios de datos

Cada registro de cambios en los datos que escribe un flujo de cambios incluye la siguiente información sobre el cambio en los datos:

  • El nombre de la tabla afectada

  • Los nombres, valores y tipos de datos de las claves primarias que identifican la fila modificada

  • Los nombres y tipos de datos de las columnas de la fila modificada que se capturaron según la definición del flujo de cambios.

  • Los valores anteriores de las columnas de la fila. La disponibilidad de los valores anteriores y el contenido al que hacen seguimiento, que pueden ser solo las columnas modificadas o toda la fila a la que se le hace seguimiento, depende del tipo de captura de valor configurado por el usuario.

  • Los valores nuevos de las columnas de la fila. La disponibilidad de los valores nuevos y el contenido al que hacen un seguimiento depende del tipo de captura de valor configurado por el usuario.

  • El tipo de modificación (inserción, actualización o eliminación)

  • La marca de tiempo de confirmación

  • El ID de transacción

  • El número de secuencia de registro

  • El tipo de captura de valor del registro de cambios de datos.

Para ver con más detalle la estructura de los registros de cambios en los datos, consulta Registros de cambios de datos.

Retención de datos

Una transmisión de cambios conserva sus registros de cambios de datos durante un período de entre uno y siete días. Puedes usar el DDL para especificar un límite de retención de datos distinto del predeterminado de un día cuando creas un flujo de cambios por primera vez, o ajustarlo en cualquier momento futuro. Ten en cuenta que reducir el límite de retención de datos de una transmisión de cambios hará que todos los datos de cambios históricos sean anteriores al nuevo límite de forma inmediata y permanente para los lectores de esa transmisión de cambios.

Este período de retención de datos presenta una compensación; un período de retención más largo conlleva mayores demandas de almacenamiento en la base de datos de la transmisión.

Tipo de captura de valor

La opción de configuración del tipo de captura de valor de un flujo de cambios controla la forma en que almacena los valores de una fila modificada. Puedes usar DDL con el fin de especificar uno de los siguientes tipos de captura de valores para un flujo de cambios:

  • OLD_AND_NEW_VALUES: Captura los valores antiguos y nuevos de las columnas modificadas de una fila.

  • NEW_VALUES: Captura solo los valores nuevos de las columnas sin clave, pero no los valores anteriores.

  • NEW_ROW: Captura todos los valores nuevos de las columnas con seguimiento, tanto modificadas como sin modificar, cada vez que cambia alguna de esas columnas. No se capturan valores anteriores.

Lee flujos de cambios

Spanner ofrece varias formas de leer los datos de un flujo de cambios:

  • A través de Dataflow, mediante el conector SpannerIO de Apache Beam Esta es nuestra solución recomendada para la mayoría de las aplicaciones de flujos de cambios. Google también proporciona plantillas de Dataflow para casos de uso comunes.

  • Directamente, a través de la API de Spanner Esto cambia la abstracción y las capacidades de las canalizaciones de Dataflow por una máxima velocidad y flexibilidad.

  • Mediante el uso del conector Kafka basado en Debezium para las flujos de cambios de Spanner Las transmisiones de este conector cambian los registros directamente a los temas de Kafka.

Puedes proporcionar aislamiento parcial para las lecturas de flujos de cambios mediante lecturas dirigidas. Las lecturas dirigidas pueden ayudar a minimizar el impacto en las cargas de trabajo transaccionales en tu base de datos. Puedes usar la API de Spanner para enrutar las lecturas de flujos de cambios a una región o un tipo de réplica específico dentro de una configuración de instancias multirregional o una configuración regional personalizada con regiones de solo lectura opcionales. Para obtener más información, consulta lecturas dirigidas.

Usar Dataflow

Usa el conector SpannerIO de Apache Beam para compilar canalizaciones de Dataflow que lean desde flujos de cambios. Después de configurar el conector con detalles sobre una transmisión de cambios en particular, genera de forma automática registros de cambios de datos nuevos en un solo conjunto de datos PCollection no delimitado, listo para el procesamiento posterior mediante transformaciones posteriores en la canalización de Dataflow.

Dataflow usa funciones analíticas para dividir las colecciones no delimitadas en componentes lógicos o ventanas. Como resultado, Dataflow proporciona una transmisión casi en tiempo real, con aproximadamente seis segundos de latencia cuando lee desde flujos de cambios.

Google proporciona plantillas que te permiten compilar canalizaciones de Dataflow con rapidez para casos de uso comunes de flujos de cambios, como enviar todos los cambios de datos de una transmisión a un conjunto de datos de BigQuery o copiarlos en un bucket de Cloud Storage.

Para obtener una descripción general más detallada de cómo funcionan en conjunto las transmisiones de cambios y Dataflow, consulta Crea conexiones de flujos de cambios con Dataflow.

Usar la API

Como alternativa al uso de Dataflow para compilar canalizaciones de flujos de cambios, puedes escribir código que use la API de Spanner para leer los registros de una transmisión de cambios directamente. Esto te permite leer los registros de cambios de datos de la misma manera que lo hace el conector Spanner, intercambiando la abstracción que proporciona a cambio de las latencias más bajas posibles cuando se leen los datos de flujos de cambios.

Para obtener más información, consulta Flujos de cambios de consultas. Para obtener un análisis más detallado sobre cómo consultar flujos de cambios y cómo interpretar los registros que se muestran, visita Particiones, registros y consultas de transmisiones de cambios.

Usa el conector de Kafka

El conector de Kafka envía directamente los registros de transmisión de cambios a un tema de Kafka. Abstrae los detalles de las consultas de flujos de cambios mediante la API de Spanner.

Para obtener más información sobre cómo funcionan en conjunto las transmisiones de cambios y el conector de Kafka, consulta Crea conexiones de flujos de cambios con el conector de Kafka.

Límites

Existen varios límites para los flujos de cambios, incluidos la cantidad máxima de flujos de cambios que puede tener una base de datos y la cantidad máxima de flujos que puede observar una sola columna. Para ver una lista completa, consulta Cómo cambiar los límites de las transmisiones.

Permisos

Las transmisiones de cambios utilizan lo siguiente:

  • Para crear, actualizar o descartar flujos de cambios se requiere spanner.databases.updateDdl.

  • La lectura de los datos de un flujo de cambios requiere spanner.databases.select.

Si usas el conector de SpannerIO, el propietario del trabajo de Dataflow que lee datos del flujo de cambios requiere permisos de IAM adicionales, ya sea en la base de datos de tu aplicación o en una base de datos de metadatos separada. Consulta Crea una base de datos de metadatos.

¿Qué sigue?