Потоковые данные

Разработка приложений на AWS

Ricardo Sueiras

Principal Technologist

Основы потоковых данных

 

streaming-data

  • Записи обрабатываются непрерывно по мере поступления.
  • Производители записывают данные в поток.
  • Потребители читают независимо и параллельно.
  • Система поглощает пиковую нагрузку без ожидания пакетных заданий.
Разработка приложений на AWS

Из чего состоят потоковые данные?

 

компоненты потоковой системы

  • Производители: приложения, генерирующие записи.
  • Потоки: надёжные упорядоченные буферы, разделяющие производителей и потребителей.
  • Потребители: приложения, читающие и обрабатывающие записи.
  • Хранение и удержание: определяет, как долго записи доступны для повторного воспроизведения.
Разработка приложений на AWS

Шарды

 

шарды

 

  • Шарды — единицы пропускной способности и параллельной обработки.
  • Ключи партиций распределяют записи по шардам.
  • Порядок гарантируется только внутри одного шарда.
  • Потребители используют контрольные точки для отслеживания прогресса и восстановления после сбоев.
Разработка приложений на AWS

Управляемые сервисы AWS для потоковых данных

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Основные строительные блоки для приложений потоковых данных.

 

сервисы AWS

Разработка приложений на AWS

Kinesis Data Streams

  • Потоковая передача с низкой задержкой.
  • Настраиваемое удержание: от 24 часов (по умолчанию) до 365 дней.
  • Надёжные потоки с поддержкой повторного воспроизведения.
  • Несколько потребителей могут читать параллельно.
  • Масштабирование управляется разработчиками через шарды.

 

kinesis data streams

Разработка приложений на AWS

Когда использовать Kinesis Data Streams

  • Выбирайте этот сервис, когда нужна минимальная задержка в реальном времени.
  • Требуется повторное воспроизведение записей.
  • Используется несколько независимых потребителей.
  • Необходима собственная логика преобразования данных.

 

kinesis data streams

Разработка приложений на AWS

Запись данных

 

клиентские библиотеки

  • Ключи партиций управляют размещением в шарде и порядком записей.
  • PutRecords группирует до 500 записей или 5 МБ на запрос.
  • Сбои отчитываются на уровне отдельных записей.
  • FailedRecordCount помогает выявить неудавшиеся записи.
Разработка приложений на AWS

Чтение записей: классический режим

 

классический режим

 

  • Потребители опрашивают Kinesis API по запросу.
  • Лимиты записи: 1 МБ/с или 1 000 записей/с.
  • Лимиты чтения: 2 МБ/с или 5 вызовов GetRecords/с.
Разработка приложений на AWS

Чтение записей: начало потока

 

начало потока

  • Потребители указывают, с какого места в потоке начать чтение.
  • TRIM_HORIZON: самая старая доступная запись в шарде.
  • LATEST: следующая новая запись.
  • AT_SEQUENCE_NUMBER или AFTER_SEQUENCE_NUMBER: с определённого порядкового номера.
  • AT_TIMESTAMP: начиная с указанной метки времени или после неё.
Разработка приложений на AWS

Чтение записей: расширенный fan-out

  • Каждый зарегистрированный потребитель получает выделенные 2 МБ/с на шард.
  • Записи доставляются через HTTP/2 push.
  • Используйте этот режим, когда нескольким независимым потребителям нужна низкая задержка.
  • А также высокая пропускная способность из одного потока.

 

паттерн - enhanced fan-out

Разработка приложений на AWS

Маппинг источников событий Lambda

  • Lambda опрашивает Kinesis и вызывается пакетами.
  • BatchSize и MaximumBatchingWindow управляют формой пакета.
  • ParallelizationFactor: число параллельных вызовов на шард.
  • BisectBatchOnFunctionError: делит проблемный пакет для изоляции сбойных записей.
  • ReportBatchItemFailures: исключает повторную обработку уже успешных записей.
  • OnFailure: отправляет необрабатываемые пакеты в очередь SQS или SNS DLQ.

 

lambda event sourcing

Разработка приложений на AWS

Data Firehose

  • Управляемый сервис доставки потоковых данных к назначениям.
  • Поддерживаемые назначения: Amazon S3, Redshift и HTTP-эндпоинты.
  • Поддерживает буферизацию, преобразование форматов и трансформации через Lambda.
  • Более высокая задержка: буферизация от нескольких секунд до минут.
  • Без повторного воспроизведения и долгосрочного хранения.
  • Идеально подходит для простой доставки данных к назначению.

 

