Кафка простой потребитель периодически пропускает сообщения

1

У меня есть приложение 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, но он не работает.

Может кто-то помочь.

Теги:
apache-kafka
kafka-consumer-api

1 ответ

2

kafka-simple-consumer.sh просто создает пользователя, который читает сообщения из одного раздела. Таким образом, ваша команда просто читает одно сообщение в partition 0 of myTopic из brokerhost:9092. Если раздел 1 не находится в одном брокере, он не будет работать так, как вы делали. (Для получения дополнительной информации см. Код из GitHub)

Если вы можете получить доступ к узлу Zookeeper, вы можете просто проверить, как разделы распределяются в кластере с помощью

bin/kafka-topics.sh --describe --zookeeper zookeeperhost:2181 --topic myTopic

но если вы не можете получить доступ к хосту Zookeeper, есть два способа, о которых я могу думать.

  1. Предоставьте список всех брокеров в качестве параметра и попробуйте номера разделов от 0 до N. Вы можете предоставить несколько брокер --broker-list в формате broker1:port2,broker2:port2,broker3:port3. Затем вы можете выяснить, сколько разделов существует во всем кластере, но вы все еще не знаете, какой брокер имеет какие разделы.
  2. Вручную проверьте каталог журнала каждого брокера. Проверьте /tmp/kafka-logs (если вы используете каталог журнала по умолчанию). Вы найдете каталоги, такие как myTopic-0, myTopic-1 ,... которые находятся в формате topic-partition#. Вы можете проверить, у какого брокера есть какие разделы вручную с этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню