Entendendo o uso de disco reservado

Saiba como o armazenamento utilizável de uma instância Event Streams é usado pelos tópicos e partições que são criados e as definições de configuração que você aplica.

Primeiro, é importante observar que o armazenamento definido de uma instância do Event Streams é um armazenamento utilizável. Isso significa que você não precisa se preocupar com o armazenamento usado por réplicas (porque todos os tópicos têm seu fator de replicação configurado como 3) que não é obtido do armazenamento utilizável. Isso mantém as coisas simples e você pode planejar como mapear a retenção dessas mensagens para o uso de armazenamento.

Entendendo como o Kafka armazena dados

O Kafka permite que os usuários configurem os limites de retenção em tópicos.

A configuração retention.bytes é o número total de bytes alocados para mensagens de cada partição do tópico. Se for excedido, o Kafka excluirá mensagens mais antigas. Portanto, por exemplo, se você geralmente estiver enviando 200 MB por dia de mensagens para um tópico de partição única e desejar mantê-las por 5 dias, configure retention.bytes para 1 GB (200 MB x 5 dias).

Se isso fosse mais de 10 partições, você configuraria retention.bytes = 100 MB (1 GB / 10 partições).

Internamente, o Kafka divide cada partição em segmentos de log. Esta é novamente uma propriedade que pode ser configurada, log.segment.size, o padrão é 512 MB Quando mencionamos que o Kafka exclui as mensagens mais antigas, ele realmente exclui o segmento de log mais antigo Por esse motivo, o Kafka precisa manter espaço para um segmento de log extra, além do número de segmentos de log necessários para satisfazer a configuração retention.bytes.

Consulte os exemplos a seguir.

 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.

Mais armazenamento é necessário por partição para índices. Para cada segmento de log, o Kafka também armazena dois índices. Seus tamanhos são definidos por segment.index.size, que também é configurável e tem um padrão de 10 MB.. Para referência, o armazenamento usado por índices é calculado da seguinte forma:

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

em que

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

Gerenciando o armazenamento com o Event Streams

Ao executar operações de administração de tópico, como criar tópicos, criar partições ou alterar configurações de tópico, Event Streams assegura que armazenamento suficiente esteja disponível para satisfazer a operação. Para fazer isso, para cada tópico, o Event Streams calcula o "tamanho reservado" para cada tópico usando o método a seguir.

Para tópicos que possuem uma configuração cleanup.policy de compact, o tamanho reservado consumido para cada partição é sempre 1 GB. Quando o cleanup.policy para um tópico é configurado como compact, quaisquer valores usados para as configurações de tópicos retention.bytes ou retention.ms serão ignorados

Para tópicos que possuem uma configuração cleanup.policy de delete ou compact, delete, o tamanho reservado consumido para cada partição é calculado da seguinte forma:

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

em que

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

A porcentagem total de armazenamento reservado também é exibida na IBM Cloud Monitoring pela métrica ibm_eventstreams_instance_reserved_disk_space_percent.

As solicitações para criar um novo tópico ou incluir partições em um tópico existente serão rejeitadas se resultarem na quantia total de armazenamento reservado excedendo 90% [1] do armazenamento configurado para a instância Event Streams. Solicitações rejeitadas recebem um erro PolicyViolation explicando que o limite de armazenamento reservado para a instância foi atingido. Se o limite de armazenamento reservado for atingido, será necessário excluir tópicos ou aumentar a quantia de armazenamento configurada para a instância antes que tópicos adicionais possam ser criados.

O cálculo de tamanho reservado poderá ser alterado no futuro se os requisitos de armazenamento do Kafka forem atualizados

Exemplos

Um efeito não óbvio é que o Kafka pode reservar mais armazenamento do que o esperado, dependendo de suas configurações de tópico Consulte os exemplos a seguir.

  1. Um tópico com retention.bytes de 1 GB e com um tamanho do segmento de log de 512 MB:

    Com uma partição, ele reservaria cerca de 1,5 GB de armazenamento.
    Nesse caso, o tamanho reservado é significativamente maior do que o tamanho de retenção.

  2. Um tópico com retention.bytes de 50 GB e com um tamanho do segmento de log de 512 MB:

    Com uma partição, ele reservaria cerca de 50,5 GB de armazenamento.

    Nesse caso, o tamanho reservado está muito próximo do tamanho de retenção.

  3. Um tópico com retention.bytes de 1 GB e com um tamanho do segmento de log de 128 MB:

    Com uma partição, ele reservaria cerca de 1,1 GB de armazenamento.

    Nesse caso, o tamanho reservado está muito próximo do tamanho de retenção.


  1. O Event Streams usa parte do armazenamento designado a uma instância para ambas as funções de gerenciamento interno e como uma reserva operacional para segmentos de log elegíveis para exclusão. ↩︎