2015-02-04 2 views
0

У нас есть 2 производителя и 1 потребитель, наша обработка данных от кинезиса отстает на 24 часа с использованием KCL. Как мы можем улучшить производительность.Обработка кинезитов отстает на 24 часа

+1

Возможно, вы читаете из TRIM_HORIZON вместо LATEST (http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#API_GetShardIterator_RequestSyntax) – Guy

ответ

0

Понятно, что вы делаете что-то неправильно в потребителе. 24-часовой лаг является убийцей для Kinesis, поскольку данные удаляются с серверов Amazon после этого интервала.

Чтобы улучшить свой опыт, вы должны делать что-то в своем конвейере.

  1. Если задержка между 2 записями на стороне производителя составляет 7 секунд, а время на обработку 1 записи на потребительском приложении составляет более 7 секунд; вы не можете использовать Kinesis. Это очевидно. Но если ваша потребность в бизнесе требует такого подхода, вам, возможно, придется подумать о других стратегиях. Возможно, вам помогут обработка (вычисление интенсивных) задач на удаленном сервере, за исключением потребительского приложения. Может быть, посылка потребляемых записей на платформу обмена сообщениями для обработки в другом месте? Но это похоже на анти-шаблон (т. Е. «Почему вы используете Kinesis, если вам нужно использовать другую систему обмена сообщениями?»).

  2. Сделайте меньше у потребителя. Если вам действительно нужно потратить столько времени на запись, попробуйте распараллелить процесс потребления. Я буду использовать предыдущий пример снова, если 1 запись занимает 15 секунд для обработки, и если вы получаете 3 запроса в этом интервале; использование или более 3 рабочих потоков на стороне потребителя. Если вы используете KCL, вы можете использовать больше осколков, чтобы улучшить распараллеливание. Насколько я знаю, каждый класс IEmitter (реализация) работает в своем потоке. И для каждого осколка вызывается новый IEmitter. Кроме того, проверьте свои хэш (разделы); что помогает однородному распределению ваших записей среди осколков.

  3. Пакетная обработка на потребителе также является опцией. Например, предположим, что у вас есть записи, содержащие «id: 1, имя: John, фамилия: Doe», «2, Jason, Will», «3, Mary, Poppin» и т. Д. И скажем, вам нужно написать все это как infortmation как вставки в MySQL. Каждая вставка стоит дорого (каждый раз открывать соединение, писать, фиксировать, закрывать соединение.). Но если вы пишете эти записи во временном файле-заполнителе для массовой обработки, вы можете сделать 1 запрос вставки в MySQL с 3 наборами значений. Это избавит вас от сетевых накладных расходов.

Если вы объясните свой бизнес-пример, модель данных и т. Д., Возможно, мы сможем помочь больше.

Спасибо.

Смежные вопросы