Migra de Kafka a Pub/Sub Lite

Este documento es útil si consideras migrar desde entornos Apache Kafka a Pub/Sub Lite.

Descripción general de Pub/Sub Lite

Pub/Sub Lite es un servicio de mensajería de alto volumen creado para tiene un bajo costo de operación. Pub/Sub Lite ofrece servicios zonales y regionales, junto con la capacidad aprovisionada previamente. En Pub/Sub Lite, Puedes elegir temas Lite zonales o regionales. Oferta de temas regionales de Lite el mismo ANS de disponibilidad que los temas de Pub/Sub. Sin embargo, existen diferencias de confiabilidad entre Pub/Sub y Pub/Sub Lite en términos de replicación de mensajes.

Para obtener más información sobre Pub/Sub y Pub/Sub Lite, consulta Qué es Pub/Sub.

Para obtener más información sobre las regiones y zonas compatibles con Lite, consulta Ubicaciones de Pub/Sub Lite.

Terminología en Pub/Sub Lite

Los siguientes son algunos términos clave para Pub/Sub Lite.

  • Mensaje. Datos que se mueven a través del servicio de Pub/Sub Lite.

  • Tema. Un recurso con nombre que representa un feed de mensajes. En un radio de Pub/Sub Lite, puedes crear un firewall zonal o regional Lite. Los temas regionales de Pub/Sub Lite almacenan datos en dos zonas de una sola región. Temas zonales de Pub/Sub Lite replicar datos en una sola zona.

  • Reserva. Un grupo con nombre de capacidad de procesamiento que comparten varias Temas de Lite en una región.

  • Suscripción: Es un recurso con nombre que representa un interés en recibir mensajes de un tema de Lite específico. Una suscripción es similar a un grupo de consumidores en Kafka que se conecta a un solo tema.

  • Suscriptor. Un cliente de Pub/Sub Lite que recibe mensajes de un tema Lite y una suscripción específica. Una suscripción pueden tener varios clientes suscriptores. En ese caso, los mensajes se y balancear cargas entre los clientes suscriptores. En Kafka, un suscriptor se denomina consumidor.

  • Publicador. Una aplicación que crea mensajes y envía (publica) a un tema de Lite específico. Un tema puede tener varios publicadores. En Kafka, un publicador se denomina productor.

Diferencias entre Kafka y Pub/Sub Lite

Aunque Pub/Sub Lite es conceptualmente similar a Kafka, un sistema diferente con una API más restringida que se enfoca más la transferencia de datos. Si bien las diferencias son irrelevantes para para la transferencia y el procesamiento de transmisiones, hay algunos casos de uso estas diferencias son importantes.

Kafka como base de datos

A diferencia de Kafka, Pub/Sub Lite no es compatible en la actualidad publicación transaccional o compactación de registros, aunque se admite la idempotencia. Estas funciones de Kafka son más útiles cuando usas Kafka como base de datos que como un sistema de mensajería eficaz. Si usas Kafka principalmente como base de datos, considera ejecutar tu propio clúster de Kafka o usar una solución administrada de Kafka, como Confluent Cloud. Si ninguna de estas soluciones es posible, también puedes considerar usar Una base de datos con escalamiento horizontal, como Cloud Spanner

Transmisiones de Kafka

Transmisiones de Kafka es un sistema de procesamiento de datos construido sobre Kafka. Si bien permite inyección de clientes de consumidores, requiere acceso a todos operations. Kafka Streams también usa las propiedades de las bases de datos transaccionales de Kafka para almacenar metadatos internos. Entonces, Pub/Sub Lite no se puede usar actualmente para las aplicaciones de transmisiones de Kafka.

Apache Beam es un sistema de procesamiento de datos de transmisión similar que se integra en Kafka, Pub/Sub y Pub/Sub Lite. Puedes ejecutar canalizaciones de Beam de forma completamente administrada con Dataflow o en tu infraestructura preexistente Apache Flink y Apache Spark.

Supervisar

Los clientes de Kafka pueden leer las métricas del servidor. En Pub/Sub Lite, métricas relevantes para el comportamiento de publicadores y suscriptores mediante Cloud Monitoring sin configuración adicional.

Administración de capacidad

