Вопросы и ответы по Amazon Kinesis Data Streams

Общие вопросы

Потоки данных Amazon Kinesis позволяют создавать собственные приложения для обработки или анализа потоковых данных при решении узкоспециальных задач. В поток данных Kinesis можно добавлять данные разных типов (например, истории посещений веб-сайтов, журналы приложений и ленты социальных сетей) из сотен тысяч источников. Приложения смогут считывать и обрабатывать данные из потока уже через несколько секунд с момента их поступления.

Потоки данных Amazon Kinesis управляют инфраструктурой, обеспечивают хранение, передачу по сети и выполняют настройки для потоковой передачи данных с учетом скорости их поступления. Сервис избавляет от необходимости самостоятельно выполнять распределение, развертывание и текущее обслуживание аппаратного и программного обеспечения или иным образом поддерживать работу потоков данных. Кроме того, Kinesis Data Streams выполняет синхронную репликацию данных в трех зонах доступности AWS, обеспечивая высокую доступность и сохранность данных. По умолчанию Kinesis Data Streams автоматически масштабирует ресурсы, избавляя вас от необходимости распределять и контролировать их. Вы можете выбрать режим предоставления ресурсов по распределению, если хотите самостоятельно распределять и контролировать пропускную способность.

С помощью Потоков данных Amazon Kinesis можно быстро получать данные из нескольких источников и выполнять их непрерывную обработку, например преобразование перед помещением в хранилище, создание метрик или анализ в режиме реального времени, а также объединение данных в более сложные потоки с целью дальнейшей обработки.

Вот несколько типичных сценариев использования Kinesis Data Streams.

  • Ускоренный прием журналов и других данных. Не нужно ждать, пока наберется достаточно данных для пакета. Поступление данных из источников в поток данных Kinesis осуществляется по мере их генерации, что предотвращает потерю данных в случае сбоя в работе их источника. Например, данные системных журналов и журналов приложений могут непрерывно поступать в поток данных, становясь доступными для обработки уже через несколько секунд.
  • Метрики и отчеты в режиме реального времени. Извлекать метрики и генерировать отчеты на основе данных из потока Kinesis можно в режиме реального времени. Например, приложение Amazon Kinesis может создавать метрики и отчеты на основе данных системных журналов и журналов приложений по мере их поступления в виде потоков, а не в виде пакетов, которые приходится ждать.
  • Анализ данных в режиме реального времени. С помощью сервиса «Потоки данных Kinesis» можно выполнять анализ потоковых данных в режиме реального времени. Например, в поток данных Kinesis можно добавлять данные о посещениях веб-сайта. Приложение Kinesis будет выполнять их анализ в режиме реального времени и предоставлять ценную аналитическую информацию уже через несколько минут, а не часов или дней.
  • Сбор данных журналов и событий. Собирайте данные журналов и событий из таких источников, как серверы, стационарные компьютеры и мобильные устройства. При этом созданные вами приложения, использующие Amazon Lambda или Управляемый сервис Amazon для Apache Flink, будут выполнять непрерывную обработку данных, создавать метрики, работать с информационными панелями в режиме реального времени и передавать сводные данные в хранилища, например в Простой сервис хранения данных Amazon (Amazon S3).
  • Запуск приложений, управляемых событиями. Быстрое сопряжение с AWS Lambda позволяет оперативно реагировать на события в приложениях из своей среды и адаптироваться к ним в любых масштабах.

После регистрации в AWS вы можете приступить к использованию Потоков данных Amazon Kinesis, создав поток данных Kinesis с помощью Консоли управления AWS или операции CreateStream. Затем настройте источники данных для непрерывного добавления данных в поток. При желании вы можете отправлять данные из имеющихся ресурсов в сервисах AWS, таких как Amazon DynamoDB, Amazon Aurora, Amazon CloudWatch и AWS IoT Core. Затем вы можете использовать AWS Lambda, Управляемый сервис Amazon для Apache Flink или AWS Glue Streaming для быстрой обработки данных, хранящихся в Потоках данных Amazon Kinesis. Вы также можете создавать собственные приложения, работающие в таких сервисах, как Эластичное вычислительное облако Amazon (Amazon EC2), Эластичный контейнерный сервис Amazon (Amazon ECS) и Эластичный сервис Amazon Kubernetes (Amazon EKS), используя либо API, либо клиентскую библиотеку Amazon Kinesis (KCL).

Основные понятия

Сегмент содержит последовательность записей данных в потоке. Это базовая единица пропускной способности потока данных Kinesis. Сегмент поддерживает скорость до 1 МБ/с и 1000 записей в секунду при записи и до 2 МБ/с при чтении. Ограничения сегмента обеспечивают предсказуемую производительность, упрощая проектирование и использование надежного рабочего процесса потоковой передачи данных. Источник помещает записи данных в сегменты, а потребитель извлекает их из сегментов. Потребители используют сегменты для параллельной обработки данных и их извлечения в том же порядке, в котором они были сохранены. Если скорость записи или чтения превышает ограничения сегмента, приложения-источники и потребители будут получать сообщения об отложенных операциях, которые можно выполнить посредством повторных попыток.

