Excluir tópico no Kafka 0.8.1.1


92

Preciso excluir o tópico testno Apache Kafka 0.8.1.1.

Conforme expresso na documentação aqui , eu executei:

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

No entanto, isso resulta na seguinte mensagem:

Command must include exactly one action: --list, --describe, --create or --alter

Como posso deletar este tópico?


O procedimento passo a passo é explicado em: stackoverflow.com/questions/33537950/…
Ravindra babu

Respostas:


107

Excluir o tópico nem sempre funciona no 0.8.1.1

A exclusão deve funcionar na próxima versão, 0.8.2

kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

  Topic your_topic_name is marked for deletion.
  Note: This will have no impact if delete.topic.enable is not set to true.

É possível deletar um tópico?

Jira KAFKA-1397


Obrigado pela informação. Você sabe como limpar todos os estados Kafka e Zookeeper conforme indicado?
EmPak5

@EmPack IIRC, a maneira mais fácil de fazer isso (se você não se preocupa com o tempo) é desligar todos os seus corretores, deletar seus logs para aquele tópico e mudar seu namespace ZK.
franco de

95

Parece que o comando de exclusão não foi documentado oficialmente no Kafka 0.8.1.x por causa de um bug conhecido ( https://issues.apache.org/jira/browse/KAFKA-1397 ).

No entanto, o comando ainda foi enviado no código e pode ser executado como:

bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper localhost:2181 --topic test

Nesse ínterim, o bug foi corrigido e o comando de exclusão agora está oficialmente disponível no Kafka 0.8.2.0 como:

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

Pelo que li, pode funcionar 0.8.1.1, mas pode não ... A correção também está no tronco há um tempo, então se você pegou as fontes diretamente do tronco, deve funcionar
frank

Eu tentei no 0.8.1.1, ele relata "exclusão bem-sucedida", mas não funcionou. O tópico ainda está lá, posso anexar um consumidor e ele relatará todos os itens anteriores como pendentes.
Elias Dorneles

A exclusão de tópicos no Kafka 0.8.1.1 não funciona. A versão 0.8.2.0 lançada recentemente deve finalmente ter suporte para exclusão adequado. Consulte blog.confluent.io/2014/12/02/whats-coming-in-apache-kafka-0-8-2 .
Michael G. Noll

BTW, a propriedade para delete.topic.enable = true pode ser localizada no arquivo server.properties. Ele é comentado por padrão.
Shanemeister de

37

Adicione a linha abaixo em $ {kafka_home} /config/server.properties

delete.topic.enable=true

Reinicie o servidor kafka com a nova configuração:

${kafka_home}/bin/kafka-server-start.sh ~/kafka/config/server.properties

Exclua os tópicos que deseja:

${kafka_home}/bin/kafka-topics.sh --delete  --zookeeper localhost:2181  --topic daemon12

10

Andrea está certa. podemos fazer isso usando a linha de comando.

E ainda podemos programá-lo, por

ZkClient zkClient = new ZkClient("localhost:2181", 10000);
zkClient.deleteRecursive(ZkUtils.getTopicPath("test2"));

Na verdade, eu não recomendo que você exclua o tópico do Kafka 0.8.1.1. Eu posso excluir este tópico por este método, mas se você verificar o log do zookeeper, a exclusão bagunça tudo.


Deve também incluir zkClient.deleteRecursive (ZkUtils.getTopicConfigPath ("test2")); e
Sumit

@Sumit e o quê? Eu não usei esse "getTopicConfigPath". Na verdade, eu não recomendo que você exclua o tópico do Kafka 0.8.1.1. Eu posso excluir este tópico por este método, mas se você verificar o log do zookeeper, a exclusão bagunça tudo.
Liang

mas é assim que kafka também faz (da maneira que você sugeriu): apache.googlesource.com/kafka/+/0.8.1/core/src/main/scala/kafka/…
Sumit

@Sumit. sim, encontrei o código de lá. Não tenho certeza sobre essa coisa de "bagunça". Porque uma vez que excluo um tópico no servidor da minha empresa, a exclusão gera muito lixo para o registro do zookeeper. Mas não consigo reproduzi-lo no meu local. Então, eu não recomendo isso ..
Liang

4

Você pode excluir um tópico específico do kafka (exemplo test:) do comando shell do zookeeper ( zookeeper-shell.sh). Use o comando abaixo para deletar o tópico

rmr {path of the topic}

exemplo:

rmr /brokers/topics/test

definir delete.topic.enable = true, depois excluir de kafka e, em seguida, excluir também do zookeeper ...
minhas23

4

Etapas para excluir um ou mais tópicos no Kafka

Para excluir tópicos no kafka, a opção de exclusão precisa ser habilitada no servidor Kafka.

1. Go to {kafka_home}/config/server.properties
2. Uncomment delete.topic.enable=true

Exclua um Tópico no Kafka digite o seguinte comando

kafka-topics.sh --delete --zookeeper localhost: 2181 --topic

Para excluir mais de um tópico do kafka

(bom para fins de teste, onde criei vários tópicos e tive que excluí-los para diferentes cenários)

  1. Pare o servidor Kafka e o Zookeeper
  2. vá para a pasta / tmp onde os logs são armazenados e exclua a pasta kafkalogs e zookeeper manualmente
  3. Reinicie o zookeeper e o servidor kafka e tente listar os tópicos,

bin / kafka-topics.sh --list --zookeeper localhost: 2181

se nenhum tópico estiver listado, todos os tópicos foram excluídos com sucesso. Se os tópicos estiverem listados, a exclusão não foi bem-sucedida. Tente as etapas acima novamente ou reinicie o computador.


Observe que na versão mais recente do Kafka no momento (1.0.0), essa opção não aparece no server.propertiesarquivo. Você tem que adicionar essa linha manualmente.
David Corral

A exclusão do tópico @DavidCorral é habilitada por padrão em 1.0.0
Tanner

2

Estas etapas excluirão todos os tópicos e dados

  • Pare o servidor Kafka e o servidor Zookeeper
  • Remova os diretórios de dados tmp de ambos os serviços; por padrão, eles são C: / tmp / kafka-logs e C: / tmp / zookeeper.
  • em seguida, inicie o servidor Zookeeper e o servidor Kafka


1

Adicionando às respostas acima, é necessário excluir os metadados associados a esse tópico no caminho de compensação do consumidor do zookeeper.

bin/zookeeper-shell.sh zookeeperhost:port

rmr /consumers/<sample-consumer-1>/offsets/<deleted-topic>

Caso contrário, o atraso será negativo nas ferramentas de monitoramento kafka baseadas no zookeeper.


1

Conforme mencionado no doc aqui

A opção de exclusão de tópico está desabilitada por padrão. Para habilitá-lo, defina a configuração do servidor delete.topic.enable = true, Kafka não suporta atualmente a redução do número de partições para um tópico ou alteração do fator de replicação.

Certifique-se de que delete.topic.enable = true


Eu acredito que essa opção está disponível apenas em 8,2
spuder

1
bin/kafka-topics.sh –delete –zookeeper localhost:2181 –topic <topic-name>

0

Se você tiver problemas para excluir os tópicos, tente excluí-los usando:

$KAFKA_HOME/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name

comando. Então, a fim de verificar o processo de exclusão, vá para o diretório de logs kafka, que normalmente está localizado em /tmp/kafka-logs/, e exclua o your_topic_namearquivo viarm -rf your_topic_name comando.

Lembre-se de monitorar todo o processo por meio de uma ferramenta de gerenciamento kafka como Kafka Tool .

O processo mencionado acima removerá os tópicos sem reiniciar o servidor kafka.


0

Etapa 1: verifique se você está conectado ao zookeeper e ao Kafka em execução

Etapa 2: Para deletar o tópico Kafka, execute Kafka-topic (Mac) ou Kafka-topic.sh se usar (linux / Mac) adicione a porta e --topic com o nome do seu tópico e --delete apenas exclua o tópico com sucesso.

# Delete the kafka topic
# it will delete the kafka topic
kafka-topics --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete
# or
kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete

0

Primeiro, você executa este comando para excluir seu tópico:

$ bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic <topic_name>

Liste os tópicos ativos para verificar a exclusão completa:

$ bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.