Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Crea y administra temas Lite

En esta página, se explica cómo crear, ver y borrar temas de Lite.

Los temas de Lite son recursos zonales en los que puedes publicar mensajes. Cuando creas un tema de Lite, debes especificar una zona en la que almacenar los mensajes.

Después de crear un tema de Lite, puedes publicar mensajes en el tema de Lite, crear una suscripción de Lite al tema de Lite y recibir mensajes de la suscripción a Lite.

Crea temas de Lite

Cuando creas un tema de Lite, debes configurar su capacidad de procesamiento y almacenamiento. La cantidad y la capacidad de las particiones determinan la capacidad de un tema de Lite.

Los temas de Lite tienen las siguientes propiedades:

  • Cantidad de particiones: La cantidad de particiones en el tema de Lite.
  • Almacenamiento por partición: La cantidad de almacenamiento, en bytes, para cada partición. Puedes especificar entre 30 GiB-10 TiB de almacenamiento.
  • Capacidad de procesamiento de la publicación: La capacidad de procesamiento máxima de publicación de cada partición. Puedes especificar de 4 a 16 MiB por segundo de capacidad de capacidad de procesamiento, y el valor debe ser un número entero. Para obtener mejores resultados, crea un tema de Lite con la capacidad de procesamiento mínima de publicación. Si el tráfico aumenta, actualiza el tema de Lite y aumenta la capacidad de procesamiento de la publicación.
  • Suscripción a la capacidad de procesamiento: la capacidad de procesamiento máxima de suscripción de cada partición. Puedes especificar de 4 a 32 MiB por segundo de capacidad de capacidad de procesamiento, y el valor debe ser un número entero.

  • Período de retención de mensajes: la cantidad máxima de tiempo que un tema de Lite almacena mensajes. Si no especificas un período de retención de mensajes, el tema de Lite almacenará los mensajes hasta que excedas la capacidad de almacenamiento.

Puedes crear temas de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en Crear tema de Lite.

  3. Selecciona una región y una zona en la región.

  4. En la sección Nombre, ingresa un ID de tema de Lite. El nombre del tema de Lite incluye el ID del tema de Lite, la zona y el número del proyecto.

  5. En la sección Capacidad de procesamiento, ingresa la cantidad de particiones que se aprovisionarán para la partición.

  6. En la sección Message storage, ingresa el Storage per partition.

  7. Opcional: En la sección Message retention, selecciona Drop messages after the specified duration even if storage is available y, luego, ingresa el período de retención.

  8. Haga clic en Crear.

gcloud

Para crear un tema de Lite, usa el comando gcloud pubsub lite-topics create:

gcloud pubsub lite-topics create TOPIC_ID \
  --zone=ZONE \
  --partitions=NUMBER_OF_PARTITIONS \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  [--message-retention-period=MESSAGE_RETENTION_PERIOD]

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: Es el nombre de una zona compatible con Pub/Sub Lite

  • NUMBER_OF_PARTITIONS: un número entero para la cantidad de particiones en el tema de Lite

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud es exitosa, la línea de comandos muestra una confirmación:

Created [TOPIC_ID].

Protocolo

Para crear un tema de Lite, envía una solicitud POST como la siguiente:

POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

Reemplaza lo siguiente:

  • NUMBER_OF_PARTITIONS: un número entero para la cantidad de particiones en el tema de Lite

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

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.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func createTopic(w io.Writer, projectID, region, zone, topicID string) error {
	// projectID := "my-project-id"
	// region := "us-central1" // see https://cloud.google.com/pubsub/lite/docs/locations
	// zone := "us-central1-a"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %v", err)
	}
	defer client.Close()

	const gib = 1 << 30
	// For ranges of fields in TopicConfig, see https://pkg.go.dev/cloud.google.com/go/pubsublite/#TopicConfig
	topic, err := client.CreateTopic(ctx, pubsublite.TopicConfig{
		Name:                       fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, zone, topicID),
		PartitionCount:             2, // Must be >= 1 and cannot decrease after creation.
		PublishCapacityMiBPerSec:   4,
		SubscribeCapacityMiBPerSec: 8,
		PerPartitionBytes:          30 * gib,
		RetentionDuration:          pubsublite.InfiniteRetention,
	})
	if err != nil {
		return fmt.Errorf("client.CreateTopic got err: %v", err)
	}
	fmt.Fprintf(w, "Created topic: %s\n", topic.Name)
	return nil
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig;
import com.google.cloud.pubsublite.proto.Topic.RetentionConfig;
import com.google.protobuf.util.Durations;

