Introdução
Um tópico é mais do que um nome passado a um produtor. Suas partições organizam o log de eventos, suas réplicas descrevem as cópias armazenadas e suas configurações de retenção determinam por quanto tempo os registros armazenados podem ser mantidos. O progresso da leitura pertence aos consumidores e é uma questão separada.
Você criará dois tópicos, inspecionará seus metadados, atribuirá uma política explícita de retenção a ambos e, depois, alterará apenas um. Isso isola o significado de uma configuração específica de tópico que substitui o padrão, sem esperar por exclusões reais nem alterar a configuração de todo o broker.
O único broker preparado está pronto, e os nomes dos dois tópicos são independentes dos laboratórios anteriores. Conhecimentos básicos de terminal bastam; não é necessário programar em Python ou Java. Uma réplica é adequada para este ambiente de aprendizado com um broker. Use o Terminal.
Crie dois tópicos e leia seus metadados
Nesta etapa, você comparará duas quantidades explícitas de partições. Comece no seu diretório de trabalho:
cd /home/labex/project
--bootstrap-server fornece o endereço do broker preparado. Crie orders-retained com duas partições e orders-control com uma. Ambos usam uma réplica porque este ambiente contém um broker:
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-retained --partitions 2 --replication-factor 1
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-control --partitions 1 --replication-factor 1
Liste os tópicos e salve cada descrição. O operador > do shell cria um arquivo local ou substitui seu conteúdo anterior:
kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained > /home/labex/project/output/orders-retained-description.txt
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-control > /home/labex/project/output/orders-control-description.txt
cat /home/labex/project/output/orders-retained-description.txt
cat /home/labex/project/output/orders-control-description.txt
Localize PartitionCount: 2 em um tópico e 1 no outro, e ReplicationFactor: 1 em ambos. Cada partição tem uma entrada de líder. Um identificador do broker líder não é a quantidade de partições, e duas partições não implicam duas máquinas de broker.
Um tópico pode ter várias partições no mesmo broker. O fator de replicação descreve cópias de cada partição entre brokers, em vez de cópias independentes para cada consumidor. A seguir, você alterará a retenção no armazenamento sem mudar nenhuma dessas propriedades.
Defina uma retenção explícita de um dia para cada tópico
Nesta etapa, você distinguirá um padrão herdado de uma configuração específica de tópico. kafka-configs.sh gerencia recursos de configuração. --entity-type topics seleciona recursos de tópico, enquanto --entity-name seleciona o único tópico afetado. --describe normalmente mostra configurações específicas que substituem o padrão; a ausência de uma dessas configurações não significa que o broker não tenha um padrão.
Inspecione o tópico de retenção antes de alterá-lo:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe
retention.ms é uma duração em milissegundos. Um dia equivale a 24 × 60 × 60 × 1000 = 86400000 milissegundos. --alter --add-config define essa configuração específica pelo nome. Defina a mesma política explícita de forma independente nos dois tópicos:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=86400000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --alter --add-config retention.ms=86400000
Leia as configurações específicas reais e salve as observações:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-one-day-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-one-day-config.txt
cat /home/labex/project/output/retained-one-day-config.txt
cat /home/labex/project/output/control-one-day-config.txt
Localize retention.ms=86400000 para cada tópico nomeado. Um cliente também pode imprimir detalhes sobre a origem ou a sensibilidade da configuração; esses detalhes e a formatação podem variar.
A retenção é uma política de armazenamento do broker, não uma instrução para apagar um registro assim que um consumidor o lê. A idade dos registros e a limpeza de segmentos do log determinam quando eles se tornam elegíveis para exclusão e quando ela ocorre; a duração não garante que uma mensagem específica desapareça em um instante exato. Este exercício verifica a configuração definida em vez de esperar pela limpeza.
Altere apenas um tópico e confirme o alcance da mudança
Nesta etapa, você dará dois dias a orders-retained, mantendo orders-control em um dia. Preveja quais metadados devem mudar: a configuração específica de retenção do tópico orders-retained, com as quantidades de partições e os fatores de replicação de ambos inalterados.
Dois dias equivalem a 172800000 milissegundos. Aplique esse valor apenas ao tópico orders-retained nomeado:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=172800000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-final-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-final-config.txt
cat /home/labex/project/output/retained-final-config.txt
cat /home/labex/project/output/control-final-config.txt
Espere retention.ms=172800000 para orders-retained e retention.ms=86400000 para orders-control. O endereço compartilhado do broker não torna global uma configuração específica de tópico.
Consulte a descrição do tópico orders-retained mais uma vez:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained
Ele ainda deve ter duas partições e uma réplica. Alterar a retenção não criou um novo tópico, acrescentou partições, copiou o progresso do consumidor nem consumiu eventos. Você verificou tanto a mudança pretendida quanto o tópico vizinho que permaneceu inalterado. A seguir, as chaves conectarão as identidades dos pedidos às partições.
Resumo
Você criou tópicos com partições e réplicas explícitas, inspecionou seus metadados e aplicou configurações específicas de retenção em milissegundos. Alterar um tópico manteve o outro inalterado, separando a política de armazenamento do tópico do progresso do consumidor. A seguir, você direcionará eventos relacionados com chaves e inspecionará seus offsets locais a cada partição.