Запись – это единица данных, хранящихся в потоке данных Amazon Kinesis. Запись состоит из порядкового номера, ключа секции и BLOB-объекта данных. BLOB-объект данных – это содержательная составляющая данных, которые источник добавляет в поток данных. Максимальный размер BLOB-объекта данных (полезных данных до их кодирования по схеме Base64) составляет 1 МБ.

Ключ секции используется для изолирования и перенаправления записей в разные сегменты потока данных. Ключ секции определяется источником данных при добавлении им данных в поток Kinesis. Например, имея поток данных с двумя сегментами (сегмент 1 и сегмент 2), можно настроить источник данных для использования двух ключей секций (ключа A и ключа B), чтобы все записи с ключом A поступали в сегмент 1, а все записи с ключом B – в сегмент 2.

Порядковый номер – это уникальный идентификатор для каждой записи. Порядковый номер назначается Amazon Kinesis в момент получения от источника данных вызова API PutRecord или PutRecords для добавления данных в поток Amazon Kinesis. Значения порядковых номеров для одного и того же ключа секции со временем обычно увеличиваются. Чем больше времени прошло между запросами PutRecord или PutRecords, тем большее значение будет у порядкового номера.

Режим предоставления ресурсов Kinesis Data Streams определяет, как контролируются ресурсы и начисляется плата за использование потока данных. Вы можете выбрать режим предоставления ресурсов по распределению или по требованию. В режиме предоставления по распределению вы задаете количество сегментов потока данных. Общее количество ресурсов потока данных представляет собой сумму ресурсов его сегментов. Вы можете увеличивать и уменьшать количество сегментов в потоке данных по мере необходимости. Используемые сегменты оплачиваются на почасовой основе. В режиме предоставления ресурсов по требованию AWS управляет сегментами для обеспечения необходимой пропускной способности. Вы оплачиваете только фактически используемую пропускную способность, и Kinesis Data Streams автоматически подстраивается под потребности ваших рабочих нагрузок по мере их повышения и снижения. Все API записи и чтения в Kinesis Data Streams, а также дополнительные возможности, такие как расширенный срок хранения данных и дополнительное разветвление, поддерживаются в обоих режимах предоставления ресурсов.

Режим предоставления по требованию лучше всего подходит для рабочих нагрузок с непредсказуемым и изменчивым характером трафика. Этот режим следует использовать, если вы хотите, чтобы платформа AWS управляла ресурсами за вас, или предпочитаете плату за пропускную способность. Режим предоставления ресурсов по распределению лучше всего подходит для сценариев с предсказуемым трафиком, когда требования к ресурсам легко прогнозировать. Рекомендуем использовать режим предоставления по распределению, если вам нужен детализированный контроль распределения данных между сегментами. Режим предоставления ресурсов по распределению также подходит для тех случаев, когда требуется выделить дополнительные сегменты, чтобы приложению-потребителю было доступно больше пропускной способности для чтения и ускорения обработки в целом.

Да. Вы можете переключаться между режимами предоставления ресурсов по требованию и по распределению дважды в день. При переключении из режима предоставления по требованию в режим предоставления по распределению и наоборот количество сегментов потока данных остается неизменным. При переключении из режима предоставления по распределению в режим предоставления по требованию сохраняется то же количество сегментов потока данных, что и до переключения. Но с этого момента Kinesis Data Streams отслеживает трафик данных, увеличивая и уменьшая количество сегментов потока данных по требованию по мере повышения и снижения трафика.

Добавление данных в Потоки данных Amazon Kinesis

Добавить данные в поток данных Kinesis можно с помощью операций PutRecord и PutRecords, KPL или агента Amazon Kinesis.

Операция PutRecord позволяет добавить одну запись данных с помощью вызова API, а операция PutRecords позволяет одним вызовом API добавить несколько записей данных. Дополнительные сведения см. в разделах документации PutRecord и PutRecords.

KPL – это простая в использовании библиотека с гибко перестраиваемой конфигурацией помогает добавлять данные в поток Amazon Kinesis. KPL предоставляет простой и надежный асинхронный интерфейс, позволяющий быстро достичь высокой скорости передачи данных от источника при минимальных клиентских ресурсах.

Агент Amazon Kinesis – это встроенное приложение Java, позволяющее легко собирать и отправлять данные в поток Amazon Kinesis. Этот агент можно устанавливать в серверных средах Linux, включая веб‑серверы, серверы журналов или баз данных. Он отслеживает определенные файлы и непрерывно отправляет данные в поток. Дополнительную информацию см. на странице Запись с помощью агентов.

BLOB-объект данных, ключ секции и имя потока данных – это обязательные параметры для вызовов PutRecord и PutRecords. Размер BLOB-объекта данных (до их кодирования по схеме Base64) и ключ секции учитываются при расчете пропускной способности потока Amazon Kinesis, определяемой числом сегментов.

Чтение и обработка данных из Потоков данных Amazon Kinesis

Потребитель – это приложение, которое обрабатывает все данные из потока данных Kinesis. Вы можете выбрать тип потребителя с общим или дополнительным разветвлением для считывания данных из потока Kinesis. Потребители с общим разветвлением совместно используют канал, максимальная скорость чтения из которого составляет 2 МБ/с и пять транзакций в секунду. При этом необходимо использовать API GetRecords. Потребители с дополнительным разветвлением получают собственную полосу пропускания в 2 МБ/с для чтения, что позволяет нескольким потребителям параллельно считывать данные из одного потока, не конкурируя за пропускную способность с другими потребителями. Для потребителей, использующих дополнительное разветвление, необходимо применять API SubscribeToShard. Рекомендуем использовать потребителей с дополнительным разветвлением, если к потоку данных необходимо добавить нескольких потребителей.

