¿Hay alguna forma de eliminar todos los datos de un tema o eliminar el tema antes de cada ejecución?
¿Puedo modificar el archivo KafkaConfig.scala para cambiar la logRetentionHours
propiedad? ¿Hay alguna forma de que los mensajes se eliminen tan pronto como el consumidor los lea?
Estoy usando productores para obtener los datos de algún lugar y enviar los datos a un tema en particular donde un consumidor consume, ¿puedo eliminar todos los datos de ese tema en cada ejecución? Quiero solo datos nuevos cada vez en el tema. ¿Hay alguna forma de reinicializar el tema de alguna manera?
apache-kafka
apache-zookeeper
TommyT
fuente
fuente
Respuestas:
No creo que sea compatible todavía.Eche un vistazo a este número de JIRA "Agregar soporte para eliminar temas".Para eliminar manualmente:
log.dir
atributo en el archivo de configuración de kafka ) así como los datos del guardián del zoológicoPara cualquier tema dado, lo que puede hacer es
/tmp/kafka-logs/MyTopic-0
lugar/tmp/kafka-logs
especificado por ellog.dir
atributoEste es
NOT
un enfoque bueno y recomendado, pero debería funcionar. En el archivo de configuración del corredor de Kafka, ellog.retention.hours.per.topic
atributo se usa para definirThe number of hours to keep a log file before deleting it for some specific topic
De la documentación de Kafka :
Para encontrar el desplazamiento inicial para leer en el ejemplo de consumidor simple de Kafka 0.8 , dicen
También puede encontrar el código de ejemplo allí para administrar la compensación en el extremo de su consumidor.
fuente
brokers/topics/<topic_to_delete>
, así como los registros, para deshacerse de él.kafka-run-class.sh kafka.admin.DeleteTopicCommand
.kafka-run-class.sh kafka.admin.TopicCommand --delete --topic [topic_to_delete] --zookeeper localhost:2181
Como mencioné aquí Purge Kafka Queue :
Probado en Kafka 0.8.2, para el ejemplo de inicio rápido: Primero, agregue una línea al archivo server.properties en la carpeta de configuración:
entonces, puede ejecutar este comando:
fuente
Probado con kafka 0.10
Nota: si está eliminando carpetas de temas dentro de kafka-logs pero no de la carpeta zookeeper-data, verá que los temas siguen ahí.
fuente
Como solución sucia, puede ajustar la configuración de retención de tiempo de ejecución por tema, por ejemplo
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my_topic --config retention.bytes=1
( retención.bytes = 0 también podría funcionar)Después de un rato, kafka debería liberar espacio. No estoy seguro si esto tiene alguna implicación en comparación con la recreación del tema.
PD. Es mejor recuperar la configuración de retención, una vez que Kafka haya terminado con la limpieza.
También puede utilizar
retention.ms
para conservar datos históricosfuente
A continuación se muestran los scripts para vaciar y eliminar un tema de Kafka asumiendo que localhost como el servidor del guardián del zoológico y Kafka_Home está configurado en el directorio de instalación:
El siguiente script vaciará un tema estableciendo su tiempo de retención en 1 segundo y luego eliminando la configuración:
Para eliminar completamente los temas, debe detener cualquier corredor de kafka aplicable y eliminar sus directorios del directorio de registro de kafka (predeterminado: / tmp / kafka-logs) y luego ejecutar este script para eliminar el tema de zookeeper. Para verificar que se haya eliminado de zookeeper, la salida de ls / brokers / topics ya no debería incluir el tema:
fuente
grep "log.retention.check.interval" $Kafka_Home/config/server.properties
--add config
más bien es--add-config
Intentamos prácticamente lo que describen las otras respuestas con un nivel moderado de éxito. Lo que realmente funcionó para nosotros (Apache Kafka 0.8.1) es el comando de clase
sh kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic yourtopic --zookeeper localhost: 2181
fuente
Error: Could not find or load main class kafka.admin.DeleteTopicCommand
Para usuarios de cerveza
Si está usando
brew
como yo y perdió mucho tiempo buscando lakafka-logs
carpeta infame , no temas más. (y hágamelo saber si eso funciona para usted y varias versiones diferentes de Homebrew, Kafka, etc. :))Probablemente lo encontrará en:
Ubicación:
/usr/local/var/lib/kafka-logs
Cómo encontrar realmente ese camino
(esto también es útil para básicamente todas las aplicaciones que instala a través de brew)
1)
brew services list
2) Abra y lea lo que
plist
encontró arriba3) Encuentra la línea que define la
server.properties
ubicación, ábrela, en mi caso:/usr/local/etc/kafka/server.properties
4) Busque la
log.dirs
línea:5) Vaya a esa ubicación y elimine los registros de los temas que desee
6) Reinicie Kafka con
brew services restart kafka
fuente
Todos los datos sobre temas y sus particiones se almacenan en
tmp/kafka-logs/
. Además, están almacenados en un formatotopic-partionNumber
, por lo que si desea eliminar un temanewTopic
, puede:rm -rf /tmp/kafka-logs/newTopic-*
fuente
log.retention.hours
y agregarlog.retention.ms=1000
. Mantendría el récord de Kafka Topic por solo un segundo.log.retention.hours
la cifra deseada.fuente
A partir de la versión de kafka 2.3.0, existe una forma alternativa de eliminación suave de Kafka (el enfoque antiguo está en desuso).
Actualice la retención.ms a 1 segundo (1000 ms) y luego configúrelo nuevamente después de un minuto, a la configuración predeterminada, es decir, 7 días (168 horas, 604,800,000 en ms)
Eliminación suave: - (rentention.ms = 1000) (usando kafka-configs.sh)
Configuración predeterminada: - 7 días (168 horas, retención.ms = 604800000)
fuente
Al eliminar manualmente un tema de un clúster de kafka, puede consultar https://github.com/darrenfu/bigdata/issues/6 Un paso vital que se perdió mucho en la mayoría de las soluciones es eliminar el
/config/topics/<topic_name>
archivo en ZK.fuente
Yo uso este script:
fuente
Utilizo la utilidad a continuación para limpiar después de mi ejecución de prueba de integración.
Utiliza lo último
AdminZkClient
API. La API anterior ha quedado obsoleta.Hay una opción para eliminar tema. Pero marca el tema para su eliminación. Zookeeper luego elimina el tema. Dado que esto puede ser impredeciblemente largo, prefiero el enfoque Hold.ms
fuente