Este documento es útil si estás considerando migrar de Apache Kafka autoadministrado 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 tener un costo de operación bajo. Pub/Sub Lite ofrece almacenamiento zonal y regional, además de capacidad aprovisionada previamente. En Pub/Sub Lite, puedes elegir temas Lite zonales o regionales. Los temas regionales de Lite ofrecen 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 Pub/Sub Lite, puedes elegir crear un tema de Lite zonal o regional. Los temas regionales de Pub/Sub Lite almacenan datos en dos zonas de una sola región. Los temas zonales de Pub/Sub Lite replican datos dentro de una sola zona.
Reserva. Un grupo con nombre de capacidad de procesamiento que comparten varios 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 en particular. Una suscripción es similar a un grupo de consumidores en Kafka que solo se conecta a un único tema.
Suscriptor. Un cliente de Pub/Sub Lite que recibe mensajes de un tema de Lite y en una suscripción especificada. Una suscripción puede tener varios clientes suscriptores. En ese caso, se balancean las cargas de los mensajes a través de los clientes suscriptores. En Kafka, un suscriptor se denomina consumidor.
Publicador. Una aplicación que crea mensajes y los 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, es un sistema diferente con una API más restringida que se enfoca más en la transferencia de datos. Si bien las diferencias no son materiales para la transferencia y el procesamiento de transmisión, hay algunos casos de uso específicos en los que estas diferencias son importantes.
Kafka como base de datos
A diferencia de Kafka, Pub/Sub Lite no admite en la actualidad la publicación transaccional ni la compactación de registros, aunque se admite la idempotencia. Estas características de Kafka son más útiles cuando lo utilizas como base de datos que como sistema de mensajería. Si usas Kafka como base de datos principalmente, considera ejecutar tu propio clúster de Kafka o usar una solución de Kafka administrada, como Confluent Cloud. Si ninguna de estas soluciones es una opción, también puedes considerar usar una base de datos con escalamiento horizontal, como Cloud Spanner.
Transmisiones de Kafka
Las transmisiones de Kafka son un sistema de procesamiento de datos compilado sobre Kafka. Si bien permite la inserción de clientes consumidores, requiere acceso a todas las operaciones del administrador. Las transmisiones de Kafka también usan las propiedades de base de datos transaccionales para almacenar metadatos internos. Por lo tanto, 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 manera completamente administrada con Dataflow o en tus clústeres preexistentes de Apache Flink y Apache Spark.
Supervisión
Los clientes de Kafka pueden leer las métricas del servidor. En Pub/Sub Lite, las métricas relevantes para el comportamiento de publicadores y suscriptores se administran a través de Cloud Monitoring sin ninguna 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 la replicación, la compactación de claves y el lote determinan la capacidad necesaria para dar servicio a cualquier tema en el clúster de Kafka. La capacidad de procesamiento de un tema de Kafka está limitada por la capacidad de las máquinas en las que se ejecutan los agentes. Por el contrario, debes definir la capacidad de almacenamiento y de 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 en la capacidad de la reserva configurada y los 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 el sistema de IAM. La seguridad está asegurada con encriptación en reposo y en tránsito. Obtén más información sobre la autenticación de Pub/Sub Lite en la sección Flujo de trabajo de migración, más adelante en este documento.
Asigna propiedades de Kafka a propiedades de Pub/Sub Lite
Kafka tiene muchas opciones de configuración que controlan la estructura de temas, los límites y las propiedades del agente. En esta sección, se analizan algunos de los más comunes que son útiles para la transferencia de datos, con sus equivalentes en Pub/Sub Lite. Como Pub/Sub Lite es un sistema administrado, no tienes que considerar muchas propiedades del agente.
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 Lite.
Propiedades de configuración del productor
Pub/Sub Lite es compatible con el protocolo de conexión de Producer. Algunas propiedades cambian el comportamiento de las bibliotecas cliente de Cloud de productor; algunas 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 es compatible con el protocolo de conexión del consumidor. Algunas propiedades cambian el comportamiento de las bibliotecas cliente de Cloud de consumidor; algunas 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 | Sí | Sí |
Anulación de duplicación de mensajes | Sí | Sí, con Dataflow |
Suscripciones de inserción | No | Sí con la exportación de Pub/Sub |
Transacciones | Sí | No |
Almacenamiento de mensajes | Limitada por el almacenamiento de máquina disponible | Ilimitada |
Repetición de mensajes | Sí | Sí |
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 de en Kafka. Los costos de un clúster de Kafka local o en la nube incluyen el costo de las máquinas, el disco, las herramientas de redes, los mensajes entrantes y salientes. También incluye los costos de sobrecarga por administrar y mantener estos 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, luego, implementar la recuperación ante desastres que incluya una planificación y pruebas extensas. Debes agregar todos estos costos para determinar tu verdadero costo total de propiedad (TCO).
Los precios de Pub/Sub Lite incluyen el costo de reserva (bytes publicados, bytes suscritos, bytes administrados por el proxy de Kafka) y el costo del almacenamiento aprovisionado. Pagas exactamente por los recursos que reservas, además de los cargos por mensajes salientes. Puedes usar la calculadora de precios para estimar tus costos.
Flujo de trabajo de migración
Para migrar un tema de un clúster de Kafka a Pub/Sub Lite, sigue estas instrucciones.
Configura recursos de Pub/Sub Lite
Crea una reserva de Pub/Sub Lite para obtener la capacidad de procesamiento esperada de todos los temas que migres.
Usa la calculadora de precios de Pub/Sub Lite para calcular las métricas agregadas de la capacidad de procesamiento de los temas existentes de Kafka. Si quieres obtener más información para crear reservas, consulta Cómo crear y administrar reservas de Lite.
Crear un tema de Pub/Sub Lite para cada tema correspondiente en Kafka
Si quieres obtener más información para crear temas de Lite, consulta Cómo crear y administrar temas de Lite.
Crea una suscripción a Pub/Sub Lite para cada par de temas y grupo de consumidores correspondiente en el clúster de Kafka.
Por ejemplo, para un grupo de consumidores llamado
consumers
que consume detopic-a
ytopic-b
, debes crear una suscripciónconsumers-a
adjunta atopic-a
y una suscripciónconsumers-b
adjunta atopic-b
. Si quieres obtener más información para 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
En el caso de los 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 ejecutas el cliente Kafka, haz lo siguiente:
Instala el paquete
com.google.cloud:pubsublite-kafka-auth
.Obtén los parámetros necesarios para autenticarte en Pub/Sub Lite con la ayuda de
com.google.cloud.pubsublite.kafka.ClientParameters.getParams
.El método
getParams()
(consulta una muestra de código) inicializa las siguientes configuraciones de JAAS y SASL como parámetros para la autenticación en 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 la autenticación OAUTHBEARER solo de configuración que usa una secuencia de comandos de sidecar de Python. Estas versiones incluyen la versión de Java 3.1.0 o posterior de enero de 2022.
Realiza los siguientes pasos en la instancia en la que ejecutas tu cliente de Kafka:
Instala Python 3.6 o una versión superior.
Consulta Instala Python.
Instala el paquete de autenticación de Google:
pip install google-auth
Esta biblioteca simplifica los diversos mecanismos de autenticación de servidor a servidor para acceder a las APIs de Google. Consulta la página de
google-auth
.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 mediante
google.auth.default()
.La principal en las credenciales recuperadas debe tener el permiso
pubsublite.locations.openKafkaStream
para el proyecto de Google Cloud que usas y la ubicación a la que te conectas. Los roles de publicador de Pub/Sub Lite (roles/pubsublite.publisher
) y suscriptor de Pub/Sub Lite (roles/pubsublite.subscriber
) tienen este permiso obligatorio. Agrega estos roles a la principal.Las credenciales se usan en la autenticación SASL/OAUTHBEARER del 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:
Descarga un archivo JSON de claves de cuenta de servicio para la cuenta de servicio que quieres usar para tu cliente.
Codifica el archivo de la cuenta de servicio con la codificación en base64 para usarlo como cadena de autenticación.
En los sistemas Linux o macOS, puedes usar el comando
base64
(que a menudo se instala 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 mediante un clúster de Kafka Connect.
Si deseas configurar el conector para que realice la copia de datos, consulta Conector de Kafka del grupo de Pub/Sub.
Si deseas asegurarte de que la afinidad de partición no se vea afectada por el proceso de migración, asegúrate de que el tema kafka y el tema de Pub/Sub Lite tengan la misma cantidad de particiones, y que la propiedad pubsublite.ordering.mode
esté configurada en KAFKA
. Esto hace que el conector enrute los mensajes a la partición de Pub/Sub Lite con el mismo índice que la partición kafka en la que 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 está asociada con exactamente un tema. Debido a esta diferencia, en cualquier lugar de la API de consumidor de Kafka que requiera que se pase un topic
, se debe pasar la ruta de acceso completa de la suscripción.
Además de la configuración de SASL para el cliente de Kafka, también se requieren las siguientes opciones cuando se usa la API de consumidor de Kafka 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 una suscripción determinada, puedes iniciar (pero no esperes) una operación de búsqueda de administrador para establecer la ubicación inicial de tu consumidor.
Cuando inicias tus consumidores, se vuelven a conectar con el desplazamiento actual en las tareas pendientes de mensajes. Ejecuta los clientes antiguos y nuevos de forma paralela durante la verificación de su comportamiento y, luego, desactiva 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 se requiere como parámetro de productor cuando se usa 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 consumidores del tema para leer desde Pub/Sub Lite, mueve el tráfico de productor para que escriba en Pub/Sub Lite directamente.
Migra de forma gradual 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 para que escriban en Pub/Sub Lite directamente, el conector ya no copia datos.
Puedes desactivar la instancia de Kafka Connect.
Soluciona problemas de conexiones de Kafka
Dado que los clientes de Kafka se comunican a través de 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, establece 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 cantidad de tareas pendientes en aumento. Es posible que una de las razones sea que la capacidad no sea suficiente.
Puedes configurar la capacidad de procesamiento a nivel de tema o mediante reservas. Si se configura una capacidad de procesamiento insuficiente para la suscripción y la publicación, se limita la capacidad de procesamiento correspondiente para la suscripción y la publicación.
Este error de capacidad de procesamiento se indica mediante la métrica topic/flow_control_status
para los publicadores y la métrica subscription/flow_control_status
para los suscriptores. La métrica proporciona los siguientes estados:
NO_PARTITION_CAPACITY
: Este mensaje indica que se alcanzó el límite de capacidad de procesamiento por partición.NO_RESERVATION_CAPACITY
: Este mensaje indica que se alcanzó el límite de capacidad de procesamiento por reserva.
Puedes ver los gráficos de uso de la cuota de publicación y suscripción por tema o reserva, y verificar si el uso es igual o cercano al 100%.
Para resolver este problema, aumenta la capacidad de procesamiento del tema o la reserva.
Mensaje de error de error en la autorización del tema
La publicación con la API de Kafka requiere que el agente de servicio Lite tenga los permisos correctos para publicar en el tema de Pub/Sub Lite.
Si no tienes los permisos adecuados para publicar en el tema de Pub/Sub Lite, recibirás el error TOPIC_AUTHORIZATION_FAILED
en tu cliente.
Para resolver el problema, verifica si el agente de servicio Lite del proyecto pasó 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 a todos los lugares en los que se espera un topic
en la API de consumidor de Kafka.
Recibes el error INVALID_TOPIC_EXCEPTION
en tu cliente consumidor si no pasas una ruta de suscripción con un formato correcto.
Solicitud no válida cuando no se usan reservas
El uso de la compatibilidad con el protocolo de cable Kafka requiere que todos los temas tengan una reserva asociada para cobrar por su uso.