Для обработки данных, хранящихся в Потоках данных Kinesis, можно использовать управляемые сервисы, такие как AWS Lambda, Управляемый сервис Amazon для Apache Flink и AWS Glue. Эти управляемые сервисы отвечают за распределение и контроль базовой инфраструктуры, позволяя вам сосредоточиться на написании бизнес-логики. Вы также можете доставлять данные из сервиса «Потоки данных Kinesis» в сервис Amazon S3, Сервис Amazon OpenSearch, Amazon Redshift и на собственные адреса HTTP, используя встроенную интеграцию с Kinesis Data Firehose. Кроме того, вы можете создавать собственные приложения с помощью клиентской библиотеки Amazon Kinesis, встроенной библиотеки или API Amazon Kinesis Data Streams.

Клиентская библиотека Amazon Kinesis (KCL) для Java, Python, Ruby, Node.js и .NET – это встроенная библиотека, которая позволяет легко создавать приложения Amazon Kinesis для считывания и обработки данных из потока Amazon Kinesis.

KCL берет на себя такие сложные задачи, как адаптация к изменениям объема потока, балансировка нагрузки потоковых данных, координация распределенных сервисов и отказоустойчивая обработка данных. позволяя разработчику сосредоточить внимание на функциональном коде создаваемого приложения. Дополнительная информация о KCL представлена в документации по Потокам данных Kinesis.

API SubscribeToShard – это API высокопроизводительной потоковой передачи, который обеспечивает доставку данных из сегментов к потребителям с помощью постоянного подключения, не требующего циклических запросов со стороны клиента. API SubscribeToShard использует протокол HTTP/2 для доставки данных зарегистрированным потребителям каждый раз, когда новые данные поступают в сегмент, что обычно происходит в течение 70 мс. Это ускоряет доставку данных примерно на 65 % по сравнению с использованием API GetRecords. Доставка будет быстрой, даже если несколько зарегистрированных потребителей считывают данные из одного и того же сегмента.

Дополнительное разветвление – это необязательная возможность для потребителей Kinesis Data Streams, создающая логические каналов с пропускной способностью 2 МБ/с между потребителями и сегментами. Такая возможность позволяет масштабировать число потребителей, параллельно считывающих данные из потока данных, и сохранять при этом высокую производительность.

Дополнительное разветвление следует использовать при наличии или ожидаемом появлении нескольких потребителей, которые будут параллельно извлекать данные из потока, или если у вас есть по меньшей мере один потребитель, для которого необходимо использовать API SubscribeToShard, чтобы обеспечить доставку данных между источниками и потребителями в пределах 200 мс.

Потребители используют дополнительное разветвление, извлекая данные с помощью API SubscribeToShard. Имя зарегистрированного потребителя указывается в API SubscribeToShard, после чего зарегистрированный потребитель может пользоваться преимуществами дополнительного разветвления.

Да. Вы можете параллельно подключать к потоку потребителей, которые используют дополнительное разветвление, и тех, которые не пользуются этой возможностью. Использование возможности дополнительного разветвления не влияет на ограничения сегментов при традиционном использовании GetRecords.

Да. Для использования операции SubscribeToShard необходимо зарегистрировать потребителей. При этом активируется дополнительное разветвление. По умолчанию, если данные запрашиваются с помощью SubscribeToShard, потребитель автоматически использует дополнительное разветвление.

Режим предоставления ресурсов по требованию

В новом потоке данных, созданном в режиме предоставления ресурсов по требованию, для записи действует квота в 4 МБ/с и 4000 записей в секунду. По умолчанию квота записи для этих потоков автоматически повышается до 200 МБ/с и 200 000 записей в секунду.

Поток данных в режиме предоставления ресурсов по требованию поддерживает скорость записи, вдвое превышающую максимальный уровень за последние 30 дней. Когда скорость записи в потоке данных достигает нового пика, Kinesis Data Streams автоматически масштабирует ресурсы этого потока. Например, если скорость записи варьируется в диапазоне 10–40 МБ/с, Kinesis Data Streams гарантирует, что вы можете без проблем резко увеличить ее до 80 МБ/с. Если впоследствии в том же потоке данных будет достигнут новый пик скорости, равный 50 МБ/с, Data Streams обеспечит наличие ресурсов, которых достаточно для записи 100 МБ данных в секунду. Однако если скорость трафика будет превышать предыдущее пиковое значение более чем вдвое в течение 15 минут, начнут появляться исключения ProvisionedThroughputExceeded. Соответствующие запросы потребуется выполнить заново.

В режиме предоставления по требованию общее количество ресурсов для чтения увеличивается пропорционально скорости записи, чтобы гарантировать, что приложениям-потребителям всегда хватает ресурсов для чтения входящих данных в режиме реального времени. Вы можете получить для чтения как минимум вдвое большую пропускную способность, чем для записи, используя API GetRecords. Рекомендуем использовать одного потребителя с API GetRecord, чтобы он мог наверстать упущенное, когда приложению нужно восстановиться после простоя. Чтобы добавить несколько приложений-потребителей, необходимо использовать дополнительное разветвление, что позволяет добавить к потоку данных до 20 потребителей, для каждого из которых выделена отдельная полоса пропускания, с помощью API SubscribeToShard.

