Изучение периода хранения в Apache Kafka: методы и примеры кода

Apache Kafka – популярная распределенная потоковая платформа, обеспечивающая высокую пропускную способность, отказоустойчивость и масштабируемые возможности обмена сообщениями. Одним из важных аспектов управления данными в Kafka является период хранения, который определяет, как долго сообщения сохраняются в теме Kafka. В этой статье мы рассмотрим различные методы настройки и управления периодом хранения в Kafka, а также примеры кода.

Понятие о сроке хранения в Kafka.
Срок хранения в Kafka — это продолжительность, в течение которой сообщения хранятся в теме Kafka, прежде чем их можно будет удалить. Kafka хранит сообщения в сегментах журнала, и каждый сегмент журнала имеет настраиваемый размер и период хранения. Срок хранения можно установить либо в зависимости от времени, либо в зависимости от размера сегмента журнала.

Методы настройки периода хранения:

  1. Хранение на основе времени.
    Kafka позволяет вам устанавливать период хранения на основе времени. Вы можете указать продолжительность, используя свойство конфигурации retention.msв конфигурации темы. В следующем примере для темы с именем «my-topic» устанавливается срок хранения в один день (24 часа).

    Properties topicConfig = new Properties();
    topicConfig.put("retention.ms", "86400000"); // 24 hours
    AdminClient adminClient = AdminClient.create(properties);
    NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor);
    newTopic.configs(topicConfig);
    adminClient.createTopics(Collections.singleton(newTopic));
  2. Хранение на основе размера.
    Kafka также позволяет вам установить период хранения в зависимости от размера сегмента журнала. Вы можете указать максимальный размер каждого сегмента журнала, используя свойство конфигурации segment.bytes. В следующем примере максимальный размер сегмента устанавливается равным 1 ГБ (1073741824 байт) для темы с именем “my-topic”.

    Properties topicConfig = new Properties();
    topicConfig.put("segment.bytes", "1073741824"); // 1 GB
    AdminClient adminClient = AdminClient.create(properties);
    NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor);
    newTopic.configs(topicConfig);
    adminClient.createTopics(Collections.singleton(newTopic));
  3. Компактное хранение.
    Kafka предоставляет дополнительную политику хранения, называемую «сжатием журнала», которая сохраняет только самое последнее значение для каждого ключа в теме. Это полезно, если вы хотите сохранить компактное представление данных в теме. Вы можете включить сжатие журнала, установив для свойства конфигурации cleanup.policyзначение «компакт» в конфигурации темы.

    Properties topicConfig = new Properties();
    topicConfig.put("cleanup.policy", "compact");
    AdminClient adminClient = AdminClient.create(properties);
    NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor);
    newTopic.configs(topicConfig);
    adminClient.createTopics(Collections.singleton(newTopic));
  4. Неограниченное хранение.
    Если вы хотите хранить сообщения в теме на неопределенный срок, вы можете установить период хранения на -1. Это гарантирует, что сообщения никогда не будут удалены в зависимости от времени.

    Properties topicConfig = new Properties();
    topicConfig.put("retention.ms", "-1");
    AdminClient adminClient = AdminClient.create(properties);
    NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor);
    newTopic.configs(topicConfig);
    adminClient.createTopics(Collections.singleton(newTopic));

Настройка периода хранения в Kafka имеет решающее значение для управления хранилищем данных и обеспечения хранения сообщений в течение желаемого срока. В этой статье мы рассмотрели различные методы установки периода хранения в Kafka, включая хранение на основе времени, хранение на основе размера, сжатие журналов и неограниченное хранение. Понимая эти методы и используя предоставленные примеры кода, вы сможете эффективно управлять периодом хранения в своих темах Kafka.