Informazioni sull'utilizzo del disco riservato

Scopri come l'archivio utilizzabile di un'istanza di Event Streams viene utilizzata dagli argomenti e dalle partizioni che vengono creati e le impostazioni di configurazione che applichi.

Prima di tutto, è importante notare che l'archiviazione definita di una istanza Event Streams è utilizzabile. Ciò significa che non è necessario preoccuparsi dello storage utilizzato dalle repliche (perché tutti gli argomenti hanno il fattore di replica impostato su 3) che non viene preso dallo storage utilizzabile. Ciò rende le cose semplici ed è possibile pianificare come associare la conservazione di tali messaggi all'utilizzo della memoria.

Informazioni su come Kafka memorizza i dati

Kafka consente agli utenti di configurare i limiti di conservazione sugli argomenti.

La configurazione retention.bytes è il numero totale di byte assegnati per i messaggi per ogni partizione dell'argomento. Se viene superato, Kafka elimina i messaggi più vecchi. Quindi, ad esempio, se generalmente si inviano 200 MB al giorno di messaggi a un singolo argomento della partizione e si desidera conservarli per 5 giorni, impostare retention.bytes su 1 GB (200 MB x 5 giorni).

Se si trattava di più di 10 partizioni, impostare retention.bytes = 100 MB (1 GB / 10 partizioni).

Internamente Kafka divide ogni partizione in segmenti di log. Anche questa è una proprietà che è possibile impostare, log.segment.size, il valore predefinito è 512 MB. Quando abbiamo detto che Kafka elimina i messaggi più vecchi, elimina davvero il segmento di log più vecchio. Per questo motivo, Kafka deve conservare lo spazio per un ulteriore segmento di log, oltre al numero di segmenti di log richiesti per soddisfare la configurazione retention.bytes.

Vedi i seguenti esempi.

 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.

È necessaria ulteriore memoria per partizione per gli indici. Per ciascun segmento di log, Kafka memorizza anche due indici. Le dimensioni sono definite da segment.index.size, che è anche configurabile e ha un valore predefinito di 10 MB. Per riferimento, la memoria utilizzata dagli indici viene calcolata come segue:

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

dove

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

Gestione dell'archiviazione con Event Streams

Quando si eseguono operazioni di gestione argomenti, come la creazione di argomenti, la creazione di partizioni o la modifica delle configurazioni degli argomenti, Event Streams garantisce che sia disponibile memoria sufficiente per soddisfare l'operazione. A tale scopo, per ogni argomento Event Streams calcola la "dimensione riservata" per ogni argomento utilizzando il seguente metodo.

Per gli argomenti che hanno un'impostazione cleanup.policy di compact, la dimensione riservata utilizzata per ogni partizione è sempre 1 GB. Quando cleanup.policy per un argomento è impostato su compact, tutti i valori utilizzati per le impostazioni dell'argomento retention.bytes o retention.ms vengono ignorati.

Per gli argomenti che hanno un'impostazione cleanup.policy di delete o compact, delete, la dimensione riservata utilizzata per ciascuna partizione viene calcolata come segue:

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

dove

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

La percentuale di archiviazione riservata totale viene visualizzata anche in IBM Cloud Monitoring dalla metrica ibm_eventstreams_instance_reserved_disk_space_percent.

Le richieste per creare un nuovo argomento o aggiungere partizioni a un argomento esistente vengono rifiutate se risultano nella quantità totale di archiviazione riservata superiore al 90% [1] dell'archiviazione configurata per l'istanza Event Streams. Le richieste rifiutate ricevono un errore PolicyViolation che indica che è stato raggiunto il limite di memoria riservata per l'istanza. Se viene raggiunto il limite di memoria riservata, è necessario eliminare gli argomenti o aumentare la quantità di memoria configurata per l'istanza prima di poter creare ulteriori argomenti.

Il calcolo della dimensione riservata può cambiare in futuro se vengono aggiornati i requisiti di archiviazione Kafka.

Esempi

Un effetto non ovvio è che Kafka può riservare più spazio di archiviazione del previsto a seconda delle tue configurazioni dell'argomento. Vedi i seguenti esempi.

  1. Un argomento con retention.bytes di 1 GB e con una dimensione del segmento di log di 512 MB:

    Con una partizione, riserva circa 1.5 GB di memoria.
    In questo caso, la dimensione riservata è significativamente maggiore della dimensione di conservazione.

  2. Un argomento con retention.bytes di 50 GB e con una dimensione del segmento di log di 512 MB:

    Con una partizione, riserva circa 50.5 GB di memoria.

    In questo caso, la dimensione riservata è molto vicina alla dimensione di conservazione.

  3. Un argomento con retention.bytes di 1 GB e con una dimensione del segmento di log di 128 MB:

    Con una partizione, riserva circa 1.1 GB di memoria.

    In questo caso, la dimensione riservata è molto vicina alla dimensione di conservazione.


  1. Event Streams utilizza parte dell'archiviazione assegnata a un'istanza per entrambe le funzioni di gestione interne e come riserva operativa per segmenti di log idonei per l'eliminazione. ↩︎