Режим предоставления ресурсов по распределению

По сути, наращивание пропускной способности потока данных Kinesis в режиме предоставления по распределению может происходить до бесконечности посредством увеличения количества сегментов в потоке.

Вы можете увеличить объем ресурсов для потоков данных Kinesis в режиме предоставления по распределению, разделив имеющиеся сегменты с помощью SplitShard API. Вы можете уменьшить объем ресурсов, объединив два сегмента с помощью MergeShard API. Вы также можете использовать API UpdateShardCount, чтобы увеличить (или уменьшить) объем ресурсов потока до определенного количества сегментов.

Пропускная способность потока данных Kinesis определяется числом сегментов в нем. Описанные ниже действия помогут приблизительно подсчитать изначальное количество сегментов, необходимое для работы потока данных в режиме предоставления ресурсов по распределению. Обратите внимание, что число сегментов в потоке данных можно динамически регулировать с помощью соответствующей операции.

Оцените средний размер записи, добавляемой в поток данных, в килобайтах с округлением до ближайшего целого числа килобайтов (average_data_size_in_KB).

Оцените количество записей, добавляемых в поток данных за одну секунду (number_of_records_per_second).

Определите количество приложений Amazon Kinesis, которые должны одновременно и независимо получать данные из потока (number_of_consumers).

Вычислите пропускную способность для записи входящих данных в КБ (incoming_write_bandwidth_in_KB), которая равна значению average_data_size_in_KB, умноженному на значение number_of_records_per_second.

Вычислите пропускную способность для чтения исходящих данных в КБ (outgoing_read_bandwidth_in_KB), которая равна значению incoming_write_bandwidth_in_KB, умноженному на значение number_of_consumers.

Затем вы можете рассчитать исходное количество сегментов (number_of_shards), необходимое для потока данных, по такой формуле: number_of_shards = max (incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB/2000)

Пропускная способность потока данных Kinesis может увеличиваться без ограничений. Квота сегментов по умолчанию составляет 500 сегментов на поток для следующих регионов AWS: «Восток США (Сев. Вирджиния)», «Запад США (Орегон)» и «Европа (Ирландия)». Для всех остальных регионов квота сегментов по умолчанию составляет 200 сегментов на поток. Отправить запрос на повышение квоты сегментов можно с помощью консоли AWS Service Quotas.

В режиме предоставления по распределению пропускная способность потока данных Kinesis определяется числом сегментов в нем. Предел пропускной способности может быть превышен за счет скорости передачи данных либо количества записей PUT. При превышении предела запрос на добавление данных будет отклонен с выдачей исключения ProvisionedThroughputExceeded. Если причина заключается во временном повышении скорости поступления данных в поток, то выполнение запроса будет успешно завершено после очередной попытки добавления данных источником. Если причина заключается в устойчивом повышении скорости поступления данных в поток, следует увеличить число сегментов в нем, чтобы обеспечить достаточную пропускную способность для успешного выполнения всех запросов на добавление данных. В обоих случаях можно воспользоваться метриками Amazon CloudWatch, чтобы узнать об изменении скорости поступления данных в поток и о возникновении исключений типа ProvisionedThroughputExceeded.

В режиме предоставления по распределению пропускная способность потока данных Kinesis определяется числом сегментов в нем. Предел пропускной способности может быть превышен за счет скорости передачи данных либо числа запросов на чтение данных. При превышении предела запрос на чтение данных будет отклонен с выдачей исключения ProvisionedThroughputExceeded. Если причина заключается во временном повышении скорости передачи исходящих данных, то выполнение запроса будет успешно завершено после очередной попытки чтения приложением Amazon Kinesis. Если причина заключается в устойчивом повышении скорости передачи исходящих данных, следует увеличить число сегментов в потоке данных, чтобы обеспечить достаточную пропускную способность для успешного выполнения всех запросов чтения данных. В обоих случаях можно воспользоваться метриками Amazon CloudWatch, чтобы узнать об изменении скорости передачи исходящих данных и о возникновении исключений типа ProvisionedThroughputExceeded.

Расширенное и долговременное хранение данных

Период хранения по умолчанию, составляющий 24 часа, применим в тех случаях, когда при обработке данных в режиме реального времени возникают нерегулярные задержки. Хранение в течение семи дней дает возможность повторной обработки данных за эти семь дней для решения проблем потенциальных последующих потерь данных. Долговременное хранение данных в течение периода дольше семи дней и до 365 дней дает возможность повторной обработки данных в таких сценариях использования, как виртуальное тестирование алгоритмов, заполнение хранилища данных и аудит.

Да. Для чтения данных, которые хранились дольше семи дней, можно использовать те же API getShardIterator, GetRecords и SubscribeToShard. Клиенты могут перемещать итератор в требуемое положение в потоке, получать карту сегментов (открытых и закрытых) и читать записи.

