Descripción general de los flujos de cambios

Bigtable proporciona la captura de datos modificados (CDC) con su función de flujos de cambios. Un flujo de cambios captura los cambios de datos en una tabla de Bigtable a medida que ocurren, lo que te permite transmitirlos para procesarlos o analizarlos.

En este documento, se proporciona una descripción general de los flujos de cambios de Bigtable. Antes de leer este documento, debes estar familiarizado con la descripción general de Bigtable.

Los flujos de cambios son valiosos para los casos de uso de los CDC, incluidos los siguientes:

  • Activa la lógica de la aplicación descendente cuando se producen cambios específicos
  • Integración en una canalización de análisis de datos
  • Satisface los requisitos de auditoría y archivo

Qué es un flujo de cambios

Un flujo de cambios hace un seguimiento de los cambios a nivel de tabla que realiza un usuario o una aplicación, por lo general, con una de las bibliotecas cliente de Cloud Bigtable. También se registran los cambios en la recolección de elementos no utilizados.

Todos los cambios aplicados a una tabla con flujos de cambios habilitados se almacenan como registros de cambios de datos. Los registros de cambios en los datos incluyen los cambios de datos aplicados por las siguientes entidades:

  • Las operaciones de escritura, eliminación y actualización que se envían con los métodos MutateRow, MutateRows, CheckAndMutateRow y ReadModifyWriteRow de la API de Cloud Bigtable
  • Eliminaciones que se realicen debido a la recolección de elementos no utilizados
  • Filas borradas con el método DropRowRange de la API de Admin

Para obtener detalles sobre los tipos de cambios que puedes enviar a una tabla de Bigtable, consulta Lecturas, Escrituras, Borrados y Descripción general de la recolección de elementos no utilizados.

Los flujos de cambios no realizan un seguimiento de los cambios de esquema, como agregar o modificar una familia de columnas, ni la topología de replicación, como agregar o quitar un clúster.

Los registros de cambio de datos para cada clave de fila y cada clúster están en orden de marca de tiempo de confirmación. Sin embargo, no hay garantía de orden sobre los registros de cambios de datos para una clave de fila o un clúster diferentes.

Habilitas los flujos de cambios en una tabla y especificas un período de retención de 1 a 7 días.

¿Qué es un registro de cambios en los datos?

Cada registro de cambios en los datos contiene todos los cambios para una fila que se aplicaron de forma atómica como parte de una sola llamada RPC.

Si se reemplaza un valor, el valor recién escrito se registra en el registro de cambios de datos. El registro de cambios en los datos no contiene el valor anterior.

Un registro de cambios de datos recibe su marca de tiempo, denominada marca de tiempo de confirmación, al mismo tiempo que el cambio se aplica al primer clúster que lo recibe. Por ejemplo, considera una instancia con dos clústeres. Si envías una solicitud de escritura a la tabla 1 en el clúster A, se asigna la marca de tiempo de confirmación del registro de cambios de datos cuando el clúster A recibe la escritura, y el registro de cambio de datos en el clúster B para esta escritura tiene la misma marca de tiempo de confirmación.

Cada registro de cambios en los datos contiene lo siguiente:

  • Entradas: Los cambios realizados en la fila, incluidos uno o más de los siguientes elementos:
    • Escritura
      • Familia de columnas
      • Calificador de columna
      • Marca de tiempo
      • Valor
    • Eliminación de celdas
      • Familia de columnas
      • Calificador de columna
      • Rango de marca de tiempo
    • Eliminación de una familia de columnas
      • Familia de columnas
      • Eliminación de una fila: La eliminación de una fila se convierte en una lista de eliminaciones de las familias de columnas para cada familia de columnas en la que la fila tiene datos.
  • Clave de fila: el identificador de la fila modificada
  • Tipo de cambio: Iniciado por el usuario o recolección de elementos no utilizados
  • ID del clúster que recibió el cambio
  • Marca de tiempo de confirmación: hora del servidor en la que se confirmó el cambio en la tabla
  • Disyuntor de desempate: un valor que permite que la aplicación que lee la transmisión use la política de resolución de conflictos integrada de Bigtable
  • Token: Lo usa la aplicación consumidora para reanudar la transmisión si se interrumpe.
  • Marca de agua baja estimada: el tiempo estimado desde que la partición del registro alcanzó la replicación en todos los clústeres. Para obtener más detalles, consulta Particiones y Marcas de agua.

