Senior
21
Как проверять что топик жив и на нём нужное количество партиций, что в партиции есть хотя бы лидер?
Companies where asked
СБК ПАРУС
Answer from AI
sobes.tech AI
Для проверки состояния топика в Apache Kafka и его партиций, включая наличие лидера, обычно используют AdminClient API.
Основные шаги:
- Получить метаданные топика через метод
describeTopics. - Проверить, что топик существует и количество партиций соответствует ожидаемому.
- Для каждой партиции проверить, что у неё есть лидер (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.
Это позволяет убедиться, что топик "живой" и готов к работе.