Да. Существуют улучшения API ListShards, GetRecords и SubscribeToShard. Вы можете пользоваться новым вариантом фильтрации с помощью TimeStamp, доступным в API ListShards для эффективного извлечения карты сегментов и повышения эффективности чтения старых данных. Фильтр TimeStamp дает приложениям возможность обнаруживать и считать сегменты с момента времени, в который требуется повторно обработать данные, без необходимости начинать с самого старого. В GetRecords и SubscribeToShards есть новое поле ChildShards, с помощью которого вы сможете быстро находить дочерние сегменты, когда приложение завершает чтение данных из закрытого сегмента, без необходимости снова проходить карту сегментов. Для быстрого обнаружения сегмента эффективно используются вычислительные ресурсы приложения-потребителя для потока любого размера, независимо от периода хранения данных.

Если вы планируете хранить данные дольше и регулярно масштабировать ресурсы, воспользуйтесь этими улучшениями API. Операции масштабирования потока закрывают существующие сегменты и открывают новые. Данные во всех открытых и закрытых сегментах хранятся до конца периода хранения. Поэтому общее количество сегментов линейно растет по мере увеличения продолжительности хранения и числа операций масштабирования. Для такого увеличения карты сегментов требуется использовать операцию ListShards с фильтром TimeStamp и полем ChildShards в GetRecords, а также API SubscribeToShard, чтобы эффективно обнаруживать сегменты для извлечения данных. Чтобы пользоваться этими возможностями, вам потребуется обновить KCL до последней версии 1.x для стандартных потребителей и 2.x для потребителей с дополнительным разветвлением.

Да. Клиенты Потоков данных Kinesis могут использовать реестр схем AWS Glue (бессерверная возможность AWS Glue), через KPL и KCL либо посредством API реестра AWS Glue Schema в AWS Java SDK. Доступ к реестру схем можно получить без дополнительной оплаты. 

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

Управление потоками Kinesis Data Streams

Изменить пропускную способность потока данных можно двумя способами. Для увеличения или уменьшения числа сегментов в потоке данных можно использовать вызов API UpdateShardCount или Консоль управления AWS. Пропускную способность потока данных Amazon Kinesis можно также изменить путем изменения числа сегментов в потоке данных.

Как правило, запросы на изменение пропускной способности потока выполняются в течение нескольких минут. Большие запросы выполняются дольше, чем небольшие.

Да. Параллельно с изменением пропускной способности потока данных Kinesis с помощью API UpdateShardCount, путем изменения числа сегментов или автоматически в режиме предоставления ресурсов по требованию можно добавлять в поток данные и считывать их из него.

В консоли управления Потоков данных Amazon Kinesis отображаются основные метрики операций и производительности, такие как скорость передачи входящих и исходящих данных потока Kinesis. Кроме того, Потоки данных Amazon Kinesis интегрирован с Amazon CloudWatch, что позволяет собирать, просматривать и анализировать метрики CloudWatch для потоков данных и их сегментов. Дополнительную информацию о метриках Потоков данных Amazon Kinesis см. на странице Мониторинг Потоков данных Amazon Kinesis с помощью Amazon CloudWatch.

Обратите внимание, что все метрики на уровне потоков бесплатны. Все включенные метрики на уровне сегментов оплачиваются по тарифам Amazon CloudWatch.

Потоки данных Amazon Kinesis интегрированы с сервисом Управление идентификацией и доступом AWS (AWS IAM), который позволяет безопасно управлять доступом пользователей к сервисам и ресурсам AWS. Например, можно создать политику, которая позволит добавлять данные в поток только определенному пользователю или группе. Вы также можете прикрепить политику на основе ресурсов к своему потоку данных или зарегистрированному потребителю, чтобы управлять доступом на уровне ресурсов. Дополнительную информацию об управлении доступом и потоком данных см. в разделе Управление доступом к ресурсам Потоков данных Amazon Kinesis с помощью IAM.

Вы можете использовать политику IAM, основанную на ролях или ресурсах, чтобы поделиться доступом с другой учетной записью. Чтобы поделиться доступом с функцией AWS Lambda из нескольких учетных записей, прикрепите политику на основе ресурсов к своему потоку данных или потребителю для предоставления доступа к исполняющей роли функции Lambda. Подробнее см. в разделе Использование AWS Lambda с Amazon Kinesis.

Сервис «Потоки данных Amazon Kinesis» интегрирован с сервисом AWS CloudTrail, который записывает вызовы API AWS для всего аккаунта и предоставляет соответствующие файлы журналов. Дополнительную информацию о журналах вызовов API и список поддерживаемых API Amazon Kinesis вы найдете на странице Регистрация вызовов API Amazon Kinesis с помощью Amazon CloudTrail.

Kinesis Data Streams позволяет помечать потоки данных Kinesis тегами, что упрощает управление ресурсами и расходами. Тег – это пользовательская метка, которая выражается в виде пары «ключ‑значение» и упрощает организацию ресурсов AWS. Например, можно назначать потокам данных теги по центрам затрат, что позволит разделять их на категории и отслеживать расходы на Kinesis Data Streams по центрам затрат. Дополнительную информацию об использовании тегов в Потоках данных Amazon Kinesis см. в разделе Использование тегов в Потоках данных Amazon Kinesis.

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

