Transmite cambios con Dataflow
El conector de Bigtable Beam te permite usar Dataflow para leer los registros de cambios de datos de Bigtable sin necesidad de rastrear ni procesar cambios de partición en tu código, ya que el conector controla esa lógica por ti.
En este documento, se describe cómo configurar y usar el conector de Bigtable Beam para leer un flujo de cambios mediante una canalización de Dataflow. Antes de leer este documento, debes leer la Descripción general de los flujos de cambios y familiarizarte con Dataflow.
Alternativas para compilar tu propia canalización
Si no deseas compilar tu propia canalización de Dataflow, puedes usar una de las siguientes opciones.
Puedes usar una plantilla de Dataflow proporcionada por Google.
Tambié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.
Asegúrate de que el código que generes use la versión 26.14.0 de google cloud libraries-bom
o una posterior.
Detalles del conector
El método del conector de Bigtable Beam, BigtableIO.readChangeStream
, te permite leer una transmisión de registros de cambios de datos (ChangeStreamMutation
) que puedes procesar. El conector de Bigtable Beam es un componente del repositorio de GitHub de Apache Beam. Para obtener una descripción del código del conector, consulta los comentarios en BigtableIO.java
.
Debes usar el conector con la versión de Beam 2.48.0 o posterior. Consulta la compatibilidad del entorno de ejecución de Apache Beam para asegurarte de que usas una versión compatible de Java. Luego, puedes implementar una canalización que use el conector en Dataflow, que controla el aprovisionamiento y la administración de los recursos y ayuda con la escalabilidad y confiabilidad del procesamiento de datos de transmisión.
Para obtener más información sobre el modelo de programación de Apache Beam, consulta la documentación de Beam.
Cómo agrupar datos sin horarios de eventos
Los registros de cambios de datos transmitidos mediante el conector de Bigtable Beam no son compatibles con las funciones de Dataflow que dependen de los tiempos del evento.
Como se explica en Replicación y marcas de agua, es posible que una marca de agua baja no avance si la replicación de la partición no alcanzó al resto de la instancia. Cuando una marca de agua baja deja de avanzar, es posible que se detenga el flujo de cambios.
Para evitar que la transmisión se detenga, el conector de Bigtable Beam genera todos los datos con una marca de tiempo de salida de cero. La marca de tiempo de cero hace que Dataflow considere que todos los registros de cambios en los datos son datos tardíos. Como resultado, las funciones de Dataflow que dependen de los tiempos de los eventos no son compatibles con los flujos de cambios de Bigtable. Específicamente, no puedes usar funciones analíticas, activadores de tiempo de eventos ni temporizadores de tiempo de evento.
En su lugar, puedes usar GlobalWindows con activadores de tiempo que no sean de eventos para agrupar estos datos tardíos en paneles, como se demuestra en el ejemplo del instructivo. Para obtener detalles sobre los activadores y los paneles, consulta Activadores en la guía de programación de Beam.
Ajuste de escala automático
El conector admite el ajuste de escala automático de Dataflow, que se habilita de forma predeterminada cuando se usa Runner v2 (obligatorio). El algoritmo de ajuste de escala automático de Dataflow tiene en cuenta
el trabajo pendiente estimado del flujo de cambios, que se puede supervisar en la
página de
supervisión de Dataflow
en la sección Backlog
. Usa la marca --maxNumWorkers
cuando implementes un trabajo para limitar la cantidad de trabajadores.
Para escalar de forma manual tu canalización en lugar de usar el ajuste de escala automático, consulta Escala de forma manual una canalización de transmisión.
Limitaciones
Ten en cuenta las siguientes limitaciones antes de usar el conector de Bigtable Beam con Dataflow.
Dataflow Runner V2
El conector solo se puede ejecutar mediante Dataflow Runner v2.
Para habilitar esto, especifica --experiments=use_runner_v2
en los argumentos de la línea de comandos. Ejecutar con Runner v1 hace que tu canalización falle con la siguiente excepción:
java.lang.UnsupportedOperationException: BundleFinalizer unsupported by non-portable Dataflow
Instantáneas
El conector no admite instantáneas de Dataflow.
Antes de comenzar
Antes de usar el conector, completa los siguientes requisitos previos.
Configura la autenticación
Para usar las muestras de Java de esta página desde un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea credenciales de autenticación locales para tu Cuenta de Google:
gcloud auth application-default login
Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Si deseas obtener información sobre cómo configurar la autenticación para un entorno de producción, consulta Configura las credenciales predeterminadas de la aplicación para el código que se ejecuta en Google Cloud..
Habilita un flujo de cambios
Debes habilitar un flujo de cambios en una tabla antes de poder leerla. También puedes crear una tabla nueva con los flujos de cambios habilitados.
Funciones obligatorias
A fin de obtener los permisos que necesitas para leer una transmisión de cambios de Bigtable con Dataflow, pídele a tu administrador que te otorgue las siguientes funciones de IAM.
Para leer los cambios de Bigtable, necesitas este rol:
- Administrador de Bigtable (roles/bigtable.admin) en la instancia de Bigtable que contiene la tabla desde la que planeas transmitir cambios.
Para ejecutar el trabajo de Dataflow, necesitas los siguientes roles:
- Desarrollador de Dataflow (
roles/dataflow.developer
) en el proyecto que contiene tus recursos de Cloud - Trabajador de Dataflow (roles/dataflow.worker) en el proyecto que contiene tus recursos de Cloud
- Administrador de objetos de almacenamiento (roles/storage.objectAdmin) en los buckets de Cloud Storage que planeas usar
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Agrega el conector de Bigtable Beam como dependencia.
Agrega un código similar a la siguiente dependencia a tu archivo pom.xml de Maven. La versión debe ser 2.48.0 o posterior.
<dependencies>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
<version>VERSION</version>
</dependency>
</dependencies>
Cómo leer el flujo de cambios
Para compilar una canalización de Dataflow a fin de leer tus registros de cambios de datos, configura el conector y, luego, agrega transformaciones y receptores. Luego, usa el conector para leer los objetos ChangeStreamMutation
en una canalización de Beam.
En las muestras de código de esta sección, escritas en Java, se indica cómo compilar una canalización y usarla para convertir pares clave-valor en una string. Cada par consta de una clave de fila y un objeto ChangeStreamMutation
. La canalización convierte las entradas de cada objeto en una string separada por comas.
Compila la canalización
En esta muestra de código Java, se demuestra cómo compilar la canalización:
Procesa los registros de cambios en los datos
En este ejemplo, se muestra cómo realizar un bucle a través de todas las entradas en un registro de cambios de datos para una fila y llamar a un método de conversión a string según el tipo de entrada.
Para obtener una lista de los tipos de entrada que puede contener un registro de cambios de datos, consulta Qué hay en un registro de cambios de datos.
En este ejemplo, se convierte una entrada write:
En este ejemplo, se convierte una entrada de eliminación de celdas:
En este ejemplo, una entrada de eliminación de una familia de columnas se convierte:
Supervisar
Los siguientes recursos de la consola de Google Cloud te permiten supervisar tus recursos de Google Cloud mientras ejecutas una canalización de Dataflow para leer un flujo de cambios de Bigtable:
En particular, revisa las siguientes métricas:
- En la página Monitoring de Bigtable, verifica estas metrics:
- Los datos del uso de CPU por flujos de cambios en la métrica
cpu_load_by_app_profile_by_method_by_table
Muestra el impacto del flujo de cambios en el uso de CPU de tu clúster. - Uso del almacenamiento del flujo de cambios (bytes) (
change_stream_log_used_bytes
).
- Los datos del uso de CPU por flujos de cambios en la métrica
- En la página de supervisión de Dataflow, verifica la actualidad de los datos, que muestra la diferencia entre la hora actual y la marca de agua. Debería durar alrededor de dos minutos, con aumentos ocasionales que duran uno o dos minutos. Si la métrica de actualización de datos es constantemente mayor que ese umbral, es probable que tu canalización no cuente con los recursos suficientes, por lo que deberías agregar más trabajadores de Dataflow.
¿Qué sigue?
- Aprende a escribir desde Dataflow a Cloud Storage.
- Consulta la lista completa de las métricas de supervisión que proporciona Bigtable.