Можно ли масштабировать задачи потребителей по количеству разделов? - PullRequest
0 голосов
/ 06 марта 2019

У нас есть проблемы с производительностью среди наших потребителей.Точнее, в ЧТО это делается с сообщениями.

Как правило, мы получаем файлы из 2000 строк, разбитых на 6000 событий Кафки.

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

Проблема в том, что для обработки каждого сообщения потребителю может потребоваться до 6 секунд.Таким образом, весь файл обрабатывается примерно за 1 час.

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

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

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

Но мне интересно, могли бы мы представить себе другое решение, способ, позволяющий большему количеству работников получать больше сообщений параллельно?

И кроме того, кто-то может объяснить, почему использовалась стратегияв Кафке (то есть один потребитель давно подключен к выделенному разделу) - это правильное решение?

Я имею в виду, что мы могли бы представить другие решения с большим количеством потребителей, чем с разделами: потребитель получает сообщение, «отключается» от посредника, обрабатывает сообщение, и в течение этого времени другой потребитель может «подключиться» и получитьсообщение из этого же раздела "отключить", обработать сообщение, и третий потребитель может подключиться и ........ (Один из членов команды сказал: "Ху. Кафка не масштабируется. Мы не можем добавить больше потребителей"".)

1 Ответ

0 голосов
/ 06 марта 2019

Можно ли масштабировать задачи потребителей по количеству разделов?

Нет.

Проще говоря, разбиение - это ваша единица масштаба в Кафке.Если вам нужно обрабатывать на более высоком уровне параллелизма, вам нужно больше разделов.Так устроен Кафка.

Как вы упомянули, вы можете использовать Kafka Streams и т. Д. Для перераспределения вашей темы на большее количество разделов, что будет иметь влияние на порядок.

Вы также можете использовать KSQL , чтобы упростить эту задачу:

CREATE STREAM foo_repartitioned \
  WITH (PARTITIONS=256) AS \
SELECT * FROM foo;

"Кафка не масштабируется. Мы не можем добавить больше потребителей."

Вы можете добавить больше потребителей.Вам просто нужно заранее спроектировать темы с соответствующим уровнем разделов; -)

...