Как я могу получить брокера, которому принадлежит тема в Java - PullRequest
1 голос
/ 21 мая 2019

У меня есть кластер кафки брокеров.Я пытаюсь получить метрики на уровне тем, что я успешно выполнил для тем, относящихся к конкретному брокеру, на который указывает код.Zookeeper возвращает список всех тем по всем брокерам.Это приводит к сбоям, когда я пытаюсь получить метрики по каждой теме.

Я использую эту функцию для получения списка тем от zookeeper:

ZooKeeper zk = new ZooKeeper("kafka.ip:port", 1000, null);
return zk.getChildren("/brokers/topics", false);

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

Это приводит к моему вопросу: есть ли способ получить посредника, на котором живет тема?Есть ли лучший способ сделать это?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Чтобы получить брокеров, у которых остались разделы темы, вы можете использовать интерфейс AdminClient. Что-то вроде

AdminClient kafkaClient = new AdminClient(properties)) 
DescribeTopicsResult result = kafkaClient.describeTopics(Collections.singleton(topicName));
Map<String, TopicDescription> descriptions = result.all().get();
descriptions.values().stream().forEach(t->{
    t.partitions().stream().forEach(p->{
        Node leader = p.leader(); //here is a leader for partition
        List<Node> replicas = p.replicas(); //here are the replicas
     });
 });

Хотя я не уверен, что это хорошая идея в вашем случае.

0 голосов
/ 21 мая 2019

Обычно тема Кафки делится на несколько разделов. Эти разделы распределены по нескольким брокерам. Учитывая это, не совсем понятно, что бы вы хотели получить.

...