Para obtener más información sobre los campos de un registro de cambios de datos, consulta la referencia de la API de DataChange.

Almacenamiento de flujos de cambios

Una tabla y su flujo de cambios comparten los mismos recursos a nivel del clúster, incluidos los nodos y el almacenamiento. Como resultado, el almacenamiento de datos de flujos de cambios forma parte del almacenamiento de una tabla. En una instancia que usa la replicación, se almacena una copia de los datos de un flujo de cambios en cada clúster de la instancia que contiene la tabla con el flujo de cambios habilitado.

El almacenamiento usado para tus datos de flujo de cambios no se considera en el uso total de almacenamiento (% del máx.). Como resultado, no necesitas agregar nodos para manejar el mayor almacenamiento que consumen los datos del flujo de cambios (aunque es posible que debas agregar nodos para obtener capacidad de procesamiento adicional). Sin embargo, se te cobra por el almacenamiento que consumen los datos del flujo de cambios. Para obtener más detalles, consulta Consideraciones sobre los costos.

Cómo leer un flujo de cambios

Para leer (transmitir) una transmisión de cambios, debes usar un perfil de aplicación configurado para el enrutamiento de un solo clúster y, si transmites con Dataflow, debes habilitar las transacciones de una sola fila.

Para obtener más información sobre las políticas de enrutamiento, consulta Opciones de enrutamiento.

Para obtener más información sobre las transacciones de una sola fila, consulta Transacciones de fila única.

La API de Cloud Bigtable (API de Data) proporciona los métodos de flujo de cambios. Te recomendamos que uses una de las siguientes opciones en lugar de llamar a la API sin usar una biblioteca cliente o un conector:

  • Plantillas de Dataflow
  • Conector de Bigtable Beam
  • biblioteca cliente de Java

Todas las opciones te permiten evitar la necesidad de realizar un seguimiento y controlar los cambios de partición debido a las divisiones y combinaciones.

Para obtener más información, consulta ReadChangeStream

Plantillas de Dataflow

Puedes usar una de las siguientes plantillas de Dataflow que proporciona Google:

Conector de Bigtable Beam

Puedes usar el conector de Bigtable Beam para compilar una canalización:

Si no quieres compilar tu propia canalización, puedes usar las muestras de código del instructivo o la guía de inicio rápido de Bigtable como punto de partida para tu código:

biblioteca cliente de Java

Particiones

Para mantener una alta capacidad de procesamiento de lectura que coincida con una tasa de cambio o escritura alta, Bigtable divide un flujo de cambios en varias particiones que se pueden usar para leer el flujo de cambios en paralelo. Cada partición de flujo de cambios se asocia a una tablet. Las tabletas son subsecciones de una tabla que se redistribuyen según sea necesario para ayudar a equilibrar la carga de trabajo de solicitud de la tabla. Para obtener más información, consulta Balanceo de cargas.

La biblioteca cliente de Java te permite consultar cada partición en busca de cambios y proporciona la información necesaria para administrar los cambios en particiones debidos a divisiones y combinaciones.

Marcas de agua

Una marca de agua es una marca de tiempo que estima qué tan recientemente una partición alcanzó la replicación en todos los clústeres. La marca de agua de la partición se actualiza de forma continua a medida que se produce la replicación, lo que avanza en el tiempo.

