Uso del disco reservado

Descubra cómo los temas y las particiones que se crean y los valores de configuración que aplica utilizan el almacenamiento utilizable de una instancia de Event Streams.

En primer lugar, es importante tener en cuenta que el almacenamiento definido de una instancia de Event Streams es almacenamiento utilizable. Esto significa que no es necesario preocuparse por el almacenamiento utilizado por las réplicas (porque todos los temas tienen su factor de réplica establecido en 3) que no se toma del almacenamiento utilizable. Esto simplifica las cosas y puede planificar cómo correlacionar la retención de estos mensajes con el uso de almacenamiento.

Cómo Kafka almacena datos

Kafka permite a los usuarios configurar límites de retención en los temas.

La configuración de retention.bytes es el número total de bytes asignados para los mensajes para cada partición del tema. Si se supera, Kafka suprime los mensajes más antiguos. Por ejemplo, si normalmente envía 200 MB al día de mensajes a un tema de una sola partición y desea conservarlos durante 5 días, establezca retention.bytes en 1 GB (200 MB x 5 días).

Si se trata de más de 10 particiones, establecería retention.bytes = 100 MB (1 GB/10 particiones).

Internamente, Kafka divide cada partición en segmentos de registro. De nuevo, esta es una propiedad que puede establecer, log.segment.size, el valor predeterminado es 512 MB. Cuando mencionamos que Kafka suprime los mensajes más antiguos, realmente suprime el segmento de registro más antiguo. Por este motivo, Kafka necesita mantener espacio para un segmento de registro adicional, además del número de segmentos de registro necesarios para satisfacer la configuración de retention.bytes.

Consulte los ejemplos siguientes.

 retention.bytes = 1 GB
 log.segment.size = 512 MB
 Kafka needs approximately 1.5 GB per partition for the topic storage.

 retention.bytes = 100 MB
 log.segment.size = 512 MB
 Kafka needs approximately 1 GB per partition for the topic storage.

Se necesita más almacenamiento por partición para los índices. Para cada segmento de registro, Kafka también almacena dos índices. Sus tamaños se definen mediante segment.index.size, que también se puede configurar y tiene un valor predeterminado de 10 MB. Como referencia, el almacenamiento que utilizan los índices se calcula de la siguiente manera:

 2 x number.of.log.segments x segment.index.size

donde

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

Gestión del almacenamiento con Event Streams

Al realizar operaciones de administración de temas, como crear temas, crear particiones o cambiar configuraciones de tema, Event Streams garantiza que haya suficiente almacenamiento disponible para satisfacer la operación. Para ello, para cada tema, Event Streams calcula el "tamaño reservado" para cada tema utilizando el método siguiente.

Para los temas que tienen un valor cleanup.policy de compact, el tamaño reservado consumido para cada partición es siempre de 1 GB. Cuando el cleanup.policy para un tema se establece en compact, los valores utilizados para los valores de tema retention.bytes o retention.ms se ignoran.

Para los temas que tienen un valor cleanup.policy de delete o compact, delete, el tamaño reservado consumido para cada partición se calcula de la forma siguiente:

 Reserved size = retention.bytes + log.segment.size + (2 x segment.index.size x number.of.log.segments)

donde

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

El porcentaje total de almacenamiento reservado también se muestra en IBM Cloud Monitoring mediante la métrica ibm_eventstreams_instance_reserved_disk_space_percent.

Las solicitudes para crear un tema nuevo o añadir particiones a un tema existente se rechazan si dan como resultado que la cantidad total de almacenamiento reservado supere el 90% [1] del almacenamiento configurado para la instancia de Event Streams. Las solicitudes rechazadas reciben un error PolicyViolation que explica que se ha alcanzado el límite de almacenamiento reservado para la instancia. Si se alcanza el límite de almacenamiento reservado, es necesario suprimir temas o aumentar la cantidad de almacenamiento configurado para la instancia antes de que se puedan crear más temas.

El cálculo del tamaño reservado puede cambiar en el futuro si se actualizan los requisitos de almacenamiento de Kafka.

Ejemplos

Un efecto no obvio es que Kafka puede reservar más almacenamiento del esperado en función de las configuraciones de tema. Consulte los ejemplos siguientes.

  1. Un tema con retention.bytes de 1 GB, y con un tamaño de segmento de registro de 512 MB:

    Con una partición, se reservaría alrededor de 1,5 GB de almacenamiento.
    En este caso, el tamaño reservado es significativamente mayor que el tamaño de retención.

  2. Un tema con retention.bytes de 50 GB, y con un tamaño de segmento de registro de 512 MB:

    Con una partición, se reservaría alrededor de 50,5 GB de almacenamiento.

    En este caso, el tamaño reservado está muy cerca del tamaño de retención.

  3. Un tema con retention.bytes de 1 GB, y con un tamaño de segmento de registro de 128 MB:

    Con una partición, se reservaría alrededor de 1,1 GB de almacenamiento.

    En este caso, el tamaño reservado está muy cerca del tamaño de retención.


  1. Event Streams utiliza parte del almacenamiento asignado a una instancia para las funciones de gestión internas y como reserva operativa para los segmentos de registro elegibles para su supresión. ↩︎