многопроцессорная кафка сообщений - PullRequest
0 голосов
/ 28 января 2019

у нас есть один потребитель кафки, который постоянно опрашивает тему кафки и обрабатывает сообщения.мы сталкиваемся с проблемами, какую ценность мы должны придать max.poll.records.Для обработки каждого из этих сообщений у нас есть 3 оставшихся звонка.Что я делаю, так это получаю сообщения в виде списка и обрабатываю их в параллельном потоке.Экземпляр имеет 2 ГБ памяти, а max.poll.records равно 8. Итак, теперь, если я увеличу max.poll.records, тогда время обработки сообщений увеличится, и оно лучше всего работает, когда max.poll.records равно 4. Не могли бы вы пролить свет на то, как мы можем увеличить параллельную обработку?сообщений с использованием 1 экземпляра с использованием 1 раздела, что означает, что вместо извлечения 8 сообщений я могу попытаться заставить его обрабатывать около 5 сообщений.

Обновление: - Ниже приведена конфигурация памяти, я развертываю автономное приложение в pcf..

Конфигурация памяти JVM:

-Xmx1422566K -Xss1M -XX:ReservedCodeCacheSize=240M -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=162585K

Ответы [ 2 ]

0 голосов
/ 28 января 2019

В качестве дополнения к ответу Гиоргос , эти пояснения получены от Кафка - полное руководство

При выборе количества разделов необходимо учитывать несколько факторов:

  • Какую пропускную способность вы ожидаете достичь для темы?Например, ожидаете ли вы записи 100 КБ в секунду или 1 ГБ в секунду?
  • Какую максимальную пропускную способность вы ожидаете получить при использовании одного раздела?У вас всегда будет не более одного читателя, читающего из раздела, поэтому, если вы знаете, что ваш более медленный потребитель записывает данные в базу данных, и эта база данных никогда не обрабатывает более 50 МБ в секунду из каждого потока, записывающего в него, то вы знаете,Вы ограничены пропускной способностью 60 МБ при использовании из раздела.
  • Вы можете выполнить то же упражнение, чтобы оценить максимальную пропускную способность на одного производителя для одного раздела, но поскольку производители обычно работают намного быстрее, чем потребители, это обычно- можно безопасно пропустить это.
  • Если вы отправляете сообщения в разделы на основе ключей, позднее добавление разделов может быть очень сложным, поэтому рассчитайте пропускную способность на основе ожидаемого будущего использования, а не текущего использования.
  • Учитывайте количество разделов, которые вы будете размещать в каждом посреднике, а также доступное дисковое пространство и пропускную способность сети для каждого посредника.
  • Избегайте переоценки, поскольку каждый раздел использует память и другие ресурсы в посреднике и увеличивает время на lВыборы eader.

Учитывая все это, ясно, что вам нужно много разделов, но не слишком много.

Если у вас есть некоторая оценка относительно целевой пропускной способности раздела и ожидаемой пропускной способности потребителей, вы можете разделить целевую пропускную способность на ожидаемую пропускную способность потребителя и таким образом получить количество разделов.Поэтому, если я хочу иметь возможность писать и читать 1 ГБ / сек из темы, и я знаю, что каждый потребитель может обрабатывать только 50 МБ / с, то я знаю, что мне нужно по крайней мере 20 разделов.Таким образом, у меня будет 20 читателей, читающих тему, и получающих 1 ГБ / с.Если у вас нет этой подробной информации, наш опыт показывает, что ограничение размера раздела на диске до 6 ГБ в день хранения часто дает удовлетворительные результаты.

0 голосов
/ 28 января 2019

max.poll.records не влияет на уровень параллелизма.Согласно документации ,

max.poll.records: максимальное количество записей, возвращаемых за один вызов функции poll ().

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

Уровень параллелизма в Kafka контролируется количеством разделов и числом работающих экземпляров потребителя.

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

Чтобы увеличить количество разделов существующей темы, вы можете просто запустить

bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topicName --partitions 10

Это не будет перемещать существующие данные, хотя

Замечание о потребителях, группах потребителей и разделах
Если у вас N разделов, то в одной группе потребителей может быть до N потребителей, каждый из которых считывает один раздел.Если у вас меньше потребителей, чем у разделов, то некоторые из них будут читать из более чем одного раздела.Кроме того, если у вас больше потребителей, чем разделов, то некоторые из них будут неактивны и вообще не получат сообщений от этих экземпляров.

...