Cada ChangeStreamMutation (registro de cambios de datos) incluye un campo estimatedLowWatermark, que es la marca de agua de la partición que está asociada con el registro de cambio de datos. Este estimatedLowWatermark es una estimación y no garantiza que no haya datos aún en la transmisión.

Marcas de agua para mesas replicadas

La estimatedLowWatermark (marca de agua baja) de una partición no avanza si la replicación no está completamente actualizada para la partición. La marca de agua baja en todo el flujo (la más baja de todas las marcas de agua bajas estimadas a nivel de partición) deja de avanzar si la marca de agua de cualquier partición no avanza. Una marca de agua que dejó de avanzar se considera detenida. Cuando esto ocurre, si estás transmitiendo tu flujo de cambios en una canalización, la canalización se detiene.

Muchos factores pueden hacer que una o más marcas de agua a nivel de partición se detengan durante cierta cantidad de tiempo, incluido el siguiente:

  • Sobrecargar un clúster con tráfico que provoca que la replicación quede detrás de una o más particiones
  • Demoras en la red
  • Falta de disponibilidad del clúster

Para controlar esto, el conector de Bigtable Beam establece la marca de tiempo de salida en cero para todos los datos. Para obtener más información, consulta Agrupa datos sin la hora del evento.

Supervisión

Para ayudarte a comprender cómo la habilitación de un flujo de cambios afecta el uso de CPU y almacenamiento de una instancia que contiene tablas con flujos de cambios habilitados, proporcionamos dos métricas específicas del flujo de cambios. Puedes ver las métricas en la página de supervisión de Bigtable o mediante el conjunto de herramientas de Cloud Monitoring.

Para obtener detalles sobre estas métricas, consulta Monitoring.

Consideraciones de costo

Habilitar un flujo de cambios en una tabla aumenta los costos de los nodos y el almacenamiento. En particular, es posible que generes más costos de almacenamiento.

Nodos

Por lo general, debes agregar nodos a un clúster (o aumentar la cantidad máxima de nodos si usas el ajuste de escala automático) para manejar el tráfico adicional de habilitar y procesar los registros de cambios en los datos.

Habilitar un flujo de cambios puede aumentar el uso de la CPU alrededor de un 10%, incluso antes de que comiences a procesarlo. Procesar una transmisión de cambios, como leerla con una canalización de Dataflow, puede aumentar el uso de CPU entre un 20% y un 30%, según el nivel de actividad de cambio y cómo se leen los datos de transmisión.

Almacenamiento

Se te cobrarán las tarifas de almacenamiento de Bigtable estándar para almacenar los registros de cambios de datos de tu tabla. También se te cobra por almacenar la tabla que se crea para realizar un seguimiento de los metadatos del flujo de cambios. El período de retención que especificas afecta directamente los costos de almacenamiento.

Como regla general, los registros de cambios en los datos de un día (que solo reflejan las mutaciones que ocurrieron ese día) ocupan alrededor de 1.5 veces más almacenamiento que los datos que se escribieron ese día consumen en el disco.

Transferencia de datos de red

Si lees un flujo de cambios entre regiones, puedes incurrir en costos por ese tráfico. Consulta la sección Red en los precios de Bigtable para obtener una lista completa de las tarifas de transferencia de datos de red.

Costos de procesamiento

Según cómo leas los registros de cambios en los datos, se aplican costos adicionales por servicios que no sean Bigtable. Por ejemplo, si usas Dataflow, pagas por los bytes que se procesan y las máquinas de trabajador que procesan el trabajo. Si deseas obtener más detalles, consulta Precios de Dataflow.

Quitar rangos de filas

Si es posible, evita quitar un rango de filas de una tabla que tiene un flujo de cambios habilitado. Si debes quitar un rango de filas, ten en cuenta que Bigtable puede tardar mucho tiempo en completar la operación y que el uso de CPU aumenta durante la operación.

¿Qué sigue?