La capacidad de un tema de Kafka se determina según la capacidad del clúster. La configuración de los lotes, la replicación, la compactación de claves y la compactación de claves determinan la capacidad requerida para atender cualquier tema en el clúster de Kafka. La capacidad de procesamiento de un Kafka tema está limitado por la capacidad de las máquinas en las que se están ejecutando. Por el contrario, debes definir el almacenamiento y la capacidad de procesamiento para un tema de Pub/Sub Lite. La capacidad de almacenamiento de Pub/Sub Lite es una propiedad configurable del tema. La capacidad de procesamiento se basa la capacidad de la configuración reserva y límites inherentes o configurados por partición.

Autenticación y seguridad

Apache Kafka admite varios mecanismos abiertos de autenticación y encriptación. Con Pub/Sub Lite, la autenticación se basa en Sistema de IAM. Gracias a la encriptación en reposo, garantiza la seguridad y en tránsito. Obtén más información sobre la autenticación de Pub/Sub Lite en el Más adelante en la sección Flujo de trabajo de migración.

Asigna propiedades de Kafka a propiedades de Pub/Sub Lite

Kafka tiene muchas opciones de configuración que controlan la estructura de temas, límites y propiedades de corredores. Algunos de los más comunes son útiles para la transferencia de datos se analizan en esta sección, con sus equivalentes en Pub/Sub Lite. Como Pub/Sub Lite es un administrado, no debes considerar muchas propiedades de corredores.

Propiedades de configuración de temas

Propiedad Kafka Propiedad de Pub/Sub Lite Descripción
retention.bytes Almacenamiento por partición Todas las particiones de un tema Lite tienen la misma capacidad de almacenamiento configurada. La capacidad de almacenamiento total de un tema Lite es la suma de la capacidad de almacenamiento de todas las particiones del tema.
retention.ms Período de retención de mensajes La cantidad máxima de tiempo durante el cual un tema Lite almacena mensajes. Si no especificas un período de retención de mensajes, el tema Lite almacenará los mensajes hasta que superes la capacidad de almacenamiento.
flush.ms, acks No se puede configurar en Pub/Sub Lite No se confirmarán las publicaciones hasta que se garantice la persistencia en el almacenamiento replicado.
max.message.bytes No se puede configurar en Pub/Sub Lite Se puede enviar 3.5 MiB es el tamaño máximo del mensaje que se puede enviar a Pub/Sub Lite. Los tamaños de los mensajes se calculan de manera repetible.
message.timestamp.type No se puede configurar en Pub/Sub Lite Cuando se usa la implementación para consumidores, se elige la marca de tiempo del evento cuando está presente, o bien se usa la marca de tiempo de publicación. Las marcas de tiempo de publicación y de eventos están disponibles cuando se usa Beam.

Para obtener más información sobre las propiedades del tema Lite, consulta Propiedades de un tema de Lite.

Propiedades de configuración del productor

Pub/Sub Lite admite Protocolo de conexión del productor: Algunas propiedades cambian el comportamiento de las bibliotecas cliente de Cloud de productor. algunos de los más comunes se analizan en la siguiente tabla.

Propiedad Kafka Propiedad de Pub/Sub Lite Descripción
auto.create.topics.enable No se puede configurar en Pub/Sub Lite Crea un tema y una suscripción que sea aproximadamente equivalente a un grupo de consumidores para un solo tema en Pub/Sub Lite. Puedes usar la consola, gcloud CLI, la API o las bibliotecas cliente de Cloud.
key.serializer y value.serializer No se puede configurar en Pub/Sub Lite

Es obligatorio cuando se utiliza Kafka Producer o una biblioteca equivalente que se comunica mediante el protocolo de conexión.

batch.size Compatible con Pub/Sub Lite Se admite la agrupación en lotes. El valor recomendado para este valor es de 10 MiB para obtener el mejor rendimiento.
linger.ms Compatible con Pub/Sub Lite Se admite la agrupación en lotes. El valor recomendado para este valor es de 50 ms para obtener el mejor rendimiento.
max.request.size Compatible con Pub/Sub Lite El servidor impone un límite de 20 MiB por lote. Establece este valor en menos de 20 MiB en tu cliente de Kafka.
enable.idempotence Compatible con Pub/Sub Lite
compression.type No es compatible con Pub/Sub Lite Debes establecer este valor de forma explícita en none.

Propiedades de configuración del consumidor

Pub/Sub Lite admite Protocolo de conexión del consumidor: Algunas propiedades cambian el comportamiento de las bibliotecas cliente de Cloud para consumidores. algunos de los más comunes se analizan en la siguiente tabla.

Propiedad Kafka Descripción
key.deserializer y value.deserializer

Es obligatorio cuando se usa el consumidor de Kafka o la biblioteca equivalente que se comunica mediante el protocolo de conexión.

