En este documento, se describe cómo configurar la exportación automática Mensajes de Pub/Sub Lite a Pub/Sub.
Estas son algunas situaciones en las que podrías usar esta función:
- Interoperar entre cargas de trabajo que usan una combinación de Pub/Sub Lite y Pub/Sub.
- Migra una carga de trabajo de Pub/Sub Lite a Pub/Sub.
- Usar funciones avanzadas de Pub/Sub, como suscripciones de envío y filtrado de una aplicación existente basada en Pub/Sub Lite.
- Consolidar múltiples canalizaciones de datos
Descripción general
Para exportar mensajes de Pub/Sub Lite a Pub/Sub, sigue estos pasos: debes crear un tipo especial de suscripción llamado suscripción de exportación. Los suscripción de exportación recibe mensajes de un tema Lite y los convierte en de Pub/Sub y envía los mensajes convertidos a un tema de Pub/Sub de destino.
Un tema Lite puede tener una combinación de suscripciones de exportación y suscripciones. Los dos tipos de suscripción son idénticos en términos de uso de la cuota y cantidad de reservas por segundo. Una suscripción de exportación consume la capacidad de procesamiento de la suscripción Lite y se cobra por Capacidad de procesamiento de publicación de Pub/Sub.
Una suscripción de exportación conecta un tema Lite a uno solo Tema de Pub/Sub. Sin embargo, un tema Lite puede tener varias exportaciones Suscripciones que se conectan a diferentes temas de Pub/Sub (arquitectura de distribución). También puedes exportar desde varios temas de Lite a la mismo tema de Pub/Sub (arquitectura de fan-in).
Autenticación
Una suscripción de exportación accede a Pub/Sub Lite y recursos de Pub/Sub. Para crear una suscripción de exportación, necesitas la siguientes permisos:
pubsublite.subscriptions.create
Los siguientes roles predefinidos contienen permiso:roles/pubsublite.admin
roles/pubsublite.editor
Consulta Control de acceso para Pub/Sub Lite.
pubsub.topics.get
Los siguientes roles predefinidos contienen este permiso:roles/pubsub.admin
roles/pubsub.editor
roles/pubsub.viewer
Consulta Control de acceso para Pub/Sub.
Agentes de servicio
Una suscripción de exportación publica en un tema de Pub/Sub en tu nombre. Para ello, usa un agente de servicio.
Después de crear la primera suscripción de exportación en un proyecto, se crea
El agente de servicio de Pub/Sub Lite se crea automáticamente. Si
crear suscripciones de exportación adicionales en el mismo proyecto, usan el mismo
agente de servicio. El agente de servicio tiene el siguiente esquema de nombres: service-<your_project_number>@gcp-sa-pubsublite.iam.gserviceaccount.com
.
El agente de servicio se crea con permisos para publicar en todos
Los temas de Pub/Sub y Pub/Sub Lite dentro del mismo
proyecto como la suscripción de exportación. Si tu destino de Pub/Sub
está en un proyecto diferente al de la suscripción de exportación, debes otorgar
permisos adicionales al agente de servicio agregando el rol Publicador de Pub/Sub
(roles/pubsub.publisher
). Puedes otorgar permisos para todo un proyecto o
un tema individual. Recomendamos otorgar permisos a nivel del tema
de acuerdo con el principio de privilegio mínimo.
Para obtener más información, consulta
Controla el acceso a través de la consola de Google Cloud.
También puedes usar
gcloud projects add-iam-policy-binding
para agregar roles de IAM:
gcloud pubsub topics add-iam-policy-binding TOPIC_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsublite.iam.gserviceaccount.com --role=roles/pubsub.publisher
Reemplaza lo siguiente:
- TOPIC_NAME: Es el nombre del Pub/Sub de destino. para agregar la vinculación de política de IAM.
- PROJECT_NUMBER: Es el número del proyecto de la Proyecto de suscripción de exportación de Pub/Sub Lite.
Crea una suscripción de exportación
Puedes crear una suscripción de exportación Lite con la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub Lite.
Una suscripción de exportación de Lite debe estar en el mismo proyecto y la misma ubicación que la de Lite tema al que está adjunto. Para crear el tema Lite, consulta Crea y administra temas de Lite.
Si adjuntas una suscripción de exportación a un tema Lite, asegúrate de que todas mensajes publicados en el tema Lite son compatibles con Pub/Sub. Para obtener más información, consulta Compatibilidad con mensajes.
Una vez creada, no puedes cambiar una suscripción de exportación a un suscripción estándar o viceversa.
Console
Ve a la página Suscripciones Lite.
Haz clic en Crear suscripción Lite.
Ingresa un ID de suscripción Lite.
Selecciona un tema de Lite para recibir mensajes.
Selecciona Enviar mensajes inmediatamente o Enviar mensajes después de almacenado.
Elige un tipo de Compensación inicial.
Selecciona Exportar al tema de Pub/Sub.
En la lista Tema de destino, elige un tema de Pub/Sub para para recibir los mensajes Lite exportados.
Opcional. Especifica un tema de mensajes no entregados.
- Selecciona la casilla de verificación Habilitar mensajes no entregados.
- Selecciona un tema de Lite para usarlo como tema de mensajes no entregados o haz clic en Crear tema de Lite para crear uno nuevo. El tema de buzón de destino debe estar en la misma ubicación (zona o región) y proyecto que la suscripción de exportación.
Haz clic en Crear.
gcloud
Para crear una suscripción de exportación, usa el
gcloud pubsub lite-subscriptions create
:
gcloud pubsub lite-subscriptions create SUBSCRIPTION_ID \ --location=LOCATION \ --topic=TOPIC_ID \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Reemplaza lo siguiente:
- SUBSCRIPTION_ID: Es el ID de la suscripción Lite que se creará.
- LOCATION: Es la ubicación de Lite. suscripción.
- TOPIC_ID: Es el ID del tema Lite que se adjuntará a Lite. suscripción.
- PUBSUB_TOPIC_NAME: Es el nombre del tema de Pub/Sub que se va a usar.
exportar. Especifica el nombre completo si el tema está en un proyecto diferente:
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID: Opcional El ID de un tema de Lite que se usará como tema de mensajes no entregados. El tema de mensajes no entregados debe estar en la misma ubicación (zona o región) y el mismo proyecto que la suscripción de exportación.
- DESIRED_STATE: Opcional Es el estado inicial de la suscripción.
Se admiten los siguientes valores:
active
: La suscripción exporta los mensajes Lite a Pub/Sub (predeterminado)paused
: Se suspendió la exportación de mensajes Lite.
Si la solicitud es exitosa, la línea de comandos muestra una confirmación:
Created [SUBSCRIPTION_ID].
Protocolo
Para crear una suscripción a la exportación Lite, envía una solicitud POST
como la siguiente:
POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
Reemplaza lo siguiente:
- REGION: Es la región en la que se almacenará la suscripción Lite.
- PROJECT_NUMBER: Es el número del proyecto que se creará. Ya está disponible la suscripción Lite.
- LOCATION: Es el nombre de una ubicación en la que Pub/Sub Lite. admite.
- SUBSCRIPTION_ID: Es el ID de la suscripción Lite.
Especifica los siguientes campos en el cuerpo de la solicitud:
{ "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Reemplaza lo siguiente:
- DELIVERY_REQUIREMENT: Es el requisito de entrega, que puede ser
DELIVER_AFTER_STORED
oDELIVER_IMMEDIATELY
. - DESIRED_STATE: Es el estado inicial de la suscripción. El
se admiten los siguientes valores:
ACTIVE
: La suscripción exporta los mensajes Lite a Pub/SubPAUSED
: Se suspendió la exportación de mensajes Lite.
- DEAD_LETTER_TOPIC_ID: Es el ID de un tema de Lite existente que se usará. como un tema de mensajes no entregados. El tema debe estar en la misma posición (zona o región) y proyecto que la suscripción de exportación.
- PUBSUB_TOPIC_NAME: Es el nombre del tema de Pub/Sub que se va a enviar.
exportar. Formato de ejemplo:
projects/my-project-id/topics/my-topic-id
.
Si la solicitud es exitosa, la respuesta es la suscripción Lite en formato JSON:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Comienza a usarlo
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.
Python
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.
Actualiza una suscripción de exportación
Puedes actualizar las suscripciones Lite con la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub Lite. La nueva configuración puede demorar hasta 30 segundos en aplicarse.
Console
Ve a la página Suscripciones Lite.
Haz clic en el ID de suscripción Lite.
En la página Detalles de la suscripción Lite, haz clic en Editar.
gCloud
Para actualizar una suscripción Lite, usa el comando gcloud pubsub lite-subscriptions update
:
gcloud pubsub lite-subscriptions update SUBSCRIPTION_ID \ --location=LOCATION \ --delivery-requirement=DELIVERY_REQUIREMENT \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Reemplaza lo siguiente:
- SUBSCRIPTION_ID: El ID de la suscripción Lite
- LOCATION: Es la ubicación de la suscripción a Lite.
- DELIVERY_REQUIREMENT: Opcional El requisito de entrega, ya sea
deliver-after-stored
odeliver-immediately
. - PUBSUB_TOPIC_NAME: Opcional Es el nombre del tema de Pub/Sub al que se exportará. Especifica el nombre completo si el tema está en otro proyecto:
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID: Es el ID de un tema de Lite existente que se usará. como un tema de mensajes no entregados. El tema debe estar en el mismo su ubicación (zona o región) y el proyecto como la suscripción de exportación.
- DESIRED_STATE: Opcional El estado deseado de la suscripción.
Se admiten los siguientes valores:
active
: La suscripción exporta los mensajes Lite a Pub/Sub (predeterminado)paused
: Se suspendió la exportación de mensajes Lite.
Si la solicitud es exitosa, la línea de comandos muestra el tema de Lite:
Updated subscription [SUBSCRIPTION_ID]. deliveryConfig: deliveryRequirement: DELIVERY_REQUIREMENT exportConfig: currentState: DESIRED_STATE deadLetterTopic: projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID desiredState: DESIRED_STATE pubsubConfig: topic: PUBSUB_TOPIC_NAME name: projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID topic: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID
Protocolo
Para actualizar una suscripción Lite, envía una solicitud PATCH
como la siguiente:
PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID?updateMask=deliveryConfig.deliveryRequirement,exportConfig Authorization: Bearer $(gcloud auth print-access-token)
Reemplaza lo siguiente:
- REGION: Es la región en la que se creó la suscripción Lite.
- PROJECT_NUMBER: Es el número de proyecto en el que se encuentra el Lite se creó la suscripción.
- LOCATION: Es la ubicación donde se creó la suscripción Lite.
- SUBSCRIPTION_ID: Es el ID de la suscripción Lite.
Especifica los siguientes campos en el cuerpo de la solicitud:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Reemplaza lo siguiente:
- DELIVERY_REQUIREMENT: El requisito de entrega, ya sea
DELIVER_AFTER_STORED
oDELIVER_IMMEDIATELY
. - DESIRED_STATE: Es el estado deseado de la suscripción. El
se admiten los siguientes valores:
ACTIVE
: La suscripción exporta los mensajes Lite a Pub/SubPAUSED
: Se suspendió la exportación de mensajes Lite.
- DEAD_LETTER_TOPIC_ID: Es el ID de un tema de Lite existente que se usará. como un tema de mensajes no entregados. El tema debe estar en la misma posición (zona o región) y proyecto que la suscripción de exportación.
- PUBSUB_TOPIC_NAME: Es el nombre del destino.
Tema de Pub/Sub. Formato de ejemplo:
projects/my-project-id/topics/my-topic-id
Si la solicitud es exitosa, la respuesta es la suscripción Lite en formato JSON:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Cómo pausar o iniciar una suscripción a exportaciones
Las suscripciones de exportación tienen una configuración llamada estado deseado, que incluye una de dos valores:
- Activa: La suscripción exporta mensajes Lite a Pub/Sub.
- Pausado: Se suspendió la exportación de mensajes Lite.
Para cambiar el estado deseado en la consola de Google Cloud, sigue estos pasos:
Ve a la página Suscripciones Lite.
Haz clic en el ID de suscripción Lite.
En la página Detalles de suscripción Lite, haz clic en Pausar o Iniciar.
También puedes actualizar el estado deseado con Google Cloud CLI o la API de Pub/Sub Lite. Consulta Cómo actualizar una suscripción de exportación.
Prácticas recomendadas
En esta sección, se describen algunas prácticas recomendadas para usar suscripciones de exportación.
Reservas
Recomendamos usar una suscripción de exportación con una reservation, en lugar de configurar explícitamente la capacidad de procesamiento de la suscripción.
Compatibilidad de mensajes
Si un mensaje de Pub/Sub Lite no es compatible con Pub/Sub, la suscripción de exportación no publica el mensaje en Pub/Sub En su lugar, coloca el mensaje en el tema de mensajes no entregados, si se asignó uno. Si no se asignó ningún tema de mensajes no entregados, es incompatible los mensajes se descartan.
Cuando publiques mensajes en el tema Lite, ten en cuenta los siguientes problemas de compatibilidad:
Claves. Las claves de Pub/Sub Lite tienen el tipo
bytes
, mientras que las claves de ordenamiento de Pub/Sub son del tipostring
. Para ser compatible, el La clave de Pub/Sub Lite solo debe contener caracteres UTF-8.Atributos. Los atributos de los mensajes tienen los siguientes requisitos:
- Para que sean compatibles, todos los atributos de mensajes de Pub/Sub Lite debe tener un solo valor. Pub/Sub Lite admite las operaciones de atributos con varios valores, pero Pub/Sub solo admite atributos de valor único.
- Los atributos del mensaje no deben exceder la Límites de mensajes de Pub/Sub, incluidos los atributos máximos por mensaje y el tamaño máximo de clave y valor por .
Tema de mensajes no entregados
Para retener y manejar los mensajes incompatibles, recomendamos usar un mensaje no entregado en este tema. Puedes asignar un tema de mensajes no entregados cuando crees la exportación suscripción o puedes actualizar una suscripción de exportación existente para usar una de tema de mensajes no entregados. Si la suscripción recibe un mensaje que no es compatible con Pub/Sub, publica el mensaje en el tema de mensajes no entregados.
Un tema de mensajes no entregados es un tema normal de Pub/Sub Lite. Debe estar en la misma ubicación y proyecto que la suscripción de exportación, y debe ser un tema diferente del tema de origen.
Por lo general, los tema de mensajes no entregados tienen un bajo uso de la capacidad de procesamiento. Por lo tanto, se recomienda asignar una reserva al tema de mensajes no entregados, en lugar de asignar capacidad de procesamiento al tema.
Errores de entrega
Una suscripción de exportación intenta entregar todos los mensajes compatibles al
tema de Pub/Sub de destino. Si falla la entrega del mensaje, la exportación
se suspende la suscripción. Para encontrar la categoría del error, consulta la
subscription/export_status
métrica. Los siguientes valores indican un error:
PERMISSION_DENIED
: No tienes permisos suficientes para exportar mensajes.NOT_FOUND
: no se encontraron uno o más recursos. por ejemplo, el destino el tema no existe.
Para obtener más información sobre la solución de problemas, consulta Soluciona problemas relacionados con suscripciones de exportación.
Después de resolver el error, se reiniciará automáticamente la suscripción de exportación debido a reintentos periódicos.
Precios
Se te cobra por Pub/Sub Lite y Pub/Sub que consume la suscripción de exportación. Específicamente, se te cobra para la capacidad de procesamiento de la suscripción asignada y el almacenamiento en el suscripción a Pub/Sub Lite, que se configuran para el Tema de Pub/Sub Lite. También se te cobra por publicar en las tema de Pub/Sub de destino. Consulta Precios de Pub/Sub.
No se aplican cargos adicionales por usar la función de exportación ni se aplica diferencia de precios entre las suscripciones de exportación de Pub/Sub Lite y las suscripciones estándar.
Soluciona problemas relacionados con las suscripciones de exportación
En esta sección, se describen algunas sugerencias para solucionar problemas relacionados con suscripciones de exportación.
Se pausó la suscripción de exportación
Si se pausa la suscripción, no se exportará ningún mensaje.
Para detectar este problema, haz lo siguiente:
Consola de Google Cloud: Mira el detalles de la suscripción. Si la suscripción esté detenida, el Estado deseado y el Estado actual son
Paused
.Métricas: La métrica
subscription/export_status
esPAUSED
.
Para resolver este problema, iniciar la suscripción
Se borró el tema de destino o de tema de mensajes no entregados
Si borras el tema de Pub/Sub adjunto a una suscripción de exportación o el tema de mensajes no entregados, se producirá un error.
Para detectar este problema, haz lo siguiente:
Consola de Google Cloud: Consulta los detalles de la suscripción. Si el tema era el Estado actual es
Not found
.Métricas: La métrica
subscription/export_status
Si el tema era se borró, el valor esNOT_FOUND
.
Para resolver este problema, verifica el tema de Pub/Sub de destino y el tema de mensajes no entregados (si había uno configurado).
Si se borró el Pub/Sub de destino, vuelve a crear el tema con con el mismo nombre. La suscripción de exportación reanuda la publicación, siempre que se cumpla permisos no cambiaron.
Si se borró el tema de mensajes no entregados, crea uno nuevo y actualízalo la suscripción de exportación para hacer referencia a él.
Mensajes incompatibles
Si los mensajes no son compatibles con Pub/Sub, no se exportan.
Para detectar este problema, haz lo siguiente:
- Métricas: La métrica
subscription/unexportable_message_count
muestra el recuento. de mensajes incompatibles que no se pudieron exportar.
Para resolver este problema, usa un tema de mensajes no entregados para retener los mensajes incompatibles. Examina los mensajes para determinar la causa y, luego, transformarlos y volver a publicarlos si es necesario. Consulta Compatibilidad con mensajes.
La exportación se limita
Para detectar este problema, haz lo siguiente:
- Métricas: La métrica
subscription/flow_control_status
muestra un control de flujo deNO_CLIENT_TOKENS
, que indica que el límite por partición de los bytes o mensajes pendientes. Hasta que se resuelva el problema, aumentarán las tareas pendientes para las suscripciones de exportación asociadas.
Este error tiene varias causas raíz posibles. La mayoría de las causas posibles ocurren en el backend, pero verifica lo siguiente:
- Asegúrate de publicar mensajes Lite que compartan la misma clave a una velocidad menor de 1 MiB/s por clave. La suscripción de exportación escribe claves de mensajes Lite como claves de ordenamiento de Pub/Sub, y Pub/Sub tiene un límite de 1 MiB/s en cada clave de ordenamiento. Superar esto límite pueden causar una limitación.
El usuario no está autorizado a realizar esta acción
El agente de servicio de Pub/Sub Lite debe tener permisos para publicar en el tema de destino de Pub/Sub.
Para detectar este problema, haz lo siguiente:
Consola de Google Cloud: Mira el detalles de la suscripción. Si hay permisos, el Estado actual es
Permission denied
.Métricas: La métrica
subscription/export_status
esPERMISSON_DENIED
.
Por ejemplo, las siguientes situaciones pueden causar este error:
- Al agente de servicio de Pub/Sub Lite le falta el permiso correcto o rol para publicar mensajes en el tema de Pub/Sub de destino en un proyecto diferente.
- Se quitó el agente de servicio de la política de IAM del proyecto superior de la suscripción de exportación.
- El agente de servicio de Pub/Sub Lite aún se está configurando. Un agente de servicio se crea automáticamente cuando creas la primera suscripción de exportación en un proyecto. El error de permiso debería resolverse automáticamente en un plazo de 10 minutos.
Para resolver el problema, verifica si se le otorgó al agente de servicio el permiso o rol. Consulta Agentes de servicio.
¿Qué sigue?
Elige entre Pub/Sub o Pub/Sub Lite.