Existe uma maneira de excluir todos os dados de um tópico ou excluir o tópico antes de cada execução?
Posso modificar o arquivo KafkaConfig.scala para alterar a logRetentionHours
propriedade? Existe uma maneira de as mensagens serem excluídas assim que o consumidor as lê?
Estou usando produtores para buscar os dados de algum lugar e enviando os dados para um tópico específico onde um consumidor consome. Posso excluir todos os dados desse tópico em cada execução? Quero apenas novos dados a cada vez no tópico. Existe uma maneira de reinicializar o tópico de alguma forma?
apache-kafka
apache-zookeeper
TommyT
fonte
fonte
Respostas:
Não acho que seja compatível ainda.Dê uma olhada neste problema do JIRA "Adicionar suporte para exclusão de tópicos".Para excluir manualmente:
log.dir
atributo no arquivo de configuração kafka ), bem como os dados do zookeeperPara qualquer tópico, o que você pode fazer é
/tmp/kafka-logs/MyTopic-0
onde/tmp/kafka-logs
é especificado pelolog.dir
atributoEsta é
NOT
uma abordagem boa e recomendada, mas deve funcionar. No arquivo de configuração do corretor Kafka, olog.retention.hours.per.topic
atributo é usado para definirThe number of hours to keep a log file before deleting it for some specific topic
Da documentação do Kafka :
Para encontrar o deslocamento inicial para ler no exemplo do consumidor simples do Kafka 0.8, eles dizem
Você também pode encontrar o código de exemplo lá para gerenciar o deslocamento na extremidade do consumidor.
fonte
brokers/topics/<topic_to_delete>
, bem como os logs para se livrar dele.kafka-run-class.sh kafka.admin.DeleteTopicCommand
.kafka-run-class.sh kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
Como mencionei aqui, Purge Kafka Queue :
Testado no Kafka 0.8.2, para o exemplo de início rápido: Primeiro, adicione uma linha ao arquivo server.properties na pasta de configuração:
então, você pode executar este comando:
fonte
Testado com kafka 0,10
Nota: se você estiver excluindo pasta / s de tópico dentro de kafka-logs, mas não da pasta de dados do zookeeper, então verá que os tópicos ainda estão lá.
fonte
Como solução alternativa, você pode ajustar as configurações de retenção de tempo de execução por tópico, por exemplo,
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my_topic --config retention.bytes=1
( Retenção.bytes = 0 também pode funcionar)Após um curto período, o kafka deve liberar o espaço. Não tenho certeza se isso tem alguma implicação em comparação com a recriação do tópico.
ps. Melhor trazer as configurações de retenção de volta, uma vez que o kafka feito a limpeza.
Você também pode usar
retention.ms
para persistir dados históricosfonte
Abaixo estão scripts para esvaziar e excluir um tópico Kafka assumindo localhost como o servidor zookeeper e Kafka_Home está definido para o diretório de instalação:
O script a seguir esvaziará um tópico definindo seu tempo de retenção para 1 segundo e removendo a configuração:
Para excluir totalmente os tópicos, você deve interromper qualquer (s) corretor (es) kafka aplicável e remover seu (s) diretório (s) do diretório de log kafka (padrão: / tmp / kafka-logs) e então executar este script para remover o tópico do zookeeper. Para verificar se ele foi excluído do zookeeper, a saída de ls / brokers / topics não deve mais incluir o tópico:
fonte
grep "log.retention.check.interval" $Kafka_Home/config/server.properties
--add config
contrário, é--add-config
Tentamos basicamente o que as outras respostas estão descrevendo com nível moderado de sucesso. O que realmente funcionou para nós (Apache Kafka 0.8.1) é o comando class
sh kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic yourtopic --zookeeper localhost: 2181
fonte
Error: Could not find or load main class kafka.admin.DeleteTopicCommand
Para usuários de cerveja
Se você está usando
brew
como eu e perdeu muito tempo procurando akafka-logs
pasta infame , não tema mais. (e, por favor, deixe-me saber se isso funciona para você e várias versões diferentes do Homebrew, Kafka etc :))Você provavelmente vai encontrar em:
Localização:
/usr/local/var/lib/kafka-logs
Como realmente encontrar esse caminho
(isso também é útil para basicamente todos os aplicativos que você instala por meio do brew)
1)
brew services list
2) Abra e leia o que
plist
você encontrou acima3) Encontre a linha definindo a
server.properties
localização abri-la, no meu caso:/usr/local/etc/kafka/server.properties
4) Procure a
log.dirs
linha:5) Vá até aquele local e exclua os logs dos tópicos que deseja
6) Reinicie o Kafka com
brew services restart kafka
fonte
Todos os dados sobre tópicos e suas partições são armazenados em
tmp/kafka-logs/
. Além disso, eles são armazenados em um formatotopic-partionNumber
, então se você quiser excluir um tópiconewTopic
, você pode:rm -rf /tmp/kafka-logs/newTopic-*
fonte
log.retention.hours
e adicionarlog.retention.ms=1000
. Isso manteria o registro do Tópico Kafka por apenas um segundo.log.retention.hours
para o valor desejado.fonte
A partir da versão 2.3.0 do kafka, há uma maneira alternativa de exclusão suave do Kafka (a abordagem antiga está obsoleta).
Atualize a retenção.ms para 1 s (1000 ms) e defina-a novamente após um minuto, para a configuração padrão, ou seja, 7 dias (168 horas, 604.800.000 em ms)
Exclusão suave: - (rentention.ms = 1000) (usando kafka-configs.sh)
Configuração para o padrão: - 7 dias (168 horas, retenção.ms = 604800000)
fonte
Ao excluir manualmente um tópico de um cluster kafka, você só pode verificar https://github.com/darrenfu/bigdata/issues/6 Uma etapa vital que muitas vezes se esquece na maioria das soluções é excluir o
/config/topics/<topic_name>
no ZK.fonte
Eu uso este script:
fonte
Eu uso o utilitário abaixo para limpar após a execução do meu teste de integração.
Ele usa a
AdminZkClient
API mais recente . A API mais antiga foi descontinuada.Existe uma opção para excluir o tópico. Mas, isso marca o tópico para exclusão. O Zookeeper mais tarde exclui o tópico. Uma vez que isso pode ser imprevisivelmente longo, prefiro a abordagem Retenção
fonte