es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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))

Tags:  ,

Answer

  1. Avatar for 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:

    1. Utiliza la configuración 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.
    2. 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 comando kafka-topics.sh --delete.

    3. 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:

    #!/bin/bash
    
    DOS_DIAS_ATRAS=$(date -d "-2 days" +%s)
    
    # Obtén la lista de temas y su hora de creación
    TEMAS_CON_HORA_CREACION=$(kafka-topics.sh --bootstrap-server <broker_endpoint> --list --topic __consumer_offsets --command-config client.properties \
    | xargs -I% sh -c 'echo %; kafka-topics.sh --bootstrap-server <broker_endpoint> --describe --topic % --command-config client.properties' \
    | grep -E "Topic|creation" \
    | paste - - \
    | sed 's/Topic: //g; s/PartitionCount: [0-9]+//g; s/ReplicationFactor: [0-9]+//g; s/CreatedTime: //g; s/\n/ /g')
    
    # Recorre cada tema y verifica si tiene más de 2 días
    for tema in $TEMAS_CON_HORA_CREACION; do
      nombre=$(echo $tema | awk '{print $1}')
      creado_en=$(date -d "$(echo $tema | awk '{print $2" "$3" "$4}')" +%s)
      if [ $creado_en -lt $DOS_DIAS_ATRAS ]; then
        echo "Eliminando tema: $nombre"
        kafka-topics.sh --bootstrap-server <broker_endpoint> --delete --topic $nombre --command-config client.properties
      fi
    done
    

    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.

Comments are closed.