Este tema describe cómo realizar operaciones de O&M cuando el espacio en disco de un clúster Kafka está lleno. En este tema se utiliza E-MapReduce (EMR) Kafka 2.4.1.
Escenario de negocio
Kafka almacena datos de registro en disco. Si el espacio en disco se llena, el directorio de registros de Kafka en ese disco pasa a estado offline. En este caso, no es posible leer ni escribir en las réplicas de partición alojadas en dicho disco, lo que reduce la disponibilidad y la tolerancia a fallos de las particiones. Además, la carga de los demás brokers aumenta porque la réplica líder de la partición migra hacia otros brokers. Por lo tanto, debe resolver el problema lo antes posible cuando el espacio en disco esté lleno.
Descripción general
Este tema describe las estrategias de O&M aplicables cuando el espacio en disco de un clúster Kafka está lleno, desde dos perspectivas: monitoreo y recuperación de discos llenos.
Monitorear un disco lleno
Servicio Kafka: Configure reglas de alerta para la métrica OfflineLogDirectoryCount de los clústeres EMR Kafka en la consola de CloudMonitor para detectar directorios de registros offline en tiempo real.
Recuperar un disco lleno
Si el directorio de registros de Kafka en un disco pasa a estado offline, primero compruebe si el espacio en disco está lleno.
Cuando se agota el espacio en disco de un directorio de registros, considere las siguientes estrategias de O&M:
Redimensionamiento de disco: Aumente la capacidad del disco mediante el redimensionamiento del disco en la nube. Este método es adecuado para escenarios donde los brokers utilizan discos en la nube conectados. Para obtener más información, consulte Recovery by disk resizing.
Migración de particiones dentro del nodo: Migre particiones de un disco lleno a otros discos en el mismo nodo. Esta opción resulta útil cuando existe un desequilibrio en el uso de discos dentro de un nodo broker. Para obtener más información, consulte Recovery by intra-node partition migration.
Limpieza de datos: Elimine datos de registro del disco lleno. Este método aplica cuando es seguro eliminar datos antiguos. Para obtener más información, consulte Recovery by data cleanup.
Redimensionar un disco
Descripción
Si el espacio de un disco en un broker está lleno, utilice esta estrategia para aumentar el espacio disponible y cumplir con los requisitos correspondientes. Las ventajas de esta estrategia son la simplicidad de las operaciones, el bajo riesgo y la capacidad de resolver rápidamente el problema de espacio insuficiente.
Escenario
Esta estrategia aplica a escenarios donde hay discos conectados a un broker.
Procedimiento
Redimensione los discos de datos de los nodos broker en la consola de E-MapReduce. Para obtener más información, consulte Resize a disk.
Migrar particiones dentro de un broker
Descripción
Si el espacio de un disco en un broker está lleno, el directorio de registros de Kafka en ese disco pasa a estado offline. Como resultado, no puede utilizar la herramienta kafka-reassign-partitions.sh para migrar particiones. En este caso, puede realizar operaciones directamente en la instancia de Elastic Compute Service (ECS) donde se despliega el broker para mover los datos de la réplica de partición a otros discos del mismo broker y modificar los metadatos en el directorio de datos de Kafka correspondiente. Esto ayuda a resolver el problema de espacio insuficiente en disco.
Escenario
Esta estrategia aplica a escenarios donde el uso de disco en un broker está desequilibrado debido a la presencia de un disco lleno junto con otros discos que tienen un uso relativamente bajo.
Notas de uso
Este método solo admite la migración de particiones entre discos dentro del mismo nodo.
La migración de particiones puede generar puntos críticos de E/S en los discos, lo cual podría afectar el rendimiento del clúster. Debe evaluar el impacto del tamaño de los datos y la duración de cada migración en sus servicios.
Dado que este método implica operaciones no estándar, pruébelo en la versión correspondiente de Kafka antes de aplicarlo en un clúster de producción.
Procedimiento
Si el espacio de un disco está lleno, el directorio de registros de Kafka en ese disco pasa a estado offline. En este caso, no puede utilizar la herramienta kafka-reassign-partitions.sh para migrar particiones. Esta sección describe cómo realizar operaciones no estándar para migrar particiones moviendo archivos directamente y modificando los metadatos relacionados con Kafka.
-
Cree un topic de prueba.
Inicie sesión en el nodo maestro del clúster Kafka de origen mediante SSH. Para obtener más información, consulte Log on to a cluster.
-
Ejecute el siguiente comando para crear un topic de prueba. Las réplicas de partición se distribuyen en el broker 0 y el broker 1.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-topic --replica-assignment 0:1 --createPuede ejecutar el siguiente comando para consultar los detalles del topic.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-topic --describeLa información devuelta muestra que el broker 0 se encuentra en la lista de réplicas sincronizadas (ISR).
Topic: test-topic PartitionCount: 1 ReplicationFactor: 2 Configs: Topic: test-topic Partition: 0 Leader: 0 Replicas: 0,1 ISR: 0,1
-
Ejecute el siguiente comando para simular la escritura de datos.
kafka-producer-perf-test.sh --topic test-topic --record-size 1000 --num-records 600000000 --print-metrics --throughput 10240 --producer-props linger.ms=0 bootstrap.servers=core-1-1:9092 -
Modifique los permisos del directorio de registros en el broker 0.
-
En el nodo maestro, cambie a la cuenta
emr-user.su emr-user -
Inicie sesión en el nodo core correspondiente sin contraseña.
ssh core-1-1 -
Utilice
sudopara obtener permisos deroot.sudo su - root -
Ejecute el siguiente comando para ubicar el disco donde se encuentra la partición.
sudo find / -name test-topic-0La siguiente respuesta indica que la partición se encuentra en el directorio /mnt/disk4/kafka/log.
/mnt/disk4/kafka/log/test-topic-0 -
Ejecute el siguiente comando para establecer los permisos del directorio de registros en el broker 0 en
000. Esto simula un error de disco que impide la escritura en el directorio.sudo chmod 000 /mnt/disk4/kafka/log -
Ejecute el siguiente comando para comprobar el estado de
test-topic.kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-topic --describeLa información devuelta muestra que el broker 0 ya no aparece en la lista ISR.
Topic: test-topic PartitionCount: 1 ReplicationFactor: 2 Configs: Topic: test-topic Partition: 0 Leader: 1 Replicas: 0,1 ISR: 1
-
-
Detenga el servicio Kafka en el broker 0.
Detenga el servicio Kafka en el Broker 0 desde la consola de EMR.
-
Ejecute el siguiente comando para mover la partición de
test-topicdel broker 0 a otro disco en el mismo nodo.mv /mnt/disk4/kafka/log/test-topic-0 /mnt/disk1/kafka/log/ -
Modifique los archivos de metadatos.
Con base en los archivos de metadatos del directorio de origen /mnt/disk4/kafka/log y del directorio de destino /mnt/disk1/kafka/log, los archivos que deben modificarse incluyen replication-offset-checkpoint y recovery-point-offset-checkpoint.
-
Modifique el archivo replication-offset-checkpoint moviendo las entradas relacionadas con test-topic desde el archivo replication-offset-checkpoint del directorio de registros original hacia el archivo replication-offset-checkpoint del directorio de registros destino, y modifique el número de entradas en el archivo. En el archivo replication-offset-checkpoint modificado, la primera línea 0 corresponde al número de versión, la segunda línea 18 indica el número total de entradas del archivo (este valor debe coincidir con la cantidad real de líneas de entrada), y la última línea test-topic 0 4901378 representa el registro de desplazamiento de la partición migrada. Contenido de ejemplo:
0 18 __consumer_offsets 22 0 __consumer_offsets 8 0 __consumer_offsets 21 0 __consumer_offsets 9 0 __consumer_offsets 35 0 __consumer_offsets 33 0 __consumer_offsets 23 0 __consumer_offsets 47 0 __consumer_offsets 2 0 __consumer_offsets 14 0 __consumer_offsets 45 0 __consumer_offsets 10 0 __consumer_offsets 4 0 __consumer_offsets 17 0 __consumer_offsets 30 0 __consumer_offsets 36 0 __consumer_offsets 48 0 test-topic 0 4901378 -
Modifique el archivo recovery-point-offset-checkpoint. Mueva las entradas correspondientes a test-topic desde el archivo recovery-point-offset-checkpoint del directorio de registros original hacia el archivo recovery-point-offset-checkpoint del directorio de registros destino, y luego actualice el número total de entradas en el archivo de destino. A continuación se muestra un ejemplo del archivo recovery-point-offset-checkpoint modificado. En este ejemplo,
13en la segunda línea representa el número total de entradas, ytest-topic 0 4952628corresponde a la entrada migrada para test-topic:0 13 __consumer_offsets 22 0 __consumer_offsets 8 0 __consumer_offsets 21 0 __consumer_offsets 9 0 __consumer_offsets 35 0 __consumer_offsets 33 0 __consumer_offsets 23 0 __consumer_offsets 47 0 __consumer_offsets 2 0 __consumer_offsets 14 0 test-topic 0 4952628 __consumer_offsets 45 0 __consumer_offsets 10 0
-
-
Ejecute el siguiente comando para restaurar los permisos correctos del directorio de registros en el broker 0 de origen.
sudo chmod 755 /mnt/disk4/kafka/log -
Inicie el servicio Kafka en el broker 0.
Inicie el servicio Kafka en el Broker 0 desde la consola de EMR.
-
Ejecute el siguiente comando para comprobar que el estado del clúster es normal.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-topic --describe
Borrar registros
Descripción
Si el espacio de un disco en un broker está lleno, elimine los datos de registro de negocio en orden cronológico, desde los más antiguos hasta los más recientes, hasta liberar suficiente espacio en disco. No es posible eliminar los datos de los topics internos de un clúster Kafka.
Escenario
Esta estrategia aplica a escenarios donde es viable eliminar datos de registro de negocio obsoletos de un disco lleno.
Si no se modifica el periodo de retención de los datos, el disco podría volver a llenarse pronto. Por lo tanto, esta estrategia suele aplicarse en escenarios donde se produce un aumento repentino de datos debido a circunstancias especiales.
Notas de uso
No puede eliminar datos de los topics cuyos nombres comienzan con guion bajo (_).
Procedimiento
Inicie sesión en la máquina afectada.
-
Localice el disco lleno y elimine los datos de negocio innecesarios.
Siga estos principios para la limpieza de datos:
No elimine directamente los directorios de datos de Kafka para evitar pérdidas de datos innecesarias.
Identifique los topics que consumen gran cantidad de espacio o que ya no son necesarios. Para las particiones seleccionadas dentro de estos topics, comience por eliminar los segmentos de registro más antiguos. Esto incluye borrar los archivos
.log,.indexy.timeindexde cada segmento. No elimine datos de topics internos, como__consumer_offsetsy_schema.
Reinicie el servicio Kafka en el broker afectado para que el directorio de registros vuelva a estar en línea.