Проблема производительности брокера Kafka со временем - PullRequest
0 голосов
/ 16 февраля 2019

У нас ниже настройки Kafka

Partition - 10
Replication - 3
fetch.max.byte at broker - 32MB

Producer
max.block.ms =- 5min
request.timeout.mm - 5min
retries - 4

Consumer
No custom config

Message size - 1kb

При этой настройке мы сталкиваемся со следующей проблемой:

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

  2. Другая проблема, которую я вижу, заключается в том, что когда Producer публикует даже 10-15 сообщений, это сообщениедостигает потребителя примерно через 6 секунд.и эта задержка продолжает увеличиваться, если количество сообщений велико.Я проверил журналы брокера и заметил, что как только он достиг брокера, потребитель может его использовать.Но он достигает брокера через 5-6 секунд.Здесь нагрузка не сильно, все же это занимает 6 секунд.Как я должен улучшить производительность.Мое приложение получает данные из апстрима и публикует их в теме 1 kafka. Из этой темы 1 kafka другое приложение использует и объединяет данные на основе ключа и публикует их в другой теме kafka. 2

Тема 1 - производительдля темы 2, так как согласно нашему анализу публикация темы в порядке, но потребление из темы 1 имеет задержку.И мы думаем, что это из-за брокера.

1 Ответ

0 голосов
/ 16 февраля 2019

Если вы видели исключения, превышающие linger.ms время, это означает, что пакет сообщений находился в буфере отправки более linger.ms.Вы можете установить linger.ms на ноль, чтобы производитель немедленно отправлял сообщения брокеру.

На основании вашего описания, задержка происходит на стороне производства.Помимо установки linger.ms на ноль, настройка следующих настроек может помочь уменьшить задержку при производстве:

acks= 1   # Leader will write the record to its local log but will
          # respond without awaiting full acknowledgement from all followers.

batch.size # reduce the batch size so that the producer do not wait for 
           # a larger batch size

delivery.timeout.ms # this is available since Kafka 2.1, and allows you 
                    # specify clearly on delivery timeout

max.in.flight.requests.per.connection # increase # of inflight request can 
                                      # help to improve throughput
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...