Сервисы Amazon Kinesis безопасны по умолчанию. Только владельцы аккаунтов и потоков данных имеют доступ к создаваемым ими ресурсам Kinesis. Kinesis поддерживает аутентификацию пользователей для управления доступом к данным. Можно использовать политики IAM для выборочного предоставления разрешений пользователям и группам пользователей. Безопасно размещать данные в Kinesis и получать их можно через адреса SSL с использованием протокола HTTPS. Если нужна дополнительная защита, можно использовать шифрование на стороне сервера с помощью ключей сервиса управления ключами AWS (AWS KMS) для шифрования данных, хранящихся в потоке. AWS KMS позволяет применять для шифрования сгенерированные AWS ключи KMS, а также использовать собственный ключ. Наконец, можно использовать собственные библиотеки для шифрования данных на стороне клиента, прежде чем вводить их в Kinesis.

Да. Частный доступ к API Kinesis Data Streams можно получить из облака Amazon VPC, создав адреса VPC. При использовании адресов VPC маршрутизация между VPC и Kinesis Data Streams осуществляется сетью AWS без участия шлюза Интернета, шлюза NAT или VPN‑подключения. Последнее поколение адресов VPC, применяемых Потоков данных Amazon Kinesis, работает на основе AWS PrivateLink – технологии, которая обеспечивает частное соединение между сервисами AWS, используя в VPC эластичные сетевые интерфейсы (ENI) с частными IP‑адресами. Подробнее о PrivateLink рассказывается в документации по PrivateLink.

Шифрование

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

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

  • Трудно принудительно обеспечить шифрование на стороне клиента.
  • В дополнение к шифрованию на стороне клиента требуется обеспечить дополнительный уровень безопасности.
  • Сложно реализовать схемы управления ключами на стороне клиента.

При использовании для Kinesis Data Streams шифрования на стороне сервера данные автоматически шифруются с помощью указанного пользователем ключа AWS KMS перед их записью на уровень потокового хранилища и автоматически дешифруются после получения из хранилища. Шифрование делает возможным запись, а также чтение полезных данных и ключа раздела, только если пользователь, записывающий в поток данных или читающий из него, имеет права на использование ключа, выбранного для шифрования в потоке данных. Вследствие этого применение шифрования на стороне сервера может упростить соблюдение внутренних требований безопасности и обеспечение соответствия требованиям, предъявляемым к данным.

При шифровании на стороне сервера клиентские приложения (источники и получатели данных) могут никак не учитывать шифрование, им не нужно управлять ключами KMS или криптографическими операциями; при этом данные хранятся и пересылаются внутри сервиса Kinesis Data Streams в зашифрованном виде. Все ключи KMS, используемые функцией шифрования на стороне сервера, предоставляются сервисом AWS KMS. AWS KMS упрощает использование управляемых AWS ключей KMS для Kinesis (шифрование «одним щелчком»), собственных ключей AWS KMS, управляемых клиентом, и ключей KMS, импортированных пользователем для шифрования.

Да. В документации для пользователей есть руководство по началу работы.

Может влиять. Это зависит от ключа, который используется для шифрования, и от разрешений, управляющих правами доступа к ключу.

  • Если для Kinesis используется управляемый AWS ключ KMS (псевдоним ключа – aws/kinesis), на приложения не будет влиять включение или отключение шифрования с помощью этого ключа.
  • Если используется другой ключ, например настраиваемый ключ AWS KMS или тот, который был импортирован в сервис AWS KMS, и если у производителей и получателей потока данных нет разрешения на использование ключа KMS, применяемого для шифрования, запросы PUT и GET будут отклоняться. Прежде чем начать использовать шифрование на стороне сервера, необходимо настроить политики ключей AWS KMS, чтобы разрешить шифрование и дешифрование сообщений. Примеры и дополнительную информацию о разрешениях AWS KMS см. в разделе «Разрешения AWS KMS для API: справка по операциям и ресурсам» руководства по Сервису управления ключами AWS для разработчиков или в инструкциях по разрешениям в документации пользователя по шифрованию на стороне сервера для сервиса «Потоки данных Kinesis».

Да. Но если используется управляемый AWS ключ KMS для Kinesis и не превышаются ограничения уровня бесплатного пользования AWS для API KMS, использование шифрования на стороне сервера является бесплатным. Ниже описываются затраты по ресурсам.

Ключи

Управляемый AWS ключ KMS для Kinesis (псевдоним = aws/kinesis) является бесплатным.
Ключи KMS, управляемые клиентом, оплачиваются по соответствующим тарифам сервиса KMS. Подробнее.

Использование API KMS

Стоимость использования API применяется ко всем ключам KMS, в том числе к пользовательским. Kinesis Data Streams обращается к KMS приблизительно раз в пять минут для выполнения ротации ключа данных. Итоговая стоимость вызовов API KMS, инициированных одним потоком данных Kinesis, за 30-дневный месяц составит несколько долларов США. Обратите внимание, что данная стоимость будет расти пропорционально количеству аккаунтов пользователей, используемых источниками данных и потребителями, так как для каждого аккаунта требуется отправить в AWS KMS уникальный вызов API. Если для аутентификации используется роль IAM, каждый вызов предполагаемой роли приведет к формированию уникальных учетных данных пользователя. При этом может потребоваться кэшировать данные для доступа пользователей, возвращаемые вызовом assume-role, чтобы сократить расходы на обращение к KMS.

Шифрование на стороне сервера для Потоков данных Amazon Kinesis доступно в регионе AWS GovCloud и во всех публичных регионах, за исключением региона «Китай (Пекин)».

