Cómo eliminar temas no utilizados?
En nuestro diseño, los temas de Kafka se crean sobre la marcha y se utilizan durante un corto período de tiempo. Mientras se crean y utilizan nuevos temas, los temas creados anteriormente pueden dejar de utilizarse. Existe la necesidad de eliminar periódicamente los temas no utilizados. Digamos, por simplicidad, que nos gustaría eliminar todos los temas que no se han utilizado (y están vacíos) en los últimos 2 días.
¿Existe una solución establecida para este caso? ¿Alguna indicación sobre cómo lograr esto?
(Usaremos AWS MSK (versión de Kafka 2.8))
davy.ai
Solución para eliminar temas de Kafka no utilizados en AWS MSK:
AWS MSK no tiene una solución incorporada para eliminar temas de Kafka no utilizados. Sin embargo, puedes lograr esto escribiendo un script personalizado o utilizando herramientas de terceros como Kafka Manager, Confluent Control Center y Aegisthus de Netflix. Aquí te presentamos un enfoque que puedes seguir:
log.retention.ms
de Kafka para establecer un límite de tiempo para la retención de mensajes en un tema. Esta configuración garantiza que los mensajes se borren después de que haya transcurrido el tiempo configurado.Escribe un script que verifique periódicamente la hora de creación de cada tema y la compare con la hora actual. Puedes utilizar el comando
kafka-topics.sh
de Kafka para obtener la lista de temas y su hora de creación. Los temas que no se hayan utilizado en los últimos 2 días (es decir, que la hora de creación sea anterior a 2 días) se pueden eliminar utilizando el comandokafka-topics.sh --delete
.Se puede configurar una tarea cron para ejecutar el script en un intervalo de tiempo específico (por ejemplo, todos los días a medianoche).
Aquí tienes un ejemplo de script que puedes modificar según tus necesidades:
Nota: Reemplaza
<broker_endpoint>
con el punto de conexión de tu broker de Kafka y modifica el nombre del tema__consumer_offsets
para que coincida con el prefijo de tu convención de nomenclatura de temas.Este script verifica la hora de creación de cada tema y elimina los temas que no se han utilizado en los últimos dos días. Puedes modificar el intervalo de tiempo y las condiciones de filtrado de temas según tus necesidades.