No creo que sea compatible todavía. Eche un vistazo a este número de JIRA "Agregar soporte para eliminar temas".
Para eliminar manualmente:
- Apaga el clúster
- Limpiar el directorio de registro de kafka (especificado por el
log.dir
atributo en el archivo de configuración de kafka ) así como los datos del guardián del zoológico
- Reinicie el clúster
Para cualquier tema dado, lo que puede hacer es
- Detener kafka
- Limpiar el registro de kafka específico para la partición, kafka almacena su archivo de registro en un formato de "logDir / topic-partition", por lo que para un tema llamado "MyTopic", el registro de la partición id 0 se almacenará en el
/tmp/kafka-logs/MyTopic-0
lugar /tmp/kafka-logs
especificado por el log.dir
atributo
- Reiniciar kafka
Este es NOT
un enfoque bueno y recomendado, pero debería funcionar. En el archivo de configuración del corredor de Kafka, el log.retention.hours.per.topic
atributo se usa para definirThe number of hours to keep a log file before deleting it for some specific topic
Además, ¿hay alguna forma de que los mensajes se eliminen tan pronto como el consumidor los lea?
De la documentación de Kafka :
El clúster de Kafka retiene todos los mensajes publicados, ya sea que se hayan consumido o no, durante un período de tiempo configurable. Por ejemplo, si la retención de registros se establece en dos días, durante los dos días posteriores a la publicación de un mensaje, estará disponible para el consumo, después de lo cual se descartará para liberar espacio. El rendimiento de Kafka es efectivamente constante con respecto al tamaño de los datos, por lo que retener muchos datos no es un problema.
De hecho, los únicos metadatos que se conservan por consumidor es la posición del consumidor en el registro, denominada "compensación". Este desplazamiento es controlado por el consumidor: normalmente un consumidor avanzará su desplazamiento linealmente a medida que lee los mensajes, pero de hecho la posición está controlada por el consumidor y puede consumir mensajes en el orden que desee. Por ejemplo, un consumidor puede restablecer un desplazamiento anterior para reprocesar.
Para encontrar el desplazamiento inicial para leer en el ejemplo de consumidor simple de Kafka 0.8 , dicen
Kafka incluye dos constantes para ayudar, kafka.api.OffsetRequest.EarliestTime()
encuentra el comienzo de los datos en los registros y comienza a transmitir desde allí, kafka.api.OffsetRequest.LatestTime()
solo transmitirá mensajes nuevos.
También puede encontrar el código de ejemplo allí para administrar la compensación en el extremo de su 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];
}