Conector de Bigtable de Flink

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 Bigtable de Flink para transmitir, serializar y escribir datos de tu fuente de datos especificada en Bigtable. El conector te permite hacer lo siguiente con la API de Apache Flink Table 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 Bigtable de Flink 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 preexistente que funcione como destino 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 en 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 demuestren 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 los 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, eliges 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, escribir 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 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 campo de nivel superior, deben ser objetos de fila. No se admiten filas anidadas dos veces.

Procesamiento “exactamente una vez”

En Apache Flink, exactamente una vez significa que cada registro de datos de 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 mutateRow de Bigtable es idempotente de forma predeterminada, por lo que una solicitud de escritura que tiene la misma clave de fila, familia de columnas, columna, marca de tiempo y valor no crea una celda nueva, incluso si se vuelve a intentar. Esto significa que, cuando usas Bigtable como el destino de datos de un framework de Apache Flink, obtienes el comportamiento de exactamente una vez automáticamente, siempre que no cambies la marca de tiempo en los reintentos y el resto de la 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 Descripción general del procesamiento de extremo a extremo de tipo exactamente una vez en Apache Flink.

¿Qué sigue?