Si necesitas cargar mensajes AVRO o JSON desde un tema de Managed Service para Apache Kafka en una tabla de BigQuery, puedes hacerlo con una plantilla de Dataflow. En este documento, se explica cómo configurar una canalización basada en esta plantilla con la consola de Google Cloud . También puedes usar la API de REST o Google Cloud CLI para configurar esta canalización.
Google Cloud productos utilizados
La plantilla de Dataflow de Kafka a BigQuery usa los siguientes productos Google Cloud facturables. Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.
- BigQuery: BigQuery es el almacén de datos sin servidores de Google Cloud. En esta solución, BigQuery sirve como destino para tus datos de Kafka. La API de BigQuery Streaming Write se usa para escribir los datos en BigQuery. Luego, puedes usar BigQuery para analizar estos datos con consultas en SQL, compilar modelos de aprendizaje automático con BigQuery ML y potenciar tus aplicaciones de inteligencia empresarial.
- Dataflow: Es un servicio de procesamiento de datos completamente administrado. Kafka to BigQuery Dataflow utiliza Dataflow para crear una canalización que lee datos de tu tema de Kafka, realiza las transformaciones necesarias y los escribe en BigQuery. Las capacidades de ajuste de escala automático y recuperación automática de Dataflow garantizan que tu canalización se ejecute de manera confiable y eficiente.
- Cloud Storage: Si bien no participa directamente en el flujo de datos principal, Cloud Storage se puede usar para almacenar tus archivos de esquema de Avro si usas la codificación binaria de Avro para tus mensajes de Kafka. Esto permite que la canalización de Dataflow interprete correctamente la estructura de tus datos.
Además, la solución también usa Managed Service para Apache Kafka.
- Managed Service para Apache Kafka: Un Google Cloud servicio que te ayuda a ejecutar Apache Kafka. Managed Service para Apache Kafka te permite enfocarte en crear sistemas basados en eventos y canalizaciones de datos de transmisión, en lugar de administrar la infraestructura. Si deseas obtener más información sobre los precios de Managed Service para Apache Kafka, consulta la guía de precios.
Antes de comenzar
Antes de iniciar la plantilla de Dataflow de Kafka a BigQuery, asegúrate de haber completado lo siguiente:
Crea un clúster y un tema de Managed Service para Apache Kafka.
Una forma de crear un clúster y un tema es seguir la guía de inicio rápido de Managed Service para Apache Kafka.
Si tu tema contiene registros de Avro, consulta Configura el formato del mensaje de Kafka para conocer los requisitos de recursos adicionales.
Habilita las siguientes Google Cloud APIs:
Dataflow
BigQuery
Cloud Storage
gcloud services enable dataflow.googleapis.com bigquery.googleapis.com \ storage.googleapis.comCrea un conjunto de datos y una tabla de BigQuery. Asegúrate de que el esquema de la tabla coincida con el esquema de tu tema de entrada de Kafka.
Si usas varios esquemas en el mismo tema y escribes en varias tablas, no necesitas crear una tabla antes de configurar la canalización.
Para obtener más información sobre cómo crear un conjunto de datos y una tabla de BigQuery, consulta Crea un conjunto de datos y Crea una tabla vacía con una definición de esquema.
Otorga el rol de cliente de Kafka administrado a la cuenta de servicio de trabajador de Dataflow
Para conectar tu trabajo de Dataflow a Managed Service for Apache Kafka, deberás otorgar permisos específicos a la cuenta de servicio de trabajador de Dataflow. Esta cuenta de servicio es la identidad que se usa para todas las VMs de trabajador en tu trabajo de Dataflow, y todas las solicitudes que se realizan desde estas VMs utilizan esta cuenta.
Para permitir el acceso a tus recursos de Kafka, debes otorgar el rol roles/managedkafka.client a la cuenta de servicio de trabajador de Dataflow. Este rol incluye el permiso managedkafka.clusters.connect necesario para establecer conexiones.
Para obtener más información sobre la cuenta de servicio de trabajador, consulta Seguridad y permisos para canalizaciones en Google Cloud.
Para otorgar el rol de cliente de Kafka administrado a la cuenta de servicio de Dataflow, sigue estos pasos:
Console
- En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Verifica que el proyecto esté configurado como el proyecto del consumidor al que accederá el cliente de Managed Service para Apache Kafka.
- Haz clic en Otorgar acceso.
- En la página nueva, en Agregar principales, ingresa la dirección de correo electrónico de la cuenta de servicio del trabajador de Dataflow que estás usando.
- En Asignar roles, selecciona el rol Cliente de Kafka administrado.
- Haz clic en Guardar.
gcloud CLI
-
En la consola de Google Cloud , activa Cloud Shell.
En la parte inferior de la consola de Google 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 comando
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
Reemplaza lo siguiente:
-
PROJECT_ID es el ID del proyecto.
-
SERVICE_ACCOUNT_EMAIL es la dirección de correo electrónico de la cuenta de servicio del trabajador de Dataflow.
-
Inicia la plantilla de Dataflow de Kafka a BigQuery
Puedes iniciar la plantilla de Kafka a BigQuery de Dataflow desde la página de detalles del clúster en la consola.
-
En la consola de Google Cloud , ve a la página Clúster.
Se enumeran los clústeres que creaste en un proyecto.
- Para ver la página de detalles del clúster, haz clic en el nombre de un clúster.
- En la página de detalles del clúster, en Temas, haz clic en el ícono de BigQuery Export para cualquier tema.
Se abrirá la página Crea un trabajo de Dataflow con la plantilla "Kafka a BigQuery".
Configura los campos de la plantilla según la información incluida en las siguientes secciones.
Ingresa un nombre para el trabajo
En el campo Nombre del trabajo, ingresa un nombre para tu trabajo de Dataflow.
El nombre debe ser único entre todos los trabajos en ejecución actuales del proyecto.
Elige un extremo regional para tu canalización
En el campo Extremo regional, configura el extremo regional en la ubicación de tu clúster de Kafka o el conjunto de datos de BigQuery para minimizar las tarifas de transferencia de datos entre regiones.
Los trabajadores de Dataflow pueden ejecutarse independientemente de la región de tu clúster de Kafka. Sin embargo, incurrirás en costos de salida entre regiones si inicias trabajadores fuera de la región de tu clúster de Kafka.
Para ver la ubicación del clúster, sigue los pasos que se indican en Cómo enumerar tus clústeres de Managed Service para Apache Kafka.
Elige una plantilla de Dataflow
En Plantilla de Dataflow, conserva el valor predeterminado de Kafka a BigQuery.
Configura la fuente
En Fuente, conserva el valor predeterminado de Managed Service para Apache Kafka.
Los valores predeterminados para Clúster de Kafka, Tema de Kafka y Modo de autenticación de origen de Kafka ya están seleccionados según el tema que elegiste. Conserva estos valores.
Configura el formato del mensaje de Kafka
La plantilla de Dataflow admite tres formatos de mensajes:
Formato de transferencia de Confluent de Avro: Cada mensaje de Kafka incluye un byte mágico, un ID de esquema y el registro codificado de forma binaria de Avro. De forma predeterminada, la clave del mensaje no se carga en BigQuery.
En el caso de los formatos de Avro (formato de transferencia de Confluent), puedes utilizar un solo esquema o varios:
Esquema único: Todos los mensajes se ajustan a un único esquema de Avro predefinido.
Varios esquemas: Los mensajes pueden utilizar diferentes esquemas. Esto solo se admite para el formato Avro (formato de transferencia de Confluent).
Avro (codificado de forma binaria): Los mensajes solo contienen la carga útil del registro, sin metadatos. Debes proporcionar un archivo de esquema Avro (.avsc) subido a Cloud Storage. Todos los mensajes deben cumplir con este único esquema.
JSON: Los registros no requieren un esquema predefinido. Los registros que no cumplen con el esquema de la tabla de BigQuery se envían a la cola de mensajes no entregados (si está configurada) o se registra un mensaje de error. El formato admitido es
{"field": "value"}. No se admite el formato[{"name": "field", "value": "value"}].
Formato de transferencia de Confluent Avro
Si eliges esta opción como el formato del mensaje de Kafka, configura los siguientes parámetros adicionales:
Fuente del esquema: Este campo le indica a la canalización dónde encontrar el esquema. Elige una de las siguientes opciones:
Registro de esquemas: Tus esquemas se almacenan en un registro de esquemas de Confluent. Esto es útil para desarrollar esquemas y administrar varias versiones. Asegúrate de que se pueda acceder al registro de esquemas desde la red del clúster de Managed Service para Apache Kafka y de que esté alojado en la misma región que tus trabajadores de Dataflow. Puedes usar un registro de esquemas con situaciones de esquemas únicos y múltiples. Establece los siguientes parámetros de configuración adicionales:
URL de conexión del registro de esquemas: Proporciona la URL para conectarte a tu registro de esquemas.
Modo de autenticación: Si tu registro requiere autenticación, selecciona OAuth o TLS. De lo contrario, selecciona Ninguno.
Single schema file: Elige esta opción si todos tus mensajes siguen un esquema único y fijo definido en un archivo.
- Archivo de Cloud Storage para el archivo de esquema de Avro: Es la ruta de acceso al archivo de esquema de Avro que se usa para decodificar todos los mensajes de un tema.
Managed Service para Apache Kafka no ofrece un registro de esquemas. La plantilla solo admite el paso de credenciales de autenticación a registros de esquemas que sean compatibles con el formato de cableado de Confluent.
Codificación binaria de Avro
Si eliges esta opción como el formato del mensaje de Kafka, configura los siguientes parámetros adicionales:
- Archivo de Cloud Storage para el archivo de esquema de Avro: Es la ruta de acceso al archivo de esquema de Avro que se usa para decodificar todos los mensajes de un tema.
JSON
Si eliges esta opción como el formato del mensaje de Kafka, no se requiere ninguna otra configuración.
Configura la persistencia de la clave de Kafka en la tabla de BigQuery
Si habilitas la opción Persist the Kafka message key to the BigQuery table, también debes agregar un campo llamado _key de tipo BYTES en la tabla de destino.
Si bien la clave puede representar datos estructurados, la plantilla la trata como un array de bytes.
Cómo especificar opciones de desplazamiento
Para evitar el reprocesamiento de mensajes cuando se deben reiniciar trabajadores individuales o toda la canalización, selecciona la opción Confirmar desfases en Kafka. Esto garantiza que tu canalización reanude el procesamiento desde donde lo dejó, lo que evita el procesamiento duplicado y las posibles incoherencias de datos.
En el campo Enter Consumer Group ID, ingresa un nombre único para el grupo de esta canalización. En la mayoría de los casos, querrás que la canalización lea cada mensaje una vez y que se pueda reiniciar.
En el campo Offset de inicio predeterminado de Kafka, la canalización de Dataflow ofrece dos opciones de offset de inicio. Selecciona una de las siguientes opciones:
Earliest: Procesa mensajes desde el principio del tema de Kafka.
Latest: Procesa mensajes a partir del desplazamiento más reciente disponible.
Configura el destino
Estas opciones controlan cómo tu canalización de datos escribe datos en BigQuery.
El campo Estrategia de nombres de tablas determina cómo se organizan tus datos en las tablas de BigQuery. Tienes dos opciones:
Nombre de una sola tabla (opción predeterminada): Todos los datos de tu tema de Kafka se almacenan en una sola tabla de BigQuery. Esta es la opción más sencilla y la recomendada cuando tus datos de Kafka tienen el mismo esquema.
En Tabla de salida de BigQuery, especifica el nombre de la tabla en la que se almacenarán todos los datos de tu tema de Kafka.
Nombres de tablas dinámicos: Crea varias tablas de BigQuery según el esquema de tus mensajes de Kafka. Te recomendamos esta opción cuando tus mensajes de Kafka tienen esquemas diferentes. Esta opción solo funciona si tu canalización usa el registro de esquemas o el formato de transferencia de Confluent de Avro para controlar la estructura de los mensajes.
Cada esquema único en tus mensajes de Kafka tiene su propia tabla en BigQuery. Los nombres de las tablas se generan automáticamente según los nombres de los esquemas.
Si seleccionas Nombres de tablas dinámicas, configura estos campos adicionales:
Proyecto de salida de BigQuery: Es el proyecto de Google Cloud en el que se encuentra tu conjunto de datos de BigQuery.
Conjunto de datos de salida de BigQuery: Es el conjunto de datos dentro de tu proyecto en el que se crean las tablas.
Prefijo de nombres de tablas de BigQuery (opcional): Agrega un prefijo a los nombres de tablas generados automáticamente para una mejor organización.
Configura la API de BigQuery Storage Write
Para la cantidad de transmisiones para la API de BigQuery Storage Write, comienza con 0 (valor predeterminado). Esta opción permite que la canalización determine automáticamente la mejor cantidad de transmisiones.
Este parámetro de configuración controla cuántas transmisiones paralelas se usan para escribir datos en BigQuery. Los números más altos pueden mejorar la velocidad de escritura, en especial para grandes volúmenes de datos. La cantidad óptima depende de tus datos y la configuración de BigQuery.
Configura la frecuencia de activación
Para la opción Frecuencia de activación en segundos para la API de BigQuery Write, comienza con 5 segundos (valor predeterminado). Este es un buen equilibrio para la mayoría de los casos de uso.
Este parámetro de configuración determina la frecuencia con la que se escriben los datos en BigQuery.
Los números más bajos significan escrituras más frecuentes. Esto puede reducir la latencia, pero podría aumentar los costos de BigQuery. Los números más altos significan escrituras menos frecuentes. Esto puede ser más rentable, pero podría aumentar la latencia.
Configura la cola de mensajes no entregados
A veces, los mensajes no se pueden procesar debido a daños, tipos de datos incompatibles o discrepancias de esquemas con la tabla de BigQuery de destino.
Para controlar estos casos, habilita la cola de mensajes no entregados en la plantilla y proporciona un nombre de tabla. La plantilla crea la tabla con un esquema estandarizado. Los mensajes erróneos se escriben en una tabla de BigQuery separada.
Configura la encriptación
De forma predeterminada, todos los datos en reposo y en tránsito se encriptan con unGoogle-owned and Google-managed encryption key. Si tienes claves de encriptación administradas por el cliente (CMEK), puedes seleccionar tus propias claves. Para obtener más información sobre cómo configurar una CMEK, consulta Configura la encriptación de mensajes.
Configura las redes
Debes especificar la red y la subred del clúster en la plantilla de Dataflow. La sección Parámetros opcionales de la plantilla te permite definir la red para tus trabajadores de Dataflow.
De forma predeterminada, la plantilla de Dataflow de Kafka a BigQuery aprovisiona trabajadores de Dataflow en la red predeterminada de tu proyecto. Para permitir que tu clúster de Managed Service para Apache Kafka envíe datos a BigQuery a través de Dataflow, asegúrate de que tus trabajadores de Dataflow puedan acceder a la red de tu clúster.
Te recomendamos que, si tu clúster de Kafka no está conectado a una subred en la red predeterminada del proyecto, uses la red predeterminada del proyecto para tu clúster de Kafka.
Para obtener más información sobre cómo configurar redes con tu canalización de Dataflow, consulta los siguientes recursos:
Si tienes problemas para configurar la red de Dataflow, consulta la guía para solucionar problemas de redes de Dataflow.
Configura parámetros opcionales de Dataflow
Configura los parámetros opcionales solo si conoces el impacto de la configuración en los trabajadores de Dataflow. Los parámetros de configuración incorrectos pueden afectar el rendimiento o el costo. Para obtener explicaciones detalladas de cada opción, consulta Parámetros opcionales.
Supervisión
La plantilla de Dataflow para Kafka a BigQuery proporciona una experiencia de supervisión que te permite explorar registros, métricas y errores en la consola. Este paquete de herramientas de supervisión está disponible como parte de la interfaz de usuario de Dataflow.
La pestaña Job Metrics te permite crear paneles personalizados. En el caso de la plantilla de Kafka a BigQuery, recomendamos configurar un panel de Job Metrics que supervise lo siguiente:
Capacidad de procesamiento: Es el volumen de datos que se procesan en cualquier momento. Esto es útil para supervisar el flujo de datos a través de tu trabajo y para identificar posibles problemas de rendimiento.
Para obtener más información, consulta Supervisión de la capacidad de procesamiento de Dataflow.
Actualidad de los datos: Es la diferencia en segundos entre la marca de tiempo del elemento de datos y la hora en que se procesa el evento en tu canalización. Esto ayuda a identificar cuellos de botella en el rendimiento y las fuentes de datos, o bien reintentos frecuentes.
Para obtener más información, consulta Supervisión de la actualidad de los datos de Dataflow.
Tareas pendientes: Cantidad de bytes en espera de procesamiento. Esta información fundamenta las decisiones de ajuste de escala automático.
Para obtener más información sobre la supervisión de Dataflow, consulta la documentación de supervisión de Dataflow.
Soluciona problemas
Si tienes problemas de rendimiento con tu canalización de Dataflow, Dataflow proporciona un conjunto integral de herramientas de diagnóstico y solución de problemas.
A continuación, se incluyen dos situaciones comunes y sus respectivas guías de solución de problemas:
Para obtener una descripción general de la depuración de canalizaciones de Dataflow, consulta Soluciona problemas y depura canalizaciones de Dataflow.
Limitaciones conocidas
La plantilla no admite el paso de credenciales para la autenticación en tu registro de esquema.
Cuando crees el trabajo de Dataflow de Kafka a BigQuery, asegúrate de que el proyecto de Google Cloud esté configurado en el mismo proyecto que contiene el clúster de Managed Service para Apache Kafka.