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:
- Desligue o cluster
- Limpe o diretório de log kafka (especificado pelo
log.dir
atributo no arquivo de configuração kafka ), bem como os dados do zookeeper
- Reinicie o cluster
Para qualquer tópico, o que você pode fazer é
- Pare de kafka
- Limpe o log kafka específico da partição, o kafka armazena seu arquivo de log em um formato de "logDir / topic-partition" para um tópico denominado "MyTopic", o log para o id da partição 0 será armazenado
/tmp/kafka-logs/MyTopic-0
onde /tmp/kafka-logs
é especificado pelo log.dir
atributo
- Reiniciar kafka
Esta é NOT
uma abordagem boa e recomendada, mas deve funcionar. No arquivo de configuração do corretor Kafka, o log.retention.hours.per.topic
atributo é usado para definirThe number of hours to keep a log file before deleting it for some specific topic
Além disso, existe uma maneira de as mensagens serem excluídas assim que o consumidor as lê?
Da documentação do Kafka :
O cluster Kafka retém todas as mensagens publicadas - quer tenham ou não sido consumidas - por um período de tempo configurável. Por exemplo, se a retenção de log for definida para dois dias, nos dois dias após a publicação de uma mensagem, ela ficará disponível para consumo, após o qual será descartada para liberar espaço. O desempenho do Kafka é efetivamente constante em relação ao tamanho dos dados, portanto, reter muitos dados não é um problema.
Na verdade, os únicos metadados retidos por consumidor são a posição do consumidor no log, chamada de "deslocamento". Esse deslocamento é controlado pelo consumidor: normalmente um consumidor avançará seu deslocamento linearmente à medida que lê as mensagens, mas na verdade a posição é controlada pelo consumidor e ele pode consumir as mensagens na ordem que desejar. Por exemplo, um consumidor pode redefinir para um deslocamento mais antigo para reprocessar.
Para encontrar o deslocamento inicial para ler no exemplo do consumidor simples do Kafka 0.8, eles dizem
O Kafka inclui duas constantes para ajudar, kafka.api.OffsetRequest.EarliestTime()
encontra o início dos dados nos logs e começa a transmitir a partir daí, kafka.api.OffsetRequest.LatestTime()
irá apenas transmitir novas mensagens.
Você também pode encontrar o código de exemplo lá para gerenciar o deslocamento na extremidade do consumidor.
public static long getLastOffset(SimpleConsumer consumer, String topic, int partition,
long whichTime, String clientName) {
TopicAndPartition topicAndPartition = new TopicAndPartition(topic, partition);
Map<TopicAndPartition, PartitionOffsetRequestInfo> requestInfo = new HashMap<TopicAndPartition, PartitionOffsetRequestInfo>();
requestInfo.put(topicAndPartition, new PartitionOffsetRequestInfo(whichTime, 1));
kafka.javaapi.OffsetRequest request = new kafka.javaapi.OffsetRequest(requestInfo, kafka.api.OffsetRequest.CurrentVersion(),clientName);
OffsetResponse response = consumer.getOffsetsBefore(request);
if (response.hasError()) {
System.out.println("Error fetching data Offset Data the Broker. Reason: " + response.errorCode(topic, partition) );
return 0;
}
long[] offsets = response.offsets(topic, partition);
return offsets[0];
}