auto.offset.reset Esta configuración no es compatible o no es necesaria. Se garantiza que las suscripciones tengan una ubicación de compensación definida después de que se crean.
message.timestamp.type La marca de tiempo de publicación siempre está disponible en Pub/Sub Lite y se garantiza que no disminuirá en cada partición. Las marcas de tiempo de los eventos pueden estar presentes o no, según si se adjuntaron al mensaje cuando se publicó. Las marcas de tiempo de publicación y de eventos están disponibles al mismo tiempo cuando se usa Dataflow.
max.partition.fetch.bytes y max.poll.records Impone un límite flexible en la cantidad de registros y bytes que se muestran a partir de las llamadas a sondeo() y la cantidad de bytes que se muestran de las solicitudes de recuperación internas. Es posible que la configuración predeterminada de “max.partition.fetch.bytes” de 1 MiB limite la capacidad de procesamiento de tu cliente. Considera aumentar este valor.

Compara las características de Kafka y Pub/Sub Lite

En la siguiente tabla, se comparan las funciones de Apache Kafka con las de Pub/Sub Lite:

Función Kafka Pub/Sub Lite
Ordenamiento de mensajes
Anulación de duplicación de mensajes Sí, con Dataflow
Suscripciones de inserción No Sí con la exportación de Pub/Sub
Transacciones No
Almacenamiento de mensajes Limitada por el almacenamiento de máquina disponible Ilimitada
Repetición de mensajes
Registro y supervisión Administración automática Automatizado con Cloud Monitoring
Procesamiento de transmisión Sí, con Kafka Streams, Apache Beam o Dataproc Sí, con Beam o Dataproc.

En la siguiente tabla, se compara la funcionalidad que se aloja automáticamente en Kafka y la que administra Google con Pub/Sub Lite:

Función Kafka Pub/Sub Lite
Disponibilidad Implementar Kafka de forma manual en ubicaciones adicionales Implementado en todo el mundo. Consulta las ubicaciones.
Recuperación ante desastres Diseña y mantiene tu propia copia de seguridad y replicación. Administrado por Google.
Administración de la infraestructura Implementa y opera máquinas virtuales (VM) o máquinas de forma manual Mantener un control de versiones y parches coherentes Administrado por Google.
Planificación de la capacidad Planifica de forma manual las necesidades de almacenamiento y procesamiento con anticipación. Administrado por Google. Puedes aumentar el procesamiento y el almacenamiento en cualquier momento.
Asistencia Ninguno. Cuenta con personal de guardia las 24 horas y asistencia disponible.

Comparación de costos de Kafka y Pub/Sub Lite

La forma en que estimas y administras los costos en Pub/Sub Lite es diferente a la de Kafka. Los costos de un clúster de Kafka local o en incluyen el costo de las máquinas, los discos, las redes, los mensajes entrantes y mensajes nuevos. También incluye los gastos generales de administración y mantenimiento los sistemas y la infraestructura relacionada. Cuando administras un clúster de Kafka, debes actualizar las máquinas de forma manual, planificar la capacidad del clúster y implementar la recuperación ante desastres que incluya una planificación y pruebas extensas. Debe sumar todos estos costos para determinar el costo total de propiedad (TCO).

Los precios de Pub/Sub Lite incluyen el costo de la reserva (bytes publicados, bytes suscritos, bytes controlados por el proxy de Kafka) y el costo del almacenamiento aprovisionado. Pagas exactamente por los recursos que reservar, además de los cargos por mensajes salientes. Puedes usar la calculadora de precios para obtener una estimación de tus costos.

Flujo de trabajo de migración

Migrar un tema de un clúster de Kafka a Pub/Sub Lite, sigue estas instrucciones.

Configura recursos de Pub/Sub Lite

  1. Crea un Pub/Sub Lite reservation para la capacidad de procesamiento esperada para todos los temas que estén migrando.

    Usa Pub/Sub Lite calculadora de precios para calcular el valor agregado métricas de capacidad de procesamiento de tus temas de Kafka existentes. Más información sobre cómo crear reservas, consulta Cómo crear y administrar reservas de Lite.

  2. Crear un tema de Pub/Sub Lite por cada tema correspondiente en Kafka.

    Para obtener más información sobre cómo crear temas de Lite, consulta consulta Cómo crear y administrar temas de Lite.

  3. Crea una suscripción a Pub/Sub Lite para cada una de las grupo de consumidores y par de temas en el clúster de Kafka.

    Por ejemplo, para un grupo de consumidores denominado consumers que consume de topic-a y topic-b, debes crear una suscripción consumers-a adjunta a topic-a y una suscripción consumers-b adjunta a topic-b. Para obtener más información sobre cómo crear suscripciones, consulta Cómo crear y administrar suscripciones Lite.

