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 necesitas 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 es compatible con la versión 2.1.0 de Apache Flink y está disponible en GitHub. Para obtener información sobre la instalación del 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 en entradas de mutación que se escriben en familias de columnas en tu tabla de Bigtable. Debes usar uno u otro modo.

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 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 las filas anidadas dobles.

Opciones de configuración

Para configurar el rendimiento y el comportamiento del conector, puedes usar varias opciones. Para obtener más información sobre estas opciones, consulta la documentación del conector en GitHub.

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. Cuando usas Bigtable como receptor de datos para un framework de Apache Flink, obtienes un comportamiento de exactamente una vez de forma automática, siempre y cuando se cumplan las siguientes condiciones:

  • No estableces la marca de tiempo para usar la marca de tiempo del servidor (-1) en los reintentos.
  • El resto de tu canalización satisface los requisitos de exactamente una vez.

Para obtener más información sobre la semántica de 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?