data firehose

Разработка приложений на AWS

Паттерн: горячий-холодный

 

паттерн - горячий/холодный

 

  • Паттерн «горячий-холодный» объединяет Data Streams и Data Firehose.
  • Data Streams обеспечивает обработку в реальном времени для производителей.
  • Firehose архивирует записи из того же источника в S3.
Разработка приложений на AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Используйте Kinesis для упорядоченных потоков с повторным воспроизведением и несколькими потребителями.
  • Kinesis подходит для временных рядов и упорядоченных данных.
  • Используйте SQS для распределения задач.
Разработка приложений на AWS

Масштабирование потоковых данных

 

масштабирование

  • Потоки данных делятся на шарды.
  • Ключи партиций направляют записи в конкретный шард.
  • Один и тот же ключ всегда попадает в один шард, сохраняя порядок.
  • Неравномерные ключи партиций приводят к «горячим» шардам.
  • Используйте ключи с высокой кардинальностью для снижения нагрузки.
  • Для масштабирования вверх или вниз выполняйте решардинг.
Разработка приложений на AWS

Режимы ёмкости: выделенные ресурсы

  • Доступны два режима ёмкости.
  • Режим с выделенными ресурсами использует фиксированное число шардов, управляемое вручную.
  • Обеспечивает предсказуемую стоимость и ёмкость.
  • Требует мониторинга для предотвращения троттлинга и избыточного выделения ресурсов.

 

режимы ёмкости

Разработка приложений на AWS

Режимы ёмкости: по требованию

  • Режим по требованию масштабируется автоматически в зависимости от нагрузки.
  • Ручное управление шардами не требуется.
  • Упрощает эксплуатацию при непредсказуемых нагрузках.
  • Более высокая стоимость при длительной высокой нагрузке.

 

режимы ёмкости

Разработка приложений на AWS

Kinesis Producer Library (KPL)

  • Библиотеки AWS упрощают создание масштабируемых производителей и потребителей.
  • Kinesis Producer Library (KPL) группирует и агрегирует записи.
  • Также сжимает записи и повторяет попытки при сбоях.
  • Асинхронная буферизация для максимизации пропускной способности производителя.

 

клиентские библиотеки

Разработка приложений на AWS

Kinesis Consumer Library (KCL)

 

клиентские библиотеки

 

  • Kinesis Consumer Library (KCL) управляет координацией шардов.
  • Обрабатывает аренду воркеров и контрольные точки.
  • Состояние хранится в таблице DynamoDB.
  • Потребители используют это состояние, чтобы определить место возобновления работы.
Разработка приложений на AWS

Обработка сбоев: идемпотентность

 

обработка сбоев

 

  • Доставка в Kinesis выполняется «хотя бы один раз», поэтому дубликаты возможны.
  • Проектируйте потребителей с поддержкой идемпотентности.
  • Дедублируйте записи по порядковому номеру или бизнес-ключу в DynamoDB.
  • Потребители могут перечитать сохранённые записи по порядковому номеру или метке времени.
Разработка приложений на AWS

Обработка сбоев: ошибки пропускной способности

 

обработка сбоев

 

  • ProvisionedThroughputExceededException сигнализирует о троттлинге.
  • Устраните проблему, увеличив число шардов.
  • Улучшите распределение ключей партиций.
  • Выполняйте повторные попытки с задержкой.
  • Переключите режим ёмкости.
Разработка приложений на AWS
  • Отслеживайте IncomingBytes и IncomingRecords в CloudWatch.
  • Следите за WriteProvisionedThroughputExceeded для обнаружения троттлинга.
  • Отставание потребителя возникает, когда чтение медленнее записи.
  • Отслеживайте GetRecords.IteratorAgeMilliseconds: высокое значение указывает на отставание.

 

мониторинг

Разработка приложений на AWS

Безопасность

  • Шифрование хранимых данных с использованием AWS KMS.
  • Шифрование передаваемых данных с использованием TLS.
  • Доступ контролируется политиками IAM.

 

безопасность

Разработка приложений на AWS

Давайте потренируемся!

Разработка приложений на AWS

Preparing Video For Download...