Autentícate en Pub/Sub Lite

Según el tipo de cliente de Kafka, elige uno de los siguientes métodos:

Clientes de Kafka basados en Java versión 3.1.0 o posterior con recompilación

Para clientes de Kafka basados en Java de la versión 3.1.0 o posterior que se pueden volver a compilar en la instancia en la que ejecuta el cliente Kafka:

  1. Instala el paquete com.google.cloud:pubsublite-kafka-auth.

  2. Obtén los parámetros necesarios para autenticarte en Pub/Sub Lite con la ayuda com.google.cloud.pubsublite.kafka.ClientParameters.getParams.

    El método getParams() (consulta el muestra de código ) inicializa lo siguiente JAAS y SASL parámetros de configuración para autenticarse Pub/Sub Lite:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

Clientes de Kafka basados en Java que ejecutan la versión 3.1.0 o una posterior sin tener que volver a compilar

Para los clientes de Kafka que admiten KIP-768, admitimos Autenticación OAUTHBEARER solo de configuración que usa una secuencia de comandos de archivo adicional Python. Estas versiones incluyen el período de enero de 2022 Java 3.1.0 o posterior

Realiza los siguientes pasos en la instancia en la que ejecutas tu cliente de Kafka:

  1. Instala Python 3.6 o una versión superior.

    Consulta Instala Python.

  2. Instala el paquete de autenticación de Google: pip install google-auth

    Esta biblioteca simplifica la autenticación entre servidores mecanismos para acceder a las APIs de Google. Consulta la Página de google-auth.

  3. Ejecuta la secuencia de comandos kafka_gcp_credentials.py.

    Esta secuencia de comandos inicia un servidor HTTP local y recupera las credenciales predeterminadas de Google Cloud. en el entorno con google.auth.default().

    La principal en las credenciales recuperadas debe tener el pubsublite.locations.openKafkaStream permiso para el proyecto de Google Cloud que estás usando y la ubicación con el que te conectas. Publicador de Pub/Sub Lite (roles/pubsublite.publisher) y suscriptor de Pub/Sub Lite (roles/pubsublite.subscriber) roles tienen esta el permiso necesario. Agrega estos roles a tu principal.

    Las credenciales se usan en el Autenticación SASL/OAUTHBEARER para el cliente de Kafka.

    Los siguientes parámetros son obligatorios en tus propiedades para autenticarte en Pub/Sub Lite desde el cliente de Kafka:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    Reemplaza PROJECT_ID por el ID del proyecto que ejecuta Pub/Sub Lite.

Todos los demás clientes sin tener que volver a compilar

Para todos los demás clientes, realiza los siguientes pasos:

  1. Descarga un archivo JSON de claves de cuenta de servicio. de la cuenta de servicio que quieres usar para tu cliente.

  2. Codifica el archivo de la cuenta de servicio con base64-encode como cadena de autenticación.

    En los sistemas Linux o macOS, puedes usar el comando base64. (se instala a menudo de forma predeterminada) de la siguiente manera:

    base64 < my_service_account.json > password.txt
    

    Puedes usar el contenido del archivo de contraseña para la autenticación con los siguientes parámetros.

    Java

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    Reemplaza PROJECT_ID por el ID del proyecto que ejecuta Pub/Sub.

    librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    Reemplaza PROJECT_ID por el ID del proyecto que ejecuta Pub/Sub.

Clona datos con Kafka Connect

El equipo de Pub/Sub Lite mantiene una implementación de un Receptor de conexión de Kafka. Puedes configurar esta implementación para copiar datos de un tema de Kafka a un tema de Pub/Sub Lite con un clúster de Kafka Connect.

Para configurar el conector de modo que realice la copia de los datos, consulta Conector de Kafka del grupo de Pub/Sub.

Si quieres asegurarte de que la afinidad de partición no se vea afectada por la migración asegúrate de que los temas kafka y Pub/Sub Lite tengan los la misma cantidad de particiones y que pubsublite.ordering.mode se configuró como KAFKA. Esto hará que el conector enrute los mensajes a la partición de Pub/Sub Lite con el mismo índice que la partición kafka donde se publicaron originalmente.

Migra a los consumidores

