Я хочу иметь 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 раздела.
Что вы подразумеваете, обратившись к нему программно? – stewenson
Это когда вы вызываете производителя или потребителя в свой код Java –