Senior
41
Чӣ тавр санҷидани он ки мавзӯъ зинда аст ва шумораи лозимии партисияҳоро дорад, ва ки ҳадди ақал як раҳбар дар партисия вуҷуд дорад?
Ширкатҳо дар куҷо пурсиданд
СБК ПАРУС
Ҷавоб аз 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.
Это позволяет убедиться, что топик "живой" и готов к работе.