Kafka: не удается получить метаданные для темы при смене активного контроллера

У меня есть кластер Cloudera с кластеризованной службой Kafka. У меня есть два экземпляра контроллеров Kafka, скажем, C1 и C2.

Когда C1 является активным контроллером, все работает нормально. Когда по какой-то причине C2 становится активным контроллером. Некоторые из отправленных сообщений, отправленных через kafka-console-продюсер, не принимаются kafka-console-consumer (ровно половина отправленных сообщений не принимаются потребителем, одно каждые два сообщения). Я не уверен, что это связано со сменой активного контроллера, и некоторые разделы не могут быть прочитаны.

Кроме того, у меня возникнет другая проблема, если я выключу C1 и оставлю включенным только C2. Если я попытаюсь запустить ранее работающее чтение потока Streamsets из kafka, я получаю сообщение об ошибке «Не удается получить метаданные для темы XXXX». Похоже, что метаданные темы присутствуют только в C1, который в этом сценарии отключен.

Если я открою kafka-console-consumer после выключения первого брокера, я получу следующее исключение:

WARN [console-consumer-16627_node10.agatha-cluster-1515508696963-2e45e6d8-leader-finder-thread]: 
Failed to find leader for Set(testD-1, testD-0) 
(kafka.consumer.ConsumerFetcherManager$LeaderFinderThread)
kafka.common.KafkaException: fetching topic metadata for topics [Set(testD)] 
from broker [ArrayBuffer(BrokerEndPoint(183,110.250.17.242,9092))] failed

Что я делаю не так при попытке использовать кафку с несколькими брокерами?


person dhalfageme    schedule 09.01.2018    source источник


Ответы (2)


У меня была опечатка в IP-адресе следующего свойства конфигурации для одного из брокеров: advertised.listeners Из-за этого второй брокер был недоступен из других мест. Это вызывало две проблемы: сообщения, которые были потеряны, и ошибка получения метаданных темы.

person dhalfageme    schedule 10.01.2018

Сначала убедитесь, что два контроллера подключены, а затем создайте новую тему с разделом 2 и фактором репликации 2.

person Ehasanul Hoque    schedule 09.01.2018
comment
Я протестировал и получил тот же результат. Вот шаги, которые я сделал: 1. Создайте тему kafka с двумя разделами и фактором репликации 2 с двумя активными брокерами 2. Убедитесь, что поток потоковых наборов работает, может подключаться и получать данные из темы 3. Отключите активного брокера контроллера. Теперь работает только второй брокер. 4. Когда я пытаюсь запустить поток наборов потоков, происходит сбой с ошибкой. Не удается найти метаданные темы на втором брокере. - person dhalfageme; 09.01.2018
comment
Я получаю следующее исключение в kafka-console-consumer после выключения первого брокера: Не удалось получить метаданные темы с идентификатором корреляции 0 для тем [Set (testD)] от брокера [BrokerEndPoint (183,110.250.17.242,9092)] (kafka. client.ClientUtils $) java.nio.channels.ClosedChannelException - person dhalfageme; 09.01.2018
comment
Пожалуйста, проверьте, сколько работает zookeeper в вашем кластере. если у вас есть 2 zookeeper в вашем кластере, обязательно до 2 zookeeper. Если у вас есть 3 zookeeper в вашем кластере, по крайней мере, 2 zookeeper должны быть задействованы. - person Ehasanul Hoque; 10.01.2018
comment
Причину я уже нашел, см. Мой ответ. Спасибо за вашу помощь - person dhalfageme; 10.01.2018