Все эти операции могут быть выполнены с помощью Консоли управления AWS или пакета средств разработки ПО (SDK) AWS. Подробнее рассказывается в руководстве по началу работы с шифрованием на стороне сервера для сервиса «Потоки данных Amazon Kinesis».

Сервис «Потоки данных Kinesis» использует для шифрования алгоритм AES-GCM 256.

Нет. При новом применении шифрования будут зашифрованы (или расшифрованы) только новые данные, записываемые в поток.

При шифровании на стороне сервера шифруются полезные данные вместе с ключом секции, который указан приложениями – источниками потока данных.

Шифрование на стороне сервера работает на уровне потока.

Да. Используя Консоль управления AWS или SDK AWS, можно выбрать новый ключ для применения к конкретному потоку данных.

Нет. В настоящее время сервис «Потоки данных Amazon Kinesis» недоступен на уровне бесплатного пользования AWS. Уровень бесплатного пользования AWS – это программа, в рамках которой предлагается бесплатно воспользоваться пробной версией ряда сервисов AWS. Подробнее см. раздел «Уровень бесплатного пользования AWS».

Соглашение об уровне обслуживания

Соглашение об уровне обслуживания (SLA) для Kinesis Data Streams гарантирует бесперебойную ежемесячную работу сервиса Kinesis Data Streams на уровне не менее 99,9 %.

Согласно условиям нашего соглашения об уровне обслуживания в отношении Kinesis Data Streams, компенсация предоставляется, если бесперебойная ежемесячная работа сервиса в рамках одного региона в нескольких зонах доступности, в которых запущено задание, составила менее 99,9 % в течение любого оплачиваемого месяца.

Условиями и положения соглашения об уровне обслуживания, а также порядок оформления заявки на компенсацию описаны на странице соглашения об уровне обслуживания для Потоков данных Amazon Kinesis.

Цены и оплата

В Потоках данных Amazon Kinesis вы платите только за используемые ресурсы. Авансовые и минимальные платежи отсутствуют, а потребляемые ресурсы оплачиваются по факту использования. В Потоках данных Amazon Kinesis есть два потоковых режима – режим предоставления ресурсов по требованию и по распределению, – и у каждого свои способы оплаты.

В режиме предоставления ресурсов по требованию вам не нужно указывать, какую пропускную способность для чтения и записи вы ожидаете от своего приложения. В этом режиме цена зависит от объема принимаемых и извлекаемых данных, и плата начисляется на почасовой основе за каждый поток данных в вашем аккаунте. Дополнительная плата взимается за использование необязательных функций: расширенного срока хранения данных (более первых 24 часов и в течение первых семи дней), долгосрочного хранения данных (более семи дней и до одного года) и дополнительного разветвления. Дополнительную информацию о стоимости использования сервиса см. на странице Цены на Потоки данных Amazon Kinesis.

В режиме предоставления ресурсов по распределению вы указываете количество сегментов, необходимых для вашего приложения, в зависимости от частоты запросов на запись и чтение. Сегмент – это единица скорости потока, которая обеспечивает пропускную способность 1 МБ/с для записи и 2 МБ/с для чтения. Каждый сегмент оплачивается на почасовой основе. Кроме того, оплачиваются записи, занесенные в поток данных Kinesis. При использовании необязательных возможностей, таких как расширенный срок хранения и дополнительное разветвление, начисляется дополнительная плата.

Ниже представлены две основных и три дополнительных составляющих стоимости в режиме предоставления по распределению в Kinesis Data Streams.

  • Почасовая стоимость по количеству сегментов определяется числом сегментов в потоке данных Amazon Kinesis.
  • Стоимость на основе единиц полезной нагрузки записи PUT определяется числом единиц полезной нагрузки объемом по 25 КБ, добавляемых источниками данных в поток.

Дополнительно

  • Стоимость расширенного срока хранения данных – это дополнительная статья расходов, которая определяется по времени работы (в часах) сегмента потока данных. При использовании расширенного срока хранения данных взимается плата за расширенный срок хранения для каждого сегмента потока данных.
  • За долговременное хранение данных взимается дополнительная плата, состоящая из двух сумм: за долговременное хранение и долговременное извлечение данных. Долговременное хранение данных отражает количество ГБ в месяц при периоде хранения более семи дней и до 365 дней. Долговременное извлечение данных отражает количество ГБ извлеченных данных, которые хранились более семи дней.
  • Стоимость дополнительного разветвления – это дополнительная статья расходов, состоящая из двух сумм: стоимости часов работы потребителей с сегментами и стоимости извлечения данных. Часы работы потребителей с сегментами соответствуют числу сегментов в потоке, умноженному на число потребителей, использующих дополнительные копии данных. Стоимость извлеченных данных зависит от объема данных (в гигабайтах), доставленных потребителям с использованием дополнительного разветвления.

Дополнительную информацию о стоимости использования сервиса см. на странице Цены на Потоки данных Amazon Kinesis.

