Масштабирование с более чем 200 темами Kafka

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

введите здесь описание изображения

Я хочу, чтобы мой кластер приложений разделял нагрузку со всех 200+ тем. Например, когда новый узел приложения добавляется в кластер, он должен «украсть» некоторые подписки на темы у старых узлов, чтобы нагрузка снова стала равномерно распределенной.

Насколько я понимаю, Kafka partinions/consumer groups помогают распараллелить тему, а не распределять нагрузку между несколькими темами.


person silent-box    schedule 25.11.2017    source источник
comment
Можете ли вы, чтобы все ваши приложения подписались на все 200+ тем с подпиской на регулярное выражение? Тогда все они могут быть в одной потребительской группе   -  person Hans Jespersen    schedule 26.11.2017


Ответы (2)


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

Кроме того, при создании новой темы/раздела потребителю потребуется «metadata.max.age.ms» (по умолчанию — 5 минут), чтобы начать использовать ее. Обязательно установите «auto.offset.reset» на «самый ранний», чтобы не пропустить данные.

Наконец, вы можете использовать регулярное выражение для подписки на все эти темы (если это возможно).

person sap1ens    schedule 28.11.2017

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

Kafka Partitions — это способ распараллелить потребление сообщений из одной темы. Каждый раздел будет полностью использоваться одним потребителем в группе потребителей, привязанной к теме, поэтому общее количество разделов для темы должно быть по крайней мере таким же, как количество потребителей в группе потребителей, чтобы иметь смысл функции разделения. .

Таким образом, здесь у вас будет более 200 тем, каждая из которых имеет N разделов (где N больше или равно ожидаемому максимальному количеству приложений), и каждое приложение должно потреблять из всех 200+ тем. Потребители должны маркировать себя именем группы потребителей, каждая запись, опубликованная в теме, доставляется одному экземпляру потребителя в каждой подписавшейся группе потребителей. Все потребители могут использовать одну и ту же группу потребителей.

См. документацию по Kafka, чтобы получить еще лучшее объяснение...

person pgras    schedule 28.11.2017