2015-07-12 5 views
2

Я хочу иметь 1 тему с 10 разделами. Я использую конфигурацию по умолчанию Kafka. Я создаю 1 тему с 10 париками с помощью этого вспомогательного скрипта, и теперь я собираюсь создать для него сообщения.Kafka не заполняет разделы равномерно в теме

Дело в том, что кажется, что существует только 5 разделов, из которых потребители извлекают данные.

Опишем это более подробно.

Я знаю, что общий материал, в котором вам нужен один потребительский поток на раздел. Я хочу иметь возможность совершать смещения на каждый раздел, и это возможно только тогда, когда у меня есть 1 поток на потребительский коннектор для каждого раздела (я использую потребитель высокого уровня).

Так я создаю 10 потоков, в каждом потоке я звоню Consumer.createJavaConsumerConnector(), где я делаю это

topicCountMap.put("mytopic", 1); 

и в конце концов, у меня есть 1 итератор, который потребляет сообщения с 1 раздела.

Когда я делаю это 10 раз, у меня есть 10 потребителей, потребителей за поток на раздел, где я могу совершать смещения независимо друг от друга на раздел, потому что, если бы я поместил другое число из 1 в карту темы, у меня было бы больше 1 потребителя поток для этой темы, поэтому, если я собираюсь совершить смещение с созданным экземпляром пользователя, он будет передавать их для всех потоков, что нежелательно, следовательно, для нескольких разделов, которые нежелательны.

Но дело в том, что, когда я использую потребителей, задействовано только 5 потребителей, и кажется, что другие потоки простаивают, но я не знаю почему.

Первой возможной причиной является то, что даже у меня есть 10 разделов, только 5 разделов имеют сообщения, так что остальные 5 пользователей простаивают, но я не понимаю, как возможно, что сообщения не распространяются равномерно по всем разделам, когда я использую производители. Я посылаю, как 1M сообщений, поэтому, если говорят, что они распределены равномерно, каждый париж должен иметь хотя бы какое-то сообщение в нем.

// EDIT

мне удалось создать 10 разделов в тему, но у меня есть только 7 потребителей. Это просто чудо для меня.

Дело в том, что я создаю эти потребительские потоки в цикле. Поэтому я запускаю первую нить (подчиняюсь службе исполнителя), затем другую, потом другую и так далее.

Таким образом, сценарий заключается в том, что первый потребитель получает все 10 разделов, затем 2-й подключается, поэтому он разделяет между этими двумя значениями 5 и 5 (или что-то подобное), затем соединяются другие потоки.

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

Но из результатов я вижу, что есть только 7 потребителей, и, согласно потребляемым сообщениям, кажется, что они разбиты как 3,2,1,1,1,1,1 разделенные по разделам. Да, эти 7 потребителей охватили все 10 разделов, но почему потребители с более чем 1 разделом не разделяют и не дают разделов оставшимся 3 потребителям?

Мне очень интересно, что происходит с оставшимися 3ми нитями и почему они не «захватывают» разделы от потребителей, у которых есть более 1 раздела.

ответ

0

Я видел подобное поведение, когда я (случайно) обращался к теме программно, прежде чем создавать тему через скрипт администратора. В этой ситуации количество разделов, а также другие настройки конфигурации темы по умолчанию соответствуют значениям в broker.config

+0

Что вы подразумеваете, обратившись к нему программно? – stewenson

+0

Это когда вы вызываете производителя или потребителя в свой код Java –