в разделах kafka разделены, и даже если вы можете добавить разделы в раздел, перераспределение разделено не будет: все данные, уже записанные в раздел, остаются там, новые данные будут распределены между существующими разделами (в циклическом порядке)если вы не определяете ключи, в противном случае один ключ всегда будет попадать в один и тот же раздел, если вы не добавляете разделы.)
Но если у вас есть группа потребителей, и вы добавляете или удаляете потребителей в эту группусуществует групповая перебалансировка, при которой каждый потребитель получает свою долю разделов, из которых он исключительно потребляет.
Таким образом, если у вас есть 3 раздела (с равномерно распределенными сообщениями среди них) и 2 потребителя (в одной группе), то один потребительбудет иметь в два раза больше сообщений для обработки, чем другие;с 3 потребителями каждый будет потреблять один раздел;с четырьмя потребителями один будет бездействовать ...
Так как у вас уже есть равномерно распределенные сообщения (что хорошо), у вас должно быть столько потребителей, сколько у вас есть разделов, и если это все еще недостаточно быстро, выможет добавить n разделов и n потребителей.(Конечно, вы также можете попытаться оптимизировать потребителя, но это уже другая история ...)
Добавлено для ответа на комментарий:
Раз потребитель - отданная группа - использует раздел, он будет продолжать это делать и будет единственным из группы, использующей этот раздел, даже если многие другие потребители из той же группы простаивают.В одной группе раздел никогда не разделяется между потребителями.(Если потребитель выходит из строя, другой продолжит работу, и если новый потребитель войдет в группу, произойдет перебалансировка, но в любом случае только один потребитель будет работать с одним разделом в данный момент времени.)
Итак, одинПодход, как сказано в вашем комментарии, будет равномерно распределять нагрузку по разделам.Другой подход - иметь тему, посвященную дорогостоящим работам, чтобы у нее было много разделов и много потребителей;и пусть тема для недорогих рабочих мест будет вызывать лихорадку у потребителей.
Последний подход, который я бы не рекомендовал, заключался в том, чтобы не использовать функции группы потребителей и управлять собой, как вы потребляете из Kafka, с помощью присваивания и поискаметоды от потребителя.(См. KafkaConsumer JavaDoc для получения дополнительной информации).Например, Spark Structured Streaming использует этот подход, но он намного сложнее ...