Я прочитал следующее из confluence wiki для kafka, и я цитирую его ниже:
Почему я вижу ошибку «Не следует устанавливать смещение конца журнала для раздела» в журнале брокера?
Как правило, вы увидите следующие ошибки.
kafka.common.KafkaException: не следует устанавливать смещение конца журнала для раздела [test, 22] локальной реплики 4 ОШИБКА [ReplicaFetcherThread-0-6], Ошибка для раздела [test, 22] посреднику 6: класс kafka.common. UnknownException (kafka.server.ReplicaFetcherThread)
Распространенная проблема заключается в том, что несколько брокеров зарегистрировали один и тот же хост / порт в Zookeeper. В результате сборщик реплик запутывается при получении данных от лидера. Чтобы убедиться в этом, вы можете использовать клиентскую оболочку Zookeeper для отображения регистрационной информации каждого брокера. Путь Zookeeper и формат регистрации брокера описаны в структурах данных Kafka в Zookeeper. Вы хотите убедиться, что все зарегистрированные брокеры имеют уникальный хост / порт.
Согласно официальной документации, если я сделаю PLAINTEXT://:9092
, все интерфейсы будут регистрироваться с использованием 9092
порта. 0.0.0.0
означает, что интерфейс по умолчанию будет регистрироваться с использованием порта 9092.
Если это правда, то я не понимаю, как 0.0.0.0:9092
регистрация брокера никогда не запутает zookeeper? Я думаю, что если я явно не укажу имя хоста или ipaddr с именем порта, Zookeeper всегда запутается, поскольку все брокеры будут регистрироваться с одним и тем же интерфейсом и номером порта. Я подтвердил это, используя Zookeeper-shell.bat и выполняя команду get /broker/ids/{id}
command.
Следующее - из запроса клиентской оболочки Zookeeper на /brokers/ids
get /brokers/ids/1
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://0.0.0.0:9092"],"jmx_port":-1,"host":"0.0.0.0","timestamp":"1500646657734","port":9092,"version":4}
cZxid = 0xe0000000f
ctime = Fri Jul 21 14:17:37 UTC 2017
mZxid = 0xe0000000f
mtime = Fri Jul 21 14:17:37 UTC 2017
pZxid = 0xe0000000f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x15d6582c70b0001
dataLength = 184
numChildren = 0
get /brokers/ids/2
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://0.0.0.0:9092"],"jmx_port":-1,"host":"0.0.0.0","timestamp":"1500646657006","port":9092,"version":4}
cZxid = 0xe0000000b
ctime = Fri Jul 21 14:17:37 UTC 2017
mZxid = 0xe0000000b
mtime = Fri Jul 21 14:17:37 UTC 2017
pZxid = 0xe0000000b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x15d6582c70b0000
dataLength = 184
numChildren = 0
get /brokers/ids/3
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://0.0.0.0:9092"],"jmx_port":-1,"host":"0.0.0.0","timestamp":"1500646656895","port":9092,"version":4}
cZxid = 0xe00000008
ctime = Fri Jul 21 14:17:36 UTC 2017
mZxid = 0xe00000008
mtime = Fri Jul 21 14:17:36 UTC 2017
pZxid = 0xe00000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x35d6582c7800000
dataLength = 184
numChildren = 0
У кого-нибудь есть идея получше?
PLAINTEXT://hostname:port
также должно работать, верно? Должны ли мы вообще рекомендовать какие-либо дополнительные примечания в документации по этому поводу? - person ha9u63ar   schedule 23.07.2017