Час работы потребителей с сегментами рассчитывается путем умножения числа зарегистрированных потребителей потока на количество сегментов в потоке. Кроме того, плата будет начислена пропорционально тому времени, в течение которого потребитель был зарегистрирован для использования дополнительного разветвления. Например, если для потока данных, содержащего 10 сегментов, час работы потребителя с сегментом стоит 0,015 USD, то потребитель, использующий дополнительное разветвление, сможет считать данные из 10 сегментов. Таким образом, плата за час работы потребителей с сегментами составит 0,15 USD в час (1 потребитель * 10 сегментов * 0,015 USD за каждый час работы потребителя с сегментом). Если одновременно зарегистрировано два потребителя, использующих дополнительное разветвление, плата за час работы с сегментами составит 0,30 USD в час (2 потребителя * 10 сегментов * 0,015 USD).

Сравнение с другими сервисами AWS

Потоки данных Amazon Kinesis и Amazon MSK – популярные платформы потоковой передачи данных, которые помогают создавать собственные потоковые рабочие нагрузки, обрабатывающие данные в специализированных целях. Оба сервиса масштабируемы, безопасны и обладают высокой доступностью. Их можно использовать для реализации сценариев использования потоковой передачи, таких как веб-аналитика и аналитика журналов в реальном времени, персонализация обслуживания клиентов, архитектуры, управляемые событиями, аналитика Интернета вещей и обнаружение мошенничества в реальном времени. При выборе между ними важно учитывать ваш конкретный вариант использования и требования. Вот несколько факторов, которые следует учитывать:

Ознакомление

  •  Если вы новичок в технологиях потоковой передачи, используйте Потоки данных Amazon Kinesis.
  • Если у вас уже есть приложения, работающие на Apache Kafka, используйте MSK. В MSK уже действует миграционная программа Kafka (KMP) и руководство по миграции, облегчающее миграцию.

Предпочтение открытому исходному коду

  • Если вы предпочитаете использовать технологии с открытым исходным кодом, мы рекомендуем использовать MSK. И MSK, и MSK Connect полностью совместимы с Apache Kafka и Kafka Connect с открытым исходным кодом соответственно.

Потоки данных Amazon Kinesis предназначены для обработки потоков больших данных в режиме реального времени. Он поддерживает упорядочение записей и их считывание и/или воспроизведение множеством приложений Amazon Kinesis в одном и том же порядке. Клиентская библиотека Amazon Kinesis обеспечивает доставку всех записей с указанным ключом секции к одному и тому же обработчику записей, позволяя легко создавать разные приложения, считывающие данные из одного потока данных Kinesis (например, приложения для подсчета, агрегации и фильтрации). Сервис Amazon Simple Queue Service (Amazon SQS) позволяет создать надежную и хорошо масштабируемую размещенную очередь для хранения сообщений во время их передачи от компьютера к компьютеру. Amazon SQS позволяет с легкостью перемещать данные между компонентами распределенных приложений и создавать приложения для независимой обработки сообщений (со встроенным анализом получения или неполучения), такие как автоматизированные потоки заданий.

Потоки данных Amazon Kinesis рекомендуется использовать в сценариях с требованиями, подобными описанным ниже.

  • Направление связанных записей к одному и тому же обработчику записей (как в потоке MapReduce). Например, проще выполнить подсчет и агрегацию, если все записи с данным ключом направляются к одному и тому же обработчику записей.
  • Упорядочение записей. Например, можно передать данные лога с узла приложения на узел обработки/архивации с сохранением порядка его записей.
  • Одновременное использование одного потока множеством приложений.  Допустим, имеется два приложения, одно из которых обновляет панель управления в режиме реального времени, а другое архивирует данные в Amazon RedShift. Оба приложения должны иметь возможность одновременно получать данные из одного и того же потока, независимо друг от друга.
  • Получение упорядоченных записей через несколько часов. Например, если у вас есть приложение для выставления счетов и приложение для аудита, которое запускается через несколько часов после него, то второе приложение можно запускать с интервалом до 365 дней после первого, поскольку данные в Kinesis Data Streams хранятся не более 365 дней.

Amazon SQS рекомендуется использовать в сценариях, включающих следующие требования.

  • Семантика сообщений (например, оповещение о получении или неполучении на уровне сообщений) и тайм-аут видимости.  Например, если вам нужно независимо отслеживать успешное выполнение каждого задания из очереди, то Amazon SQS будет отслеживать оповещения о получении/неполучении. Таким образом, приложению не требуется хранить контрольные точки или указатели. Amazon SQS удалит сообщения, получение которых подтверждено, и выполнит повторную доставку непринятых сообщений по истечении заданного тайм-аута видимости.
  • Задержка отдельных сообщений.  Например, если отдельные задания в очереди должны быть выполнены с задержкой, С помощью Amazon SQS для отдельных сообщений можно настроить задержку продолжительностью до 15 минут.
  • Динамическое обеспечение одновременного считывания и повышение пропускной способности.  Например, если требуется добавить приложения считывания к очереди заданий до того, как задания будут исчерпаны, то с помощью Kinesis Data Streams можно увеличить число сегментов до необходимого (при этом требуется заблаговременно выделить достаточное количество сегментов).
  • Использование возможности прозрачного масштабирования Amazon SQS. Например, если число буферных запросов и нагрузка меняются в результате случайных скачков нагрузки или по мере роста вашего бизнеса, то благодаря возможности независимой обработки каждого буферизованного запроса Amazon SQS может автоматически масштабироваться и обслуживать нагрузку без получения инструкций по выделению ресурсов с вашей стороны.