Кафка старая проблема потребительского перебаланса - PullRequest
0 голосов
/ 03 октября 2018

В нашей системе мы используем старую версию kafka (0.9.0.1) и старый потребительский API scala в приложении tomcat.В большинстве случаев все работает нормально, но иногда, когда серверы, на которых работают потребители, интенсивно используются некоторыми другими задачами в приложении, потребители перестают отвечать на запросы, что вызывает ожидаемый баланс, и потребитель удаляется из своих разделов, а другие потребителиused.

У меня вопрос: есть ли простой способ перерегистрации потребителя при его возврате?

Я знаю, что старые потребители хранят информацию о потребителях раздела в Zookeeper.и думал, что у нас может быть задача, которая будет периодически проверять, зарегистрирован ли наш потребитель там, и перезапускать потребителя, если нет, но я не уверен, что именно мы должны проверить там.Может кто-нибудь указать мне какую-то документацию о данных, которые kafka хранит в zookeeper (к сожалению, ничего не нашел в официальной документации :()?

1 Ответ

0 голосов
/ 04 октября 2018

По сути, вам нужны фиксированные назначения, и группы потребителей никогда не перебалансируются.Если в старом клиенте Scala есть способ отключить автоматическую перебалансировку потребителя или даже увеличить время ожидания перебалансировки до гораздо более высокого значения, это тоже может сработать, но я не смог найти, как это сделать со старым потребителем Scala.

Однако, можно использовать фиксированную тему / разделы при использовании более новых потребителей Java, также доступных в той же версии 0.9 kafka.Ищите Subscribing To Specific Partitions в последних Javadocs:

https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

Subscribing To Specific Partitions
   In the previous examples we subscribed to the topics we were interested in and 
   let Kafka give our particular process a fair share of the partitions for those topics. 
   This provides a simple load balancing mechanism so multiple instances of our program 
   can divided up the work of processing records.

   In this mode the consumer will just get the partitions it subscribes to 
   and if the consumer instance fails no attempt will be made to 
   rebalance partitions to other instances.
...