public class CreateTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");
    int partitions = 1;

    createTopicExample(cloudRegion, zoneId, projectNumber, topicId, partitions);
  }

  public static void createTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId, int partitions)
      throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set throughput capacity per partition in MiB/s.
                    .setCapacity(
                        PartitionConfig.Capacity.newBuilder()
                            // Must be 4-16 MiB/s.
                            .setPublishMibPerSec(4)
                            // Must be 4-32 MiB/s.
                            .setSubscribeMibPerSec(8)
                            .build())
                    .setCount(partitions))
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // How long messages are retained.
                    .setPeriod(Durations.fromDays(1))
                    // Set storage per partition to 30 GiB. This must be 30 GiB-10 TiB.
                    // If the number of bytes stored in any of the topic's partitions grows
                    // beyond this value, older messages will be dropped to make room for
                    // newer ones, regardless of the value of `period`.
                    .setPerPartitionBytes(30 * 1024 * 1024 * 1024L))
            .setName(topicPath.toString())
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic response = adminClient.createTopic(topic).get();
      System.out.println(response.getAllFields() + "created successfully.");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import AlreadyExists
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath
from google.protobuf.duration_pb2 import Duration

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"
# num_partitions = 1

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # A topic must have at least one partition.
        count=num_partitions,
        # Set throughput capacity per partition in MiB/s.
        capacity=Topic.PartitionConfig.Capacity(
            # Set publish throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 16.
            publish_mib_per_sec=4,
            # Set subscribe throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 32.
            subscribe_mib_per_sec=8,
        ),
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 30 GiB. This must be in the range 30 GiB-10TiB.
        # If the number of byptes stored in any of the topic's partitions grows beyond
        # this value, older messages will be dropped to make room for newer ones,
        # regardless of the value of `period`.
        per_partition_bytes=30 * 1024 * 1024 * 1024,
        # Allow messages to be retained for 7 days.
        period=Duration(seconds=60 * 60 * 24 * 7),
    ),
)

client = AdminClient(cloud_region)
try:
    response = client.create_topic(topic)
    print(f"{response.name} created successfully.")
except AlreadyExists:
    print(f"{topic_path} already exists.")

Para obtener una lista de las zonas disponibles, consulta Ubicaciones de Pub/Sub Lite.

Después de crear el tema Lite, puedes escalar la capacidad de procesamiento por partición y la capacidad de almacenamiento. También puedes aumentar, pero no disminuir la cantidad de particiones. Para obtener más información, consulta Capacidad de escalamiento.

Aprovisiona capacidad

Los temas de Lite consisten en particiones. Una partición admite la siguiente capacidad:

  • Capacidad de procesamiento de publicación: La tasa total máxima a la que puedes publicar mensajes.
  • Capacidad de procesamiento de suscripción: la tasa total máxima a la que los mensajes se reenvían a las suscripciones de Lite.
  • Almacenamiento: el tamaño total máximo de los mensajes en la partición.

Si excedes la capacidad de almacenamiento, el servicio de Pub/Sub Lite nunca falla. En su lugar, quita el mensaje más antiguo de la partición, sin importar el período de retención del mensaje para el mensaje más antiguo. El servicio de Pub/Sub Lite quita los mensajes en función del "mejor esfuerzo".

Para obtener información sobre cómo se relaciona la capacidad con los precios, consulta Precios de Pub/Sub Lite.

Actualiza temas de Lite

Puedes actualizar el período de retención de mensajes y escalar la capacidad de un tema de Lite. No puedes actualizar la zona de un tema. Para escalar la capacidad de un tema de Lite, consulta Capacidad de escalamiento.

Puedes actualizar un tema de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

  3. Haz clic en Edit.

  4. Ingresa el Número de particiones. Esto puede aumentar, pero no disminuir.

  5. Ingresa el Almacenamiento por partición y el Período de retención.

  6. Selecciona una capacidad de procesamiento de publicación.

  7. Selecciona una capacidad de procesamiento de suscripción.

  8. Ingresa el Almacenamiento por partición.

gcloud

Para actualizar un tema de Lite, usa el comando gcloud pubsub lite-topics update:

gcloud pubsub lite-topics update TOPIC_ID \
  --zone=ZONE \
  --partitions=NUMBER_OF_PARTITIONS \
  --per-partition-publish-mib=PUBLISHING_CAPACITY \
  --per-partition-subscribe-mib=SUBSCRIBING_CAPACITY \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  --message-retention-period=MESSAGE_RETENTION_PERIOD

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • NUMBER_OF_PARTITIONS: la cantidad de particiones que se deben configurar para el tema de Lite.

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud es exitosa, la línea de comandos muestra el tema de Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocolo

Para actualizar un tema de Lite, envía una solicitud PATCH como la siguiente:

PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID?updateMask=partitionConfig.capacity,retentionConfig.perPartitionBytes,retentionConfig.period,partitionConfig.count
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Reemplaza lo siguiente:

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

  • NUMBER_OF_PARTITIONS: la cantidad de particiones que se deben configurar para el tema de Lite.

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

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.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/pubsublite"
)

func updateTopic(w io.Writer, projectID, region, zone, topicID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// zone := "us-central1-a"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %v", err)
	}
	defer client.Close()

	topicPath := fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, zone, topicID)
	// For ranges of fields in TopicConfigToUpdate, see https://pkg.go.dev/cloud.google.com/go/pubsublite/#TopicConfigToUpdate
	config := pubsublite.TopicConfigToUpdate{
		Name:                       topicPath,
		PartitionCount:             3, // Partition count cannot decrease.
		PublishCapacityMiBPerSec:   8,
		SubscribeCapacityMiBPerSec: 16,
		PerPartitionBytes:          60 * 1024 * 1024 * 1024,
		RetentionDuration:          24 * time.Hour,
	}
	updatedCfg, err := client.UpdateTopic(ctx, config)
	if err != nil {
		return fmt.Errorf("client.UpdateTopic got err: %v", err)
	}
	fmt.Fprintf(w, "Updated topic: %#v\n", *updatedCfg)
	return nil
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig;
import com.google.cloud.pubsublite.proto.Topic.RetentionConfig;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.Durations;
import java.util.Arrays;

public class UpdateTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    updateTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void updateTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Iterable<String> iterablePaths =
        Arrays.asList(
            "partition_config.scale",
            "retention_config.per_partition_bytes",
            "retention_config.period");

    FieldMask fieldMask = FieldMask.newBuilder().addAllPaths(iterablePaths).build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set publishing throughput to 4 times the standard partition
                    // throughput of 4 MiB per sec. This must be in the range [1,4]. A
                    // topic with `scale` of 2 and count of 10 is charged for 20 partitions.
                    .setScale(4)
                    .build())
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // Set storage per partition to 200 GiB. This must be 30 GiB-10 TiB.
                    // If the number of bytes stored in any of the topic's partitions grows
                    // beyond this value, older messages will be dropped to make room for
                    // newer ones, regardless of the value of `period`.
                    // Be careful when decreasing storage per partition as it may cause
                    // lost messages.
                    .setPerPartitionBytes(200 * 1024 * 1024 * 1024L)
                    .setPeriod(Durations.fromDays(7)))
            .setName(topicPath.toString())
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic topicBeforeUpdate = adminClient.getTopic(topicPath).get();
      System.out.println("Before update: " + topicBeforeUpdate.getAllFields());

      Topic topicAfterUpdate = adminClient.updateTopic(topic, fieldMask).get();
      System.out.println("After update: " + topicAfterUpdate.getAllFields());
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath
from google.protobuf.duration_pb2 import Duration
from google.protobuf.field_mask_pb2 import FieldMask

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

# Defines which topic fields to update.
field_mask = FieldMask(
    paths=[
        "partition_config.scale",
        "retention_config.per_partition_bytes",
        "retention_config.period",
    ]
)

