Los conectores de receptor de Cloud Storage transmiten datos de Kafka a buckets de Cloud Storage, lo que te permite almacenar y procesar grandes volúmenes de datos de manera rentable y escalable.
Los casos de uso de los conectores de receptor de Cloud Storage incluyen los siguientes:
Transferencia de datos a data lakes. Almacena datos de Kafka en un data lake para el procesamiento por lotes y el archivo a largo plazo.
Archiva datos para cumplir con los requisitos reglamentarios.
Antes de comenzar
Antes de crear un conector de receptor de Cloud Storage, asegúrate de tener lo siguiente:
Crea un clúster de Managed Service para Apache Kafka para tu clúster de Connect. Este es el clúster principal de Kafka asociado con el clúster de Connect. También es el clúster de origen que forma un extremo de la canalización del conector.
Crea un clúster de Connect para alojar tu conector de receptor de Cloud Storage.
Crea un bucket de Cloud Storage para almacenar los datos transmitidos desde Kafka.
Crea y configura un tema de Kafka dentro del clúster de origen. Los datos se mueven de este tema de Kafka al bucket de Cloud Storage de destino.
Roles y permisos requeridos
Para obtener los permisos que
necesitas para crear un conector,
pídele a tu administrador que te otorgue el
rol de IAM Editor de conectores de Kafka administrados (roles/managedkafka.connectorEditor) en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para crear un conector. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para crear un conector:
-
Crear un conector:
managedkafka.connectors.create
También puedes obtener estos permisos con roles personalizados o otros roles predefinidos.
Otorga permisos para escribir en el bucket de Cloud Storage
La cuenta de servicio de Managed Kafka debe tener los siguientes permisos para escribir mensajes en el bucket de Cloud Storage:
storage.objects.createstorage.objects.delete
Otorga el rol de Usuario de objetos de almacenamiento (roles/storage.objectUser) a la cuenta de servicio en el proyecto que contiene el bucket de Cloud Storage.
La cuenta de servicio de Managed Kafka tiene el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com,
donde PROJECT_NUMBER es el número de proyecto del clúster de Connect.
Si tu clúster de Connect está en un proyecto diferente de tu clúster de Managed Service para Apache Kafka cluster, consulta Crea un clúster de Connect en un proyecto diferente.
Crea un conector de receptor de Cloud Storage
Para crear un conector de receptor de Cloud Storage, sigue estos pasos.
Console
En la Google Cloud consola de, ve a la página Clústeres de Connect.
Haz clic en el clúster de Connect para el que deseas crear el conector.
Se muestra la página Detalles del clúster de Connect.
Haz clic en Crear conector.
Se muestra la página Crear conector de Kafka.
Para el nombre del conector, ingresa una cadena.
Si necesitas ayuda para asignarle un nombre a un conector, consulta los Lineamientos para asignarles nombres a los recursos de Managed Service para Apache Kafka.
En Connector plugin (Plug-in del conector), selecciona Cloud Storage Sink.
Especifica los Topics (Temas) desde los que puedes transmitir datos.
Elige el Storage Bucket (Bucket de almacenamiento) para almacenar los datos.
(Opcional) Configura parámetros adicionales en la sección Configuration (Configuración).
Selecciona la Task restart policy (Política de reinicio de tareas). Para obtener más información, consulta Política de reinicio de tareas.
Haz clic en Crear.
gcloud
-
En la Google Cloud consola de, activa Cloud Shell.
En la parte inferior de la Google Cloud consola de Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
Ejecuta el
gcloud managed-kafka connectors createcomando:gcloud managed-kafka connectors create CONNECTOR_ID \ --location=LOCATION \ --connect-cluster=CONNECT_CLUSTER_ID \ --config-file=CONFIG_FILEReemplaza lo siguiente:
CONNECTOR_ID: Es el ID o el nombre del conector. Si necesitas ayuda para asignarle un nombre a un conector, consulta los Lineamientos para asignarles nombres a los recursos de Managed Service para Apache Kafka. El nombre de un conector es inmutable.LOCATION: Es la ubicación en la que creas el conector. Debe ser la misma ubicación en la que creaste el clúster de Connect.CONNECT_CLUSTER_ID: Es el ID del clúster de Connect en el que se crea el conector.CONFIG_FILE: Es la ruta de acceso al archivo de configuración YAML del conector.
A continuación, se muestra un ejemplo de un archivo de configuración para el conector de receptor de Cloud Storage:
connector.class: "io.aiven.kafka.connect.gcs.GcsSinkConnector" gcs.bucket.name: "BUCKET_NAME" gcs.credentials.default: "true" format.output.type: "json" key.converter: "org.apache.kafka.connect.storage.StringConverter" value.converter: "org.apache.kafka.connect.json.JsonConverter" value.converter.schemas.enable: "false" topics: "TOPIC_LIST" tasks.max: "3"Reemplaza lo siguiente:
BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se escribirá.TOPIC_LIST: Es una lista separada por comas de los temas de Kafka desde los que se debe leer. La lista también puede incluir expresiones regulares.
Terraform
Puedes usar un recurso de Terraform para crear un conector.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go en Instala las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Go de Managed Service para Apache Kafka.
Para autenticarte en Managed Service para Apache Kafka, configura las credenciales predeterminadas de la aplicación(ADC). Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java en Instala las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Java de Managed Service para Apache Kafka.
Para autenticarte en Managed Service para Apache Kafka, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python en Instala las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Python de Managed Service para Apache Kafka.
Para autenticarte en Managed Service para Apache Kafka, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Después de crear un conector, puedes editarlo, borrarlo, pausarlo, detenerlo o reiniciarlo.
Configura el conector
Para obtener una lista completa de las propiedades específicas de este conector, consulta Configuración en la documentación del conector de receptor de Cloud Storage.
Output fields
De forma predeterminada, el conector escribe solo el valor del registro de cada registro de Kafka.
Para incluir claves o encabezados de registro, establece la propiedad format.output.fields en una lista separada por comas de los campos que se incluirán. Los campos admitidos son key, value, headers y timestamp. Por ejemplo:
format.output.fields=key,value,headers
Formatos de salida
El conector admite la escritura de registros de Kafka en formato CSV, JSON y Parquet. En las siguientes secciones, se describe cómo configurar el formato de salida.
Formato CSV
Para escribir archivos CSV en Cloud Storage, establece format.output.type=csv.
Usa los siguientes convertidores:
Convertidor de claves:
org.apache.kafka.connect.storage.StringConverteroorg.apache.kafka.connect.json.JsonConverterConvertidor de valores:
org.apache.kafka.connect.converters.ByteArrayConverter
Formato JSON
Para escribir archivos con formato JSON en Cloud Storage, establece format.output.type en uno de los siguientes valores:
json: Cada archivo de salida contiene un solo array de objetos JSON, en el que cada objeto JSON representa un registro de Kafka.jsonl: El conector escribe cada registro de Kafka como un objeto JSON en una línea separada.
En el siguiente ejemplo, se muestra cómo el conector escribe un registro de Kafka en formato JSON:
{"headers":[{"key":"k1","value":"v1"},{"key":"k2","value":"v2"}],"value":"Hello world","key":"my-key"}
Si estableces el convertidor de claves o valores en org.apache.kafka.connect.converters.ByteArrayConverter, el conector escribirá ese campo como un valor codificado en base64.
El conector no incluye un esquema JSON en la salida, incluso si value.converter.schemas.enable es true.
Formato Parquet
Para escribir archivos Parquet en Cloud Storage, establece format.output.type=parquet.
Si el convertidor de claves o valores es org.apache.kafka.connect.json.JsonConverter, los datos JSON deben incluir un esquema. Establece la propiedad schemas.enable del convertidor en true.
Para los datos JSON, el conector escribe los datos como un tipo struct en el archivo Parquet. Por ejemplo, si el valor del registro de Kafka tiene un campo llamado userid, el
conector escribe una columna llamada value.userid. Para aplanar los nombres de las columnas, establece format.output.envelope=false. Si format.output.envelope es false, entonces
format.output.fields debe especificar un solo campo de salida.
Configuración de archivos de Cloud Storage
La siguiente configuración controla cómo el conector escribe archivos en Cloud Storage.
gcs.bucket.name: Obligatorio. Especifica el nombre del bucket de Cloud Storage en el que el conector escribe datos.file.compression.type: Especifica el tipo de compresión para los archivos de salida. Algunos ejemplos songzip,snappy,zstdynone. El valor predeterminado esnone.file.name.prefix: Especifica un prefijo que se agregará al nombre de cada archivo. El valor predeterminado está vacío ("").file.name.template: Especifica una plantilla para el nombre de archivo. El conector admite variables de marcador de posición para la plantilla, como{{topic}}para el nombre del tema y{{partition}}para el número de partición. Para obtener más información, consulta la documentación del conector de receptor de Cloud Storage.file.max.records: Es la cantidad máxima de registros que se escribirán en un solo archivo. Si el valor es 0, no hay un máximo específico. El valor predeterminado es 0.file.max.bytes: Es el tamaño máximo del archivo que se escribirá, en bytes. Si el valor es 0, no hay un máximo específico. El valor predeterminado es 0.
Agrupación de registros
Cuando el conector de receptor de Cloud Storage escribe registros de Kafka, de forma predeterminada, agrupa los registros por tema y partición. Por ejemplo, los registros de
la partición 0 del tema my-topic se escriben en archivos llamados
my-topic-0-OFFSET, en los que
OFFSET es el desplazamiento inicial.
Si el parámetro file.name.template incluye la variable de marcador de posición
{{key}}, el conector agrupa los registros por clave. En este modo, el conector escribe un archivo separado para cada clave de registro. El conector sobrescribe cada archivo con el registro más reciente de esa clave.
Credenciales
La propiedad gcs.credentials.default debe establecerse en true. Este parámetro de configuración
permite que el conector descubra Google Cloud las credenciales automáticamente.