El modelo de recursos de Pub/Sub Lite es diferente al de Kafka. En particular, A diferencia de un grupo de consumidores, una suscripción es un recurso explícito y es asociados con exactamente un tema. Debido a esta diferencia, cualquier lugar del API de consumidor de Kafka que requiere que se pase un topic, la suscripción completa en su lugar, se debe pasar la ruta de acceso.

Además de la configuración de SASL para el cliente de Kafka, los siguientes parámetros de configuración también son obligatorios cuando usas la API de Kafka Consumer para interactuar con Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

Reemplaza REGION por la región en la que existe tu suscripción a Pub/Sub Lite.

Antes de iniciar el primer trabajo de consumidor de Pub/Sub Lite para un determinado puedes iniciar (pero no esperar) un administrador de búsqueda para establecer la ubicación inicial de para tu consumidor.

Cuando inicias tus consumidores, estos se vuelven a conectar a la compensación actual en la lista de mensajes pendientes. Puedes ejecutar la versión anterior clientes nuevos en paralelo el tiempo que sea necesario para verificar su comportamiento y luego dar de baja a los clientes consumidores antiguos.

Migra a los productores

Además de la configuración de SASL para el cliente de Kafka, lo siguiente también es necesario como parámetro de productor cuando se usa el La API de Kafka Producer para interactuar con Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

Reemplaza REGION por la región en la que existe el tema de Pub/Sub Lite.

Después de migrar todos los usuarios del tema para que lean de Pub/Sub Lite, mover el tráfico de productor para escribir directamente a Pub/Sub Lite.

Migrar gradualmente los clientes productores para que escriban en el tema de Pub/Sub Lite en lugar del tema de Kafka.

Reinicia los clientes productores para recoger configuraciones nuevas.

Desactiva Kafka Connect

Después de migrar todos los productores en los que se escribirán Pub/Sub Lite directamente, el conector ya no copia datos.

Puedes desactivar la instancia de Kafka Connect.

Soluciona problemas de conexiones de Kafka

Los clientes de Kafka se comunican con un protocolo de cable personalizado no podemos proporcionar mensajes de error para las fallas en todas las solicitudes. Confía en los códigos de error que se envían como parte del mensaje.

Para ver más detalles sobre los errores que ocurren en el cliente, consulta Estableciendo el nivel de registro del prefijo org.apache.kafka en FINEST.

Baja capacidad de procesamiento y trabajo pendiente en aumento

Existen varios motivos por los que podrías ver una capacidad de procesamiento baja y una lista cada vez mayor. Es posible que una de las razones sea que la capacidad no sea suficiente.

Puedes configurar la capacidad de procesamiento a nivel del tema o mediante mediante reservas. Si la capacidad de procesamiento de las suscripciones y publicación se configura, la capacidad de procesamiento correspondiente para la opción para suscribirse y publicar está limitada.

El error en la capacidad de procesamiento se indica Métrica de topic/flow_control_status para los editores, y subscription/flow_control_status para los suscriptores. La métrica proporciona los siguientes estados:

  • NO_PARTITION_CAPACITY: Este mensaje indica que la base de datos por partición y se alcance el límite de capacidad de procesamiento.

  • NO_RESERVATION_CAPACITY: Este mensaje indica que el modelo por reserva y se alcance el límite de capacidad de procesamiento.

Puedes ver los gráficos de uso del tema o la reserva la cuota de publicación y suscripción, y comprueba si el uso está cerca del 100%.

Para resolver este problema, aumenta el de procesamiento de la tema o reserva.

Mensaje de error de error en la autorización del tema

Para publicar con la API de Kafka, el agente de servicio Lite debe tener los permisos correctos para publicar en el tema de Pub/Sub Lite.

Recibes el error TOPIC_AUTHORIZATION_FAILED en tu cliente en el evento. que no tienes los permisos correctos para publicar Tema de Pub/Sub Lite.

Para resolver el problema, verifica si se aprobó el agente de servicio de Lite para el proyecto en la configuración de Auth.

Mensaje de error de tema no válido

Para suscribirse con la API de Kafka, se debe pasar la ruta de acceso completa de la suscripción Todos los lugares en los que se espera una topic en la API de consumidor de Kafka

Si no lo ves, recibes el error INVALID_TOPIC_EXCEPTION en tu cliente consumidor pasar una ruta de suscripción con un formato correcto.

Solicitud no válida cuando no se usan reservas

Para usar la compatibilidad con el protocolo de cable Kafka, es necesario que todos los temas tengan un reserva para cobrar por el uso.