У меня есть приложение Kafka, где я употребляю сообщения с помощью kafka-console-consumer.sh следующим образом:
$./kafka-console-consumer.sh --zookeeper zookeeperhost:2181 --topic myTopic
который дает все сообщения, которые я пишу для брокера Kafka через потребителя Kafka без пропусков.
Недавно я развернул приложение в другой среде, где zookeeperhost недоступен (по какой-то причине). Поэтому я использую kafka-simple-consumer-shell.sh вместо этого, как показано ниже:
$./kafka-simple-consumer-shell.sh --broker-list brokerhost:9092 --topic myTopic --partition 0 --max-messages 1
Но с этим я вижу несколько сообщений (около 2-4 в 5000), которые пропускают. Может кто-нибудь объяснить, как kafka-simple-consumer-shell.sh читает сообщения.
Я сомневаюсь, что, вероятно, некоторые сообщения отправляются в какой-то другой раздел, и, поскольку я просто читаю из раздела 0, я не получаю все сообщения каждый раз. Но я не знаю, как проверить, сколько там разделов? и каковы идентификаторы для других разделов? Я пробовал с 1, но он не работает.
Может кто-то помочь.
kafka-simple-consumer.sh
просто создает пользователя, который читает сообщения из одного раздела. Таким образом, ваша команда просто читает одно сообщение в partition 0 of myTopic
из brokerhost:9092
. Если раздел 1 не находится в одном брокере, он не будет работать так, как вы делали. (Для получения дополнительной информации см. Код из GitHub)
Если вы можете получить доступ к узлу Zookeeper, вы можете просто проверить, как разделы распределяются в кластере с помощью
bin/kafka-topics.sh --describe --zookeeper zookeeperhost:2181 --topic myTopic
но если вы не можете получить доступ к хосту Zookeeper, есть два способа, о которых я могу думать.
--broker-list
в формате broker1:port2,broker2:port2,broker3:port3
. Затем вы можете выяснить, сколько разделов существует во всем кластере, но вы все еще не знаете, какой брокер имеет какие разделы./tmp/kafka-logs
(если вы используете каталог журнала по умолчанию). Вы найдете каталоги, такие как myTopic-0
, myTopic-1
,... которые находятся в формате topic-partition#
. Вы можете проверить, у какого брокера есть какие разделы вручную с этим.