Conector de Flink Bigtable

Apache Flink es un framework de procesamiento de flujos que te permite manipular datos en tiempo real. Si tienes una tabla de Bigtable, puedes usar un conector de Flink Bigtable para transmitir, serializar y escribir datos de la fuente de datos especificada en Bigtable. El conector te permite hacer lo siguiente con la API Table de Apache Flink o la API Datastream:

  1. Crear un flujo de procesamiento
  2. Serializa los valores de tu fuente de datos en entradas de mutación de Bigtable
  3. Escribe esas entradas en tu tabla de Bigtable

En este documento se describe el conector Flink Bigtable y lo que debes saber antes de usarlo. Antes de leer este documento, debes familiarizarte con Apache Flink, el modelo de almacenamiento de Bigtable y las escrituras de Bigtable.

Para usar el conector, debes tener una tabla de Bigtable que sirva como receptor de datos. Debes crear las familias de columnas de la tabla antes de iniciar la canalización. Las familias de columnas no se pueden crear al escribir. Para obtener más información, consulta Crear y gestionar tablas.

El conector está disponible en GitHub. Para obtener información sobre cómo instalar el conector, consulta el repositorio Flink Bigtable Connector. Para ver ejemplos de código que muestran cómo usar el conector, consulta el directorio flink-examples-gcp-bigtable.

Serializadores

El conector de Flink tiene tres serializadores integrados que puedes usar para convertir datos en entradas de mutación de Bigtable:

  • GenericRecordToRowMutationSerializer: para objetos AVRO GenericRecord
  • RowDataToRowMutationSerializer: para objetos RowData de Flink
  • FunctionRowMutationSerializer: para la lógica de serialización personalizada que usa una función proporcionada

También puedes crear tu propio serializador personalizado heredando de BaseRowMutationSerializer.

Modos de serialización

Cuando usas el conector Flink, puedes elegir entre dos modos de serialización. El modo especifica cómo se serializan los datos de origen para representar las familias de columnas de Bigtable y, a continuación, se escriben en la tabla de Bigtable. Debes usar uno de los dos modos.

Modo de familia de columnas

En el modo de familia de columnas, todos los datos se escriben en una única familia de columnas especificada. No se admiten campos anidados.

Modo de filas anidadas

En el modo de filas anidadas, cada campo de nivel superior representa una familia de columnas. El valor del campo de nivel superior (RowKeyField) es otro campo. El valor de ese campo tiene un objeto de fila por cada columna de la familia de columnas de Bigtable. En el modo de filas anidadas, todos los campos, excepto el de nivel superior, deben ser objetos de fila. No se admiten filas anidadas dos veces.

Procesamiento exacto

En Apache Flink, una vez exactamente significa que cada registro de datos de un flujo se procesa exactamente una vez, lo que evita que se procesen datos duplicados o que se pierdan datos, incluso en caso de fallos del sistema.

Una mutación de Bigtable mutateRow es idempotente de forma predeterminada, por lo que una solicitud de escritura que tenga la misma clave de fila, familia de columnas, columna, marca de tiempo y valor no crea una celda nueva, aunque se vuelva a intentar. Esto significa que, cuando usas Bigtable como receptor de datos de un framework de Apache Flink, obtienes automáticamente un comportamiento de tipo "exactamente una vez", siempre que no cambies la marca de tiempo en los reintentos y el resto de tu flujo de procesamiento también cumpla los requisitos de este tipo de comportamiento.

Para obtener más información sobre la semántica de procesamiento "una sola vez", consulta Descripción general del procesamiento "una sola vez" de extremo a extremo en Apache Flink.

Siguientes pasos