#apache-kafka #kafka-consumer-api
#apache-kafka #kafka-consumer-api
Вопрос:
У нас проблемы с производительностью у наших потребителей. Точнее, в разделе «ЧТО делается с сообщениями».
Обычно мы получаем файлы из 2000 строк, разбитые на 6000 событий Kafka.
Наш раздел X настроен на 10 разделов. В этом случае мы можем запустить до 10 потребителей в одной заданной группе, и каждый потребитель будет привязан к одному отдельному разделу до перебалансировки. Просто чтобы упомянуть об этом, порядок сообщений внутри разделов в нашем случае является обязательным.
Проблема в том, что для обработки потребителем каждого сообщения требуется до 6 секунд. Таким образом, весь файл обрабатывается примерно за 1 час.
Я также знаю, что Kafka был разработан для масштабируемости, и что эта масштабируемость управляется количеством разделов темы.
(Очевидным решением является рефакторинг кода потребителей. Это запланировано, но рабочая нагрузка нашей команды разработчиков такова, какова она есть, и этот рефакторинг может произойти не раньше, чем через несколько недель.)
Добавление новых разделов в раздел — это одно из решений, но существующие сообщения не будут автоматически перераспределяться, и нам нужно будет написать KS-app (или другой процесс). Это тоже возможно.
Но мне интересно, можем ли мы представить другое решение, способ привлечь больше работников для параллельного приема большего количества сообщений?
И помимо этого, может ли кто-нибудь объяснить, почему стратегия, используемая в Kafka (т. Е. Один потребитель, подключенный к выделенному разделу на долгое время), является правильным решением?
Я имею в виду, мы могли бы представить другие решения с большим количеством потребителей, чем разделов: потребитель получает сообщение, «отключается» от брокера, обрабатывает сообщение, и в течение этого времени другой потребитель может «подключиться» и получить сообщение из этого же раздела, «отключиться», обработать сообщение, и третий потребитель может подключиться и …….. (Один парень из команды сказал «Ху. Kafka не масштабируется. Мы не можем добавить больше потребителей «.)
Комментарии:
1. Если у вас 10 разделов и порядок должен быть сохранен, то нет способа увеличить параллелизм за пределы 10 потребителей. Может быть, порядок можно каким-то образом смягчить?
Ответ №1:
Возможно ли масштабировать задачи потребителей по количеству разделов?
Нет.
Проще говоря, разделение — это ваша единица измерения в Kafka. Если вам нужно обрабатывать на более высоком уровне параллелизма, тогда вам нужно больше разделов. Именно так разработан Kafka.
Как вы упомянули, вы можете использовать потоки Kafka и т.д. Для перераспределения вашей темы на большее количество разделов, что окажет соответствующее влияние на порядок.
Вы также можете использовать KSQL, чтобы упростить это:
CREATE STREAM foo_repartitioned
WITH (PARTITIONS=256) AS
SELECT * FROM foo;
«Kafka не масштабируется. Мы не можем добавить больше потребителей.»
Вы можете добавить больше потребителей. Вам просто нужно заранее разработать свои темы с соответствующим уровнем разделов 😉