#apache-kafka #clj-kafka
#apache-kafka #clj-kafka
Вопрос:
В моей настройке у меня есть группа потребителей с тремя процессами (3 экземпляра службы), которые могут использовать Kafka. Я обнаружил, что происходит то, что первый узел получает весь трафик. Если один узел отключен вручную, следующий узел забирает весь трафик Kafka, но последний оставшийся узел простаивает.
Желаемое поведение заключается в том, что все сообщения распределяются равномерно по всем экземплярам в группе потребителей, что, как я думал, должно произойти. Насколько я понимаю, принцип работы Kafka заключается в том, что он должен равномерно распределять сообщения между всеми членами группы потребителей. Правильно ли я понимаю? Я пытался определить, почему может случиться так, что только один член группы потребителей получает весь трафик безрезультатно. Есть мысли / предложения?
Ответ №1:
Вам нужно убедиться, что тема имеет более одного раздела, чтобы иметь возможность использовать ее параллельно. Потребитель в группе потребителей получает один или несколько выделенных разделов от брокера, но один раздел никогда не будет использоваться совместно несколькими потребителями в одной группе, если потребитель не перейдет в автономный режим. Количество разделов в теме равно максимальному количеству потребителей в группе потребителей, которые могут получать данные из темы.
Комментарии:
1. Итак, у каждого потребителя есть 4 потока, а в нашей теме двенадцать разделов, так что на каждый раздел приходится по потоку.
2. Плохо ли устанавливать раздел 10000? Если вы не знаете количество потребителей?
3. Координация разделов в настоящее время осуществляется через Zookeeper, и большее количество разделов окажет большее давление на ваш ансамбль Zookeeper с более медленным перераспределением между потребителями в результате. Другая возможная проблема, с которой вы можете столкнуться при слишком большом количестве разделов, — это количество дескрипторов файлов в брокерах.