# Defines how to update the topic fields.
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # Set publishing throughput to 2x standard partition throughput of 4 MiB
        # per second. This must in the range [1,4]. A topic with `scale` of 2 and
        # `count` of 10 is charged for 20 partitions.
        scale=2,
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 100 GiB. This must be in the range 30 GiB-10TiB.
        # If the number of byptes stored in any of the topic's partitions grows beyond
        # this value, older messages will be dropped to make room for newer ones,
        # regardless of the value of `period`.
        # Be careful when decreasing storage per partition as it may cuase lost messages.
        per_partition_bytes=100 * 1024 * 1024 * 1024,
        # Allow messages to be stored for 14 days.
        period=Duration(seconds=60 * 60 * 24 * 14),
    ),
)

client = AdminClient(cloud_region)
try:
    response = client.update_topic(topic, field_mask)
    print(f"{response.name} updated successfully.")
except NotFound:
    print(f"{topic_path} not found.")

Cómo escalar la capacidad de procesamiento

Puedes escalar la capacidad de procesamiento de un tema de forma horizontal y vertical. El escalamiento vertical implica ajustar la capacidad de las particiones de un tema hacia arriba o hacia abajo. El servicio Lite de Pub/Sub aprovisiona la misma capacidad de procesamiento para cada partición en el tema de Lite. Por ejemplo, si aumentas la capacidad de procesamiento de la publicación a 10 MiB por segundo, cada una de las particiones obtiene 10 MiB por segundo de capacidad de procesamiento de publicación.

También puedes aumentar la capacidad de un tema Lite de forma horizontal mediante el aumento de la cantidad de particiones. La cantidad de particiones en un tema no puede disminuir.

Cuando cambias la cantidad de particiones, el orden relativo de los mensajes no se conserva. La actualización del número de particiones en un tema cambia la función hash usada para asignar de la clave de orden a la partición. Es probable que los mensajes con la misma clave publicada después de la actualización del recuento de particiones se asignen a una partición diferente de los publicados antes de la actualización. Además, el cambio de tamaño del tema llevará un tiempo en propagarse a todos los publicadores, por lo que habrá un período breve en el que algunos publicadores usan la función de hash nueva y otros siguen usando la anterior.

Cómo escalar la capacidad de almacenamiento

También puedes aumentar o disminuir la cantidad de almacenamiento de un tema de Lite. El tema de Lite aprovisiona la misma cantidad de almacenamiento para cada partición. Si aumentas el almacenamiento a 60 GiB, cada una de las particiones obtiene 60 GiB de almacenamiento.

Si disminuyes la cantidad de almacenamiento en un tema de Lite, el servicio de Pub/Sub Lite primero quitará los mensajes más antiguos.

Para obtener información sobre cómo se relaciona la capacidad con los precios, consulta Precios de Pub/Sub Lite.

Obtén detalles del tema de Lite

Puedes obtener detalles sobre un tema de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

gcloud

Para obtener detalles sobre un tema de Lite, usa el comando gcloud pubsub lite-topics describe:

gcloud pubsub lite-topics describe TOPIC_ID \
--zone=ZONE

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

Si la solicitud es exitosa, la línea de comandos muestra el tema de Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocolo

Para obtener detalles sobre un tema de Lite, envía una solicitud GET como la siguiente:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

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.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func getTopic(w io.Writer, projectID, region, zone, topicID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// zone := "us-central1-a"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %v", err)
	}
	defer client.Close()

	topicName := fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, zone, topicID)
	topic, err := client.Topic(ctx, topicName)
	if err != nil {
		return fmt.Errorf("client.Topic got err: %v", err)
	}
	fmt.Fprintf(w, "Got topic: %#v\n", *topic)
	return nil
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;

public class GetTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    getTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void getTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic topic = adminClient.getTopic(topicPath).get();
      long numPartitions = adminClient.getTopicPartitionCount(topicPath).get();
      System.out.println(topic.getAllFields() + "\nhas " + numPartitions + " partition(s).");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

client = AdminClient(cloud_region)
try:
    response = client.get_topic(topic_path)
    num_partitions = client.get_topic_partition_count(topic_path)
    print(f"{response.name} has {num_partitions} partition(s).")
except NotFound:
    print(f"{topic_path} not found.")

Enumera temas de Lite

Puedes enumerar los temas de Lite en un proyecto con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

Para ver una lista de los temas de Lite de un proyecto, ve a la página Temas de Lite.

gcloud

Para enumerar los temas de Lite en un proyecto, usa el comando gcloud pubsub lite-topics list:

gcloud pubsub lite-topics list \
  --zone=ZONE

Reemplaza ZONE por el nombre de la zona en la que se encuentra el tema de Lite.

Si la solicitud se realiza correctamente, la línea de comandos muestra los temas de Lite:

---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND
---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND

Protocolo

Para enumerar los temas de Lite en un proyecto, envía una solicitud GET como la siguiente:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/topics
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

Si la solicitud se realiza correctamente, la respuesta es una lista de temas de Lite en formato JSON:

{
  "topics": [
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID",
      },
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/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.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
	"google.golang.org/api/iterator"
)

func listTopics(w io.Writer, projectID, region, zone string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// zone := "us-central1-a"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %v", err)
	}
	defer client.Close()

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, zone)
	topicIter := client.Topics(ctx, parent)
	for {
		topic, err := topicIter.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("topicIter.Next got err: %v", err)
		}
		fmt.Fprintf(w, "Got topic: %#v\n", topic)
	}
	return nil
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.LocationPath;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.proto.Topic;
import java.util.List;

public class ListTopicsExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    long projectNumber = Long.parseLong("123456789");

    listTopicsExample(cloudRegion, zoneId, projectNumber);
  }

  public static void listTopicsExample(String cloudRegion, char zoneId, long projectNumber)
      throws Exception {

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    LocationPath locationPath =
        LocationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      List<Topic> topics = adminClient.listTopics(locationPath).get();
      for (Topic topic : topics) {
        System.out.println(topic.getAllFields());
      }
      System.out.println(topics.size() + " topic(s) listed.");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, LocationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
location_path = LocationPath(project_number, location)

client = AdminClient(cloud_region)
response = client.list_topics(location_path)

for topic in response:
    print(topic)

print(f"{len(response)} topic(s) listed in your project and location.")

Borra temas de Lite

Puedes borrar temas de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

  3. En la página Detalles del tema Lite, haz clic en Borrar.

  4. En el campo que aparece, ingresa delete para confirmar que deseas borrar el tema de Lite.

  5. Haz clic en Borrar.

gcloud

Para borrar un tema de Lite, usa el comando gcloud pubsub lite-topics delete:

  1. Ejecuta el comando delete:

    gcloud pubsub lite-topics delete TOPIC_ID \
     --zone=ZONE
    

    Reemplaza lo siguiente:

    • TOPIC_ID: el ID del tema de Lite

    • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  2. Para confirmar, ingresa Y.

Si la solicitud es correcta, la respuesta es la siguiente:

Deleted topic [TOPIC_ID].

Protocolo

Para borrar un tema Lite, envía una solicitud DELETE como la siguiente:

DELETE https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

Si la solicitud es correcta, la respuesta es un objeto JSON vacío.

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.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func deleteTopic(w io.Writer, projectID, region, zone, topicID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// zone := "us-central1-a"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %v", err)
	}
	defer client.Close()

	err = client.DeleteTopic(ctx, fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, zone, topicID))
	if err != nil {
		return fmt.Errorf("client.DeleteTopic got err: %v", err)
	}
	fmt.Fprint(w, "Deleted topic\n")
	return nil
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;

public class DeleteTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    deleteTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void deleteTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      adminClient.deleteTopic(topicPath).get();
      System.out.println(topicPath.toString() + " deleted successfully.");
    }
  }

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

client = AdminClient(cloud_region)
try:
    client.delete_topic(topic_path)
    print(f"{topic_path} deleted successfully.")
except NotFound:
    print(f"{topic_path} not found.")

Si borras un tema de Lite, no podrás publicar mensajes en él. Las suscripciones Lite al tema de Lite aún existen, pero no puedes recibir mensajes de ellas.