Conector de Flink Bigtable

Apache Flink es un framework de procesamiento de transmisiones 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 desde la fuente de datos especificada en Bigtable. El conector te permite hacer lo siguiente con la API de Table de Apache Flink o la API de Datastream:

  1. Crea una canalización
  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 de 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 existente 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 durante la escritura. Para obtener más información, consulta Crea y administra tablas.

El conector está disponible en GitHub. Para obtener información sobre cómo instalar el conector, consulta el repositorio de Flink Bigtable Connector. Para ver ejemplos de código que demuestran 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 GenericRecord de AVRO
  • RowDataToRowMutationSerializer: Para objetos RowData de Flink
  • FunctionRowMutationSerializer: Para la lógica de serialización personalizada con una función proporcionada

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

Modos de serialización

Cuando usas el conector de Flink, puedes elegir uno de los dos modos de serialización. El modo especifica cómo se serializan tus datos de origen para representar tus familias de columnas de Bigtable y, luego, se escriben en tu 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 sola familia de columnas especificada. No se admiten los 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 para cada columna en 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 las filas anidadas dobles.

Procesamiento “exactamente una vez”

En Apache Flink, exactamente una vez significa que cada registro de datos en un flujo se procesa exactamente una vez, lo que evita cualquier procesamiento duplicado o pérdida de datos, incluso en caso de fallas del sistema.

Una mutación de mutateRow de Bigtable 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, incluso si se reintenta. Esto significa que, cuando usas Bigtable como receptor de datos para un framework de Apache Flink, obtienes automáticamente un comportamiento de exactamente una vez, siempre y cuando no cambies la marca de tiempo en los reintentos y el resto de tu canalización también satisfaga los requisitos de exactamente una vez.

Para obtener más información sobre la semántica de tipo exactamente una vez, consulta An overview of end-to-end exactly-once processing in Apache Flink (Descripción general del procesamiento de tipo exactamente una vez de extremo a extremo en Apache Flink).

¿Qué sigue?