Sobes.tech
Senior
20

Как проверять что топик жив и на нём нужное количество партиций, что в партиции есть хотя бы лидер?

Компании, где спрашивали
СБК ПАРУС

Ответ от нейросети

sobes.tech AI

Для проверки состояния топика в Apache Kafka и его партиций, включая наличие лидера, обычно используют AdminClient API.

Основные шаги:

  1. Получить метаданные топика через метод describeTopics.
  2. Проверить, что топик существует и количество партиций соответствует ожидаемому.
  3. Для каждой партиции проверить, что у неё есть лидер (leader != -1).

Пример на Java с использованием Kafka AdminClient:

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.DescribeTopicsResult;
import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.common.TopicPartitionInfo;

import java.util.Collections;
import java.util.concurrent.ExecutionException;

public boolean isTopicHealthy(AdminClient adminClient, String topicName, int expectedPartitions) throws ExecutionException, InterruptedException {
    DescribeTopicsResult result = adminClient.describeTopics(Collections.singletonList(topicName));
    TopicDescription description = result.values().get(topicName).get();

    // Проверяем количество партиций
    if (description.partitions().size() != expectedPartitions) {
        return false;
    }

    // Проверяем наличие лидера в каждой партиции
    for (TopicPartitionInfo partitionInfo : description.partitions()) {
        if (partitionInfo.leader() == null || partitionInfo.leader().id() == -1) {
            return false;
        }
    }

    return true;
}

Таким образом, метод возвращает true, если топик существует, количество партиций совпадает с ожидаемым, и у каждой партиции есть лидер. Если какая-то проверка не проходит, возвращается false.

Это позволяет убедиться, что топик "живой" и готов к работе.