Общие вопросы
Вопрос. Что такое Amazon Kinesis Data Streams?
Сервис Amazon Kinesis Data Streams позволяет создавать собственные приложения для обработки или анализа потоковых данных при решении узкоспециальных задач. В поток данных Kinesis можно добавлять данные разных типов (например, истории посещений веб-сайтов, журналы приложений и ленты социальных сетей) из сотен тысяч источников. Приложения смогут считывать и обрабатывать данные из потока уже через несколько секунд с момента их поступления.
Вопрос. Какие виды управления берет на себя Amazon Kinesis Data Streams?
Amazon Kinesis Data Streams управляет инфраструктурой, обеспечивает хранение, передачу по сети и выполняет настройки для потоковой передачи данных с учетом скорости их поступления. Сервис избавляет от необходимости самостоятельно выполнять распределение, развертывание и текущее обслуживание аппаратного и программного обеспечения или иным образом поддерживать работу потоков данных. Кроме того, Kinesis Data Streams выполняет синхронную репликацию данных в трех зонах доступности AWS, обеспечивая высокую доступность и сохранность данных. По умолчанию Kinesis Data Streams автоматически масштабирует ресурсы, избавляя вас от необходимости распределять и контролировать их. Вы можете выбрать режим предоставления ресурсов по распределению, если хотите самостоятельно распределять и контролировать пропускную способность.
Вопрос. Для чего предназначен сервис Amazon Kinesis Data Streams?
С помощью Kinesis Data Streams можно быстро получать данные из нескольких источников и выполнять их непрерывную обработку, например преобразование перед помещением в хранилище, создание метрик или анализ в режиме реального времени, а также объединение данных в более сложные потоки с целью дальнейшей обработки.
Вот несколько типичных сценариев использования Kinesis Data Streams.
Ускоренный прием журналов и других данных. Ждать пакетирования данных не требуется. Поступление данных из источников в поток данных Kinesis осуществляется по мере их генерации, что предотвращает потерю данных в случае сбоя в работе их источника. Например, данные системных журналов и журналов приложений могут непрерывно поступать в поток данных, становясь доступными для обработки уже через несколько секунд.
Метрики и отчеты в режиме реального времени. Извлекать метрики и генерировать отчеты на основе данных потока Kinesis можно в режиме реального времени. Например, приложение Amazon Kinesis может создавать метрики и отчеты на основе данных системных журналов и журналов приложений по мере их поступления в виде потоков, а не в виде пакетов, которые приходится ждать.
Анализ данных в режиме реального времени. С помощью Kinesis Data Streams можно выполнять анализ потоковых данных в режиме реального времени. Например, в поток данных Kinesis можно добавлять данные о посещениях веб-сайта. Приложение Kinesis будет выполнять их анализ в режиме реального времени и предоставлять ценную аналитическую информацию уже через несколько минут, а не часов или дней.
Сбор данных журналов и событий. Собирайте данные журналов и событий из таких источников, как серверы, стационарные компьютеры и мобильные устройства. При этом созданные вами приложения, использующие Amazon Lambda или Kinesis Data Analytics, будут выполнять непрерывную обработку данных, создавать метрики, работать с информационными панелями в режиме реального времени и передавать сводные данные в хранилища, например в Amazon Simple Storage Service (S3).
Запуск приложений, управляемых событиями. Быстрое сопряжение с AWS Lambda позволяет оперативно реагировать на события в приложениях из своей среды и адаптироваться к ним в любых масштабах.
Вопрос. Как работать с Amazon Kinesis Data Streams?
После регистрации в AWS вы можете приступить к использованию Kinesis Data Streams, создав поток данных Kinesis с помощью Консоли управления AWS или операции CreateStream. Затем настройте источники данных для непрерывного добавления данных в поток. При желании вы можете отправлять данные из имеющихся ресурсов в сервисах AWS, таких как Amazon DynamoDB, Amazon Aurora, Amazon CloudWatch и AWS IoT Core. Затем вы можете использовать AWS Lambda, Amazon Kinesis Data Analytics или AWS Glue Streaming для быстрой обработки данных, хранящихся в Kinesis Data Streams. Вы также можете создавать собственные приложения, работающие в Amazon Elastic Compute Cloud (EC2), Amazon Elastic Container Service (ECS) и Amazon Elastic Kubernetes Service (EKS), используя либо API, либо клиентскую библиотеку Amazon Kinesis (KCL).
Основные понятия
Вопрос. Что такое сегмент, источник и потребитель в Kinesis Data Streams?
Сегмент содержит последовательность записей данных в потоке. Это базовая единица пропускной способности потока данных 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 отслеживает трафик данных, увеличивая и уменьшая количество сегментов потока данных по требованию по мере повышения и снижения трафика.
Добавление данных в потоки Kinesis Data Streams
Вопрос. Как добавлять данные в поток данных Amazon Kinesis?
Добавить данные в поток данных Kinesis можно с помощью API PutRecord или PutRecords, а также с помощью библиотеки источников Amazon Kinesis (KPL) или агента Amazon Kinesis.
Вопрос. В чем разница между API PutRecord и PutRecords?
Операция PutRecord позволяет добавить одну запись данных с помощью вызова API, а операция PutRecords позволяет одним вызовом API добавить несколько записей данных. Дополнительные сведения см. в разделах PutRecord и PutRecords.
Вопрос. Что такое библиотека источников Amazon Kinesis?
Библиотека источников Amazon Kinesis (KPL) – это удобная и легко настраиваемая библиотека, позволяющая добавлять данные в поток Amazon Kinesis. KPL предоставляет простой и надежный асинхронный интерфейс, позволяющий быстро достичь высокой скорости передачи данных от источника при минимальных клиентских ресурсах.
Вопрос. Что такое агент Amazon Kinesis?
Агент Amazon Kinesis – это встроенное приложение Java, позволяющее легко собирать и отправлять данные в поток Amazon Kinesis. Этот агент можно устанавливать в серверных средах Linux, включая веб‑серверы, серверы журналов или баз данных. Агент отслеживает определенные файлы и непрерывно отправляет данные в поток. Дополнительную информацию см. на странице Запись с помощью агентов.
Вопрос. Какая информация принимается во внимание при добавлении данных в поток Amazon Kinesis с помощью вызова PutRecord или PutRecords?
BLOB-объект данных, ключ секции и имя потока данных – это обязательные параметры вызовов PutRecord и PutRecords. Размер BLOB-объекта данных (до их кодирования по схеме Base64) и ключ секции учитываются при расчете пропускной способности потока Amazon Kinesis, определяемой числом сегментов.
Чтение и обработка данных из потоков Kinesis Data Streams
Вопрос. Что такое потребитель и какие типы потребителей существуют в Amazon Kinesis Data Streams?
Потребитель – это приложение, которое обрабатывает все данные из потока данных Kinesis. Вы можете выбрать тип потребителя с общим или дополнительным разветвлением для считывания данных из потока Kinesis. Потребители с общим разветвлением совместно используют канал, максимальная скорость чтения из которого составляет 2 МБ/с и пять транзакций в секунду. При этом необходимо использовать API GetRecords. Потребители с дополнительным разветвлением получают собственную полосу пропускания в 2 МБ/с для чтения, что позволяет нескольким потребителям параллельно считывать данные из одного потока, не конкурируя за пропускную способность с другими потребителями. Для потребителей, использующих дополнительное разветвление, необходимо применять API SubscribeToShard. Рекомендуем использовать потребителей с дополнительным разветвлением, если к потоку данных необходимо добавить нескольких потребителей.
Вопрос. Как обрабатывать данные, захваченные и хранящиеся в Amazon Kinesis Data Streams?
Для обработки данных, хранящихся в Kinesis Data Streams, можно использовать управляемые сервисы, такие как AWS Lambda, Amazon Kinesis Data Analytics и AWS Glue. Эти управляемые сервисы отвечают за распределение и контроль базовой инфраструктуры, позволяя вам сосредоточиться на написании бизнес-логики. Вы также можете доставлять данные из Kinesis Data Streams в Amazon S3, Amazon OpenSearch Service, Amazon Redshift и на собственные адреса HTTP, используя встроенную интеграцию с Kinesis Data Firehose. Кроме того, вы можете создавать собственные приложения с помощью клиентской библиотеки Amazon Kinesis, встроенной библиотеки или API Amazon Kinesis Data Streams.
Вопрос. Что такое клиентская библиотека Amazon Kinesis (KCL)?
Клиентская библиотека Amazon Kinesis (KCL) для Java, Python, Ruby, Node.js и .NET – это встроенная библиотека, которая позволяет легко создавать приложения Amazon Kinesis для считывания и обработки данных из потока Amazon Kinesis.
KCL берет на себя такие сложные задачи, как адаптация к изменениям объема потока, балансировка нагрузки потоковых данных, координация распределенных сервисов и отказоустойчивая обработка данных. Благодаря этому разработчик может сосредоточить внимание на бизнес-логике создаваемого приложения. Дополнительная информация о KCL представлена в документации по Kinesis Data Streams здесь.
Вопрос. Что представляет собой API SubscribeToShard?
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 необходимо зарегистрировать потребителей. При этом активируется дополнительное разветвление. По умолчанию, если данные запрашиваются с помощью 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 Data Streams в режиме предоставления по распределению?
По сути, наращивание пропускной способности потока данных Kinesis в режиме предоставления по распределению может происходить до бесконечности посредством увеличения количества сегментов в потоке.
Вопрос. Как масштабировать ресурсы Kinesis Data Streams в режиме предоставления по распределению?
Вы можете увеличить объем ресурсов для Kinesis Data Stream в режиме предоставления по распределению, разделив имеющиеся сегменты с помощью API SplitShard. Вы можете уменьшить объем ресурсов, объединив два сегмента с помощью API MergeShard. Вы также можете использовать API UpdateShardCount, чтобы увеличить (или уменьшить) объем ресурсов потока до определенного количества сегментов.
Вопрос. Как выбрать оптимальную пропускную способность потока данных Amazon Kinesis в режиме предоставления по распределению?
Пропускная способность потока данных 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)
Вопрос. Какова максимальная пропускная способность потока данных Amazon Kinesis в режиме предоставления по распределению?
Пропускная способность потока данных Kinesis может увеличиваться без ограничений. Квота сегментов по умолчанию составляет 500 сегментов на поток для следующих регионов AWS: «Восток США (Сев. Вирджиния)», «Запад США (Орегон)» и «Европа (Ирландия)». Для всех остальных регионов квота сегментов по умолчанию составляет 200 сегментов на поток. Отправить запрос на повышение квоты сегментов можно с помощью консоли AWS Service Quotas.
Вопрос. Что произойдет, если при добавлении данных в поток Amazon Kinesis в режиме предоставления по распределению будет превышен предел пропускной способности потока?
В режиме предоставления по распределению пропускная способность потока данных Kinesis определяется числом сегментов в нем. Предел пропускной способности может быть превышен за счет скорости передачи данных либо количества записей PUT. При превышении предела запрос на добавление данных будет отклонен с выдачей исключения ProvisionedThroughputExceeded. Если причина заключается во временном повышении скорости поступления данных в поток, то выполнение запроса будет успешно завершено после очередной попытки добавления данных источником. Если причина заключается в устойчивом повышении скорости поступления данных в поток, следует увеличить число сегментов в нем, чтобы обеспечить достаточную пропускную способность для успешного выполнения всех запросов на добавление данных. В обоих случаях можно воспользоваться метриками Amazon CloudWatch, чтобы узнать об изменении скорости поступления данных в поток и о возникновении исключений типа ProvisionedThroughputExceeded.
Вопрос. Что произойдет, если при считывании данных приложением Amazon Kinesis из потока Amazon Kinesis будет превышен предел пропускной способности потока данных в режиме предоставления по распределению?
В режиме предоставления по распределению пропускная способность потока данных Kinesis определяется числом сегментов в нем. Предел пропускной способности может быть превышен за счет скорости передачи данных либо числа запросов на чтение данных. При превышении предела запрос на чтение данных будет отклонен с выдачей исключения ProvisionedThroughputExceeded. Если причина заключается во временном повышении скорости передачи исходящих данных, то выполнение запроса будет успешно завершено после очередной попытки чтения приложением Amazon Kinesis. Если причина заключается в устойчивом повышении скорости передачи исходящих данных, следует увеличить число сегментов в потоке данных, чтобы обеспечить достаточную пропускную способность для успешного выполнения всех запросов чтения данных. В обоих случаях можно воспользоваться метриками Amazon CloudWatch, чтобы узнать об изменении скорости передачи исходящих данных и о возникновении исключений типа ProvisionedThroughputExceeded.
Расширенное и долговременное хранение данных
Вопрос. Какой период хранения поддерживает сервис Kinesis Data Streams?
Период хранения по умолчанию, составляющий 24 часа, применим в тех случаях, когда при обработке данных в режиме реального времени возникают нерегулярные задержки. Хранение в течение семи дней дает возможность повторной обработки данных за эти семь дней для решения проблем потенциальных последующих потерь данных. Долговременное хранение данных в течение периода дольше семи дней и до 365 дней дает возможность повторной обработки данных в таких сценариях использования, как виртуальное тестирование алгоритмов, заполнение хранилища данных и аудит.
Вопрос. Можно ли использовать имеющиеся API Kinesis Data Streams для чтения данных, которые хранились дольше семи дней?
Да. Для чтения данных, которые хранились дольше семи дней, можно использовать те же API getShardIterator, GetRecords и SubscribeToShard. Клиенты могут перемещать итератор в требуемое положение в потоке, получать карту сегментов (открытых и закрытых) и читать записи.
Вопрос. Существуют ли новые API для дальнейшего чтения старых данных?
Да. Существуют улучшения API ListShards, GetRecords и SubscribeToShard. Вы можете пользоваться новым вариантом фильтрации с помощью TimeStamp, доступным в API ListShards для эффективного извлечения карты сегментов и повышения эффективности чтения старых данных. Фильтр TimeStamp дает приложениям возможность обнаруживать и считать сегменты с момента времени, в который требуется повторно обработать данные, без необходимости начинать с самого старого. В GetRecords и SubscribeToShards есть новое поле ChildShards, с помощью которого вы сможете быстро находить дочерние сегменты, когда приложение завершает чтение данных из закрытого сегмента, без необходимости снова проходить карту сегментов. Для быстрого обнаружения сегмента эффективно используются вычислительные ресурсы приложения-потребителя для потока любого размера, независимо от периода хранения данных.
Вопрос. Когда следует использовать улучшения API?
Если вы планируете хранить данные дольше и регулярно масштабировать ресурсы, воспользуйтесь этими улучшениями API. Операции масштабирования потока закрывают существующие сегменты и открывают новые. Данные во всех открытых и закрытых сегментах хранятся до конца периода хранения. Поэтому общее количество сегментов линейно растет по мере увеличения продолжительности хранения и числа операций масштабирования. Для такого увеличения карты сегментов требуется использовать операцию ListShards с фильтром TimeStamp и полем ChildShards в GetRecords, а также API SubscribeToShard, чтобы эффективно обнаруживать сегменты для извлечения данных. Чтобы пользоваться этими возможностями, вам потребуется обновить KCL до последней версии 1.x для стандартных потребителей и 2.x для потребителей с дополнительным разветвлением.
Вопрос. Поддерживает ли Amazon Kinesis Data Streams регистрацию схем?
Да. Клиенты Kinesis Data Streams могут использовать реестр схем AWS Glue (бессерверная возможность AWS Glue), через библиотеку Kinesis Producer Library (KPL) и клиентские библиотеки Kinesis (KCL) либо посредством API реестра AWS Glue Schema в AWS Java SDK. Доступ к реестру схем можно получить без дополнительной оплаты.
Чтобы начать работу и узнать больше, ознакомьтесь с пользовательской документацией для реестров схем.
Управление потоками Kinesis Data Streams
Вопрос. Как изменить пропускную способность потока данных Amazon Kinesis?
Изменить пропускную способность потока данных можно двумя способами. Для увеличения или уменьшения числа сегментов в потоке данных можно использовать вызов API UpdateShardCount или Консоль управления AWS. Пропускную способность потока данных Amazon Kinesis можно также изменить путем изменения числа сегментов в потоке данных.
Вопрос. Сколько времени требуется для изменения пропускной способности потока данных Amazon Kinesis в режиме предоставления по распределению с помощью API UpdateShardCount или Консоли управления AWS?
Как правило, запросы на изменение пропускной способности потока выполняются в течение нескольких минут. Большие запросы выполняются дольше, чем небольшие.
Вопрос. Остается ли сервис Amazon Kinesis Data Streams доступным при изменении пропускной способности потока данных Kinesis в режиме предоставления по распределению или при автоматическом масштабировании в режиме предоставления ресурсов по требованию?
Да. Параллельно с изменением пропускной способности потока данных Kinesis с помощью API UpdateShardCount, путем изменения числа сегментов или автоматически в режиме предоставления ресурсов по требованию можно добавлять в поток данные и считывать их из него.
Вопрос. Как отслеживать выполнение операций и производительность потока данных Amazon Kinesis?
В консоли управления Amazon Kinesis Data Streams отображаются основные метрики операций и производительности, такие как скорость передачи входящих и исходящих данных потока Kinesis. Кроме того, Kinesis Data Streams интегрирован с Amazon CloudWatch, что позволяет собирать, просматривать и анализировать метрики CloudWatch для потоков данных и их сегментов. Дополнительную информацию о метриках Amazon Kinesis Data Streams см. на странице Мониторинг сервиса Amazon Kinesis Data Streams с помощью Amazon CloudWatch.
Обратите внимание, что все метрики на уровне потоков бесплатны. Все включенные метрики на уровне сегментов оплачиваются по тарифам Amazon CloudWatch.
Вопрос. Как управлять доступом к потокам данных Amazon Kinesis?
Amazon Kinesis Data Streams интегрирован с сервисом AWS Identity and Access Management (IAM), который позволяет безопасно управлять доступом пользователей к сервисам и ресурсам AWS. Например, можно создать политику, которая позволит добавлять данные в поток Kinesis только определенному пользователю или группе. Дополнительную информацию об управлении доступом и контроле потока данных см. в разделе Управление доступом к ресурсам Amazon Kinesis Data Streams с помощью IAM.
Вопрос. Как получить журналы вызовов API к потоку данных Amazon Kinesis для анализа безопасности и решения операционных проблем?
Kinesis Data Streams интегрируется с сервисом Amazon CloudTrail, который записывает вызовы API AWS для вашего аккаунта и предоставляет вам файлы журналов. Дополнительную информацию о регистрации вызовов API, а также список поддерживаемых API Amazon Kinesis см. на странице Регистрация вызовов API Amazon Kinesis с помощью Amazon CloudTrail.
Вопрос. Как эффективно контролировать потоки данных Amazon Kinesis Data Streams и связанные с ними расходы?
Kinesis Data Streams позволяет помечать потоки данных Kinesis тегами, что упрощает управление ресурсами и расходами. Тег – это пользовательская метка, которая выражается в виде пары «ключ‑значение» и упрощает организацию ресурсов AWS. Например, можно назначать потокам данных теги по центрам затрат, что позволит разделять их на категории и отслеживать расходы на Kinesis Data Streams по центрам затрат. Дополнительную информацию об использовании тегов в Amazon Kinesis Data Streams см. в разделе Использование тегов в Amazon Kinesis Data Streams.
Безопасность
Вопрос. Насколько защищены мои данные при использовании Kinesis Data Streams?
Сервисы Amazon Kinesis безопасны по умолчанию. Только владельцы аккаунтов и потоков данных имеют доступ к создаваемым ими ресурсам Kinesis. Kinesis поддерживает аутентификацию пользователей для управления доступом к данным. Можно использовать политики AWS IAM для выборочного предоставления разрешений пользователям и группам пользователей. Безопасно размещать данные в Kinesis и получать их можно через адреса SSL с использованием протокола HTTPS. Если нужна дополнительная защита, можно использовать шифрование на стороне сервера с помощью ключей AWS Key Management Service (KMS) для шифрования данных, хранящихся в потоке. AWS KMS позволяет применять для шифрования сгенерированные AWS ключи KMS, а также использовать собственный ключ. Наконец, можно использовать собственные библиотеки для шифрования данных на стороне клиента, прежде чем вводить их в Kinesis.
Вопрос. Можно ли получить частный доступ к API Kinesis Data Streams из облака Amazon Virtual Private Cloud (VPC) без использования публичных IP-адресов?
Да. Частный доступ к API Kinesis Data Streams можно получить из облака Amazon VPC, создав адреса VPC. При использовании адресов VPC маршрутизация между VPC и Kinesis Data Streams осуществляется сетью AWS без участия шлюза Интернета, шлюза NAT или VPN‑подключения. Последнее поколение адресов VPC, применяемых Kinesis Data Streams, работает на основе AWS PrivateLink – технологии, которая обеспечивает частное соединение между сервисами AWS, используя в VPC эластичные сетевые интерфейсы (ENI) с частными IP‑адресами. Подробнее о PrivateLink рассказывается в документации по PrivateLink.
Шифрование
Вопрос. Можно ли шифровать данные, которые попадают в поток Kinesis?
Да. Есть два способа это сделать. Можно использовать шифрование на стороне сервера, которое является полностью управляемой возможностью, выполняющей автоматическое шифрование и расшифровку данных по мере их попадания в поток данных и, соответственно, получения из него. Можно также записать в поток уже зашифрованные данные, применив шифрование и расшифровку на стороне клиента.
Вопрос. Почему следует использовать шифрование на стороне сервера вместо шифрования на стороне клиента?
Вы можете выбрать шифрование на стороне сервера вместо шифрования на стороне клиента по одной из указанных ниже причин.
- Трудно принудительно обеспечить шифрование на стороне клиента.
- В дополнение к шифрованию на стороне клиента требуется обеспечить дополнительный уровень безопасности.
- Сложно реализовать схемы управления ключами на стороне клиента.
Вопрос. Что такое шифрование на стороне сервера?
При использовании для Kinesis Data Streams шифрования на стороне сервера данные автоматически шифруются с помощью указанного пользователем ключа AWS KMS перед их записью на уровень потокового хранилища и автоматически дешифруются после получения из хранилища. Шифрование делает возможным запись, а также чтение полезных данных и ключа раздела, только если пользователь, записывающий в поток данных или читающий из него, имеет права на использование ключа, выбранного для шифрования в потоке данных. Вследствие этого применение шифрования на стороне сервера может упростить соблюдение внутренних требований безопасности и обеспечение соответствия требованиям, предъявляемым к данным.
При шифровании на стороне сервера клиентские приложения (источники и получатели данных) могут никак не учитывать шифрование, им не нужно управлять ключами KMS или криптографическими операциями; при этом данные хранятся и пересылаются внутри сервиса Kinesis Data Streams в зашифрованном виде. Все ключи KMS, используемые функцией шифрования на стороне сервера, предоставляются сервисом AWS KMS. AWS KMS упрощает использование управляемых AWS ключей KMS для Kinesis (шифрование «одним щелчком»), собственных ключей AWS KMS, управляемых клиентом, и ключей KMS, импортированных пользователем для шифрования.
Вопрос. Существует ли руководство по началу работы с шифрованием на стороне сервера?
Да. В документации для пользователей есть руководство по началу работы.
Вопрос: Влияет ли шифрование на стороне сервера на то, как приложения взаимодействуют с Kinesis Data Streams?
Может влиять. Это зависит от ключа, который используется для шифрования, и от разрешений, управляющих правами доступа к ключу.
- Если для Kinesis используется управляемый AWS ключ KMS (псевдоним ключа – aws/kinesis), на приложения не будет влиять включение или отключение шифрования с помощью этого ключа.
- Если используется другой ключ, например настраиваемый ключ AWS KMS или тот, который был импортирован в сервис AWS KMS, и если у производителей и получателей потока данных нет разрешения на использование ключа KMS, применяемого для шифрования, запросы PUT и GET будут отклоняться. Прежде чем начать использовать шифрование на стороне сервера, необходимо настроить политики ключей AWS KMS, чтобы разрешить шифрование и дешифрование сообщений. Примеры и дополнительную информацию о разрешениях AWS KMS см. в разделе «Разрешения AWS KMS для API: справка по операциям и ресурсам» руководства по AWS Key Management Service для разработчиков или в инструкциях по разрешениям в документации пользователя по шифрованию на стороне сервера для сервиса Kinesis Data Streams.
Вопрос. Возникают ли дополнительные затраты при использовании шифрования на стороне сервера?
Да. Но если используется управляемый 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.
Вопрос. В каких регионах AWS можно использовать для Kinesis Data Streams шифрование на стороне сервера?
Шифрование на стороне сервера для Kinesis Data Streams доступно в регионе AWS GovCloud и во всех публичных регионах, за исключением региона «Китай (Пекин)».
Вопрос. Как запустить, обновить или удалить шифрование потока данных на стороне сервера?
Все эти операции могут быть выполнены с помощью Консоли управления AWS или пакета средств разработки ПО (SDK) AWS. Подробнее рассказывается в руководстве по началу работы с шифрованием потоков Kinesis Data Streams на стороне сервера.
Вопрос. Какой алгоритм используется для шифрования на стороне сервера?
Kinesis Data Streams использует для шифрования алгоритм AES-GCM 256.
Вопрос. Если зашифровать поток данных, в который уже были записаны данные, будь то обычный или зашифрованный текст, будут ли все данные в потоке зашифрованы или расшифрованы при обновлении шифрования?
Нет. При новом применении шифрования будут зашифрованы (или расшифрованы) только новые данные, записываемые в поток.
Вопрос. Что именно шифруется при шифровании потоков Kinesis Data Streams на стороне сервера?
При шифровании на стороне сервера шифруются полезные данные вместе с ключом секции, который указан приложениями – источниками потока данных.
Вопрос: Шифрование на стороне сервера работает на уровне сегмента или потока?
Шифрование на стороне сервера работает на уровне потока.
Вопрос. Можно ли изменить ключ KMS, который используется для шифрования конкретного потока данных?
Да. Используя Консоль управления AWS или SDK AWS, можно выбрать новый ключ для применения к конкретному потоку данных.
Вопрос. Доступен ли сервис Amazon Kinesis Data Streams на уровне бесплатного пользования AWS?
Нет. В настоящее время сервис Amazon Kinesis Data Streams недоступен на уровне бесплатного пользования AWS. AWS
Уровень бесплатного пользования – это программа, в рамках которой предлагается бесплатно воспользоваться пробными версиями ряда сервисов AWS. Подробнее
об уровне бесплатного пользования: Уровень бесплатного пользования AWS.
Соглашение об уровне обслуживания
Вопрос. Что гарантирует соглашение об уровне обслуживания для Amazon Kinesis Data Streams?
Соглашение об уровне обслуживания (SLA) для Kinesis Data Streams гарантирует бесперебойную ежемесячную работу сервиса Kinesis Data Streams на уровне не менее 99,9 %.
Вопрос. Как узнать, могу ли я претендовать на компенсацию по соглашению об уровне обслуживания?
Согласно условиям нашего соглашения об уровне обслуживания в отношении Kinesis Data Streams, компенсация предоставляется, если бесперебойная ежемесячная работа сервиса в рамках одного региона в нескольких зонах доступности, в которых запущено задание, составила менее 99,9 % в течение любого оплачиваемого месяца.
С условиями и положениями соглашения об уровне обслуживания, а также подробностями оформления заявки на компенсацию можно ознакомиться на странице сведений об SLA Amazon Kinesis Data Streams.
Цены и оплата
Вопрос. Сколько стоит использование Amazon Kinesis Data Streams?
В Kinesis Data Streams вы платите только за используемые ресурсы. Авансовые и минимальные платежи отсутствуют, а потребляемые ресурсы оплачиваются по факту использования. В Kinesis Data Streams есть два потоковых режима – режим предоставления ресурсов по требованию и по распределению, – и у каждого свои способы оплаты.
Вопрос. Сколько стоит использование Kinesis Data Streams в режиме предоставления ресурсов по требованию?
В режиме предоставления ресурсов по требованию вам не нужно указывать, какую пропускную способность для чтения и записи вы ожидаете от своего приложения. В этом режиме цена зависит от объема принимаемых и извлекаемых данных, и плата начисляется на почасовой основе за каждый поток данных в вашем аккаунте. Дополнительная плата взимается за использование необязательных функций: расширенного срока хранения данных (более первых 24 часов и в течение первых семи дней), долгосрочного хранения данных (более семи дней и до одного года) и дополнительного разветвления. Дополнительную информацию о стоимости Kinesis Data Streams см. на странице Цены на Amazon Kinesis Data Streams.
Вопрос. Сколько стоит использование Kinesis Data Streams в режиме предоставления по распределению?
В режиме предоставления ресурсов по распределению вы указываете количество сегментов, необходимых для вашего приложения, в зависимости от частоты запросов на запись и чтение. Сегмент – это единица скорости потока, которая обеспечивает пропускную способность 1 МБ/с для записи и 2 МБ/с для чтения. Каждый сегмент оплачивается на почасовой основе. Кроме того, оплачиваются записи, занесенные в поток данных Kinesis. При использовании необязательных возможностей, таких как расширенный срок хранения и дополнительное разветвление, начисляется дополнительная плата.
Ниже представлены две основных и три дополнительных составляющих стоимости в режиме предоставления по распределению в Kinesis Data Streams.
- Почасовая стоимость по количеству сегментов определяется числом сегментов в потоке данных Amazon Kinesis.
- Стоимость на основе единиц полезной нагрузки записи PUT определяется числом единиц полезной нагрузки объемом по 25 КБ, добавляемых источниками данных в поток.
Дополнительно
- Стоимость расширенного срока хранения данных – это дополнительная статья расходов, которая определяется по времени работы (в часах) сегмента потока данных. При использовании расширенного срока хранения данных взимается плата за расширенный срок хранения для каждого сегмента потока данных.
- За долговременное хранение данных взимается дополнительная плата, состоящая из двух сумм: за долговременное хранение и долговременное извлечение данных. Долговременное хранение данных отражает количество ГБ в месяц при периоде хранения более семи дней и до 365 дней. Долговременное извлечение данных отражает количество ГБ извлеченных данных, которые хранились более семи дней.
- Стоимость дополнительного разветвления – это дополнительная статья расходов, состоящая из двух сумм: стоимости часов работы потребителей с сегментами и стоимости извлечения данных. Часы работы потребителей с сегментами соответствуют числу сегментов в потоке, умноженному на число потребителей, использующих дополнительные копии данных. Стоимость извлеченных данных зависит от объема данных (в гигабайтах), доставленных потребителям с использованием дополнительного разветвления.
Дополнительную информацию о стоимости Kinesis Data Streams см. на странице Цены на Amazon Kinesis Data Streams.
Вопрос. Как рассчитывается час работы потребителей с сегментами при использовании дополнительного разветвления в режиме предоставления по распределению?
Час работы потребителей с сегментами рассчитывается путем умножения числа зарегистрированных потребителей потока на количество сегментов в потоке. Кроме того, плата будет начислена пропорционально тому времени, в течение которого потребитель был зарегистрирован для использования дополнительного разветвления. Например, если для потока данных, содержащего 10 сегментов, час работы потребителя с сегментом стоит 0,015 USD, то потребитель, использующий дополнительное разветвление, сможет считать данные из 10 сегментов. Таким образом, плата за час работы потребителей с сегментами составит 0,15 USD в час (1 потребитель * 10 сегментов * 0,015 USD за каждый час работы потребителя с сегментом). Если одновременно зарегистрировано два потребителя, использующих дополнительное разветвление, плата за час работы с сегментами составит 0,30 USD в час (2 потребителя * 10 сегментов * 0,015 USD).
Сравнение с другими сервисами AWS
Вопрос. Чем Amazon Kinesis Data Streams отличается от Amazon SQS?
Amazon Kinesis Data Streams предназначен для обработки потоков больших данных в режиме реального времени. Он поддерживает упорядочение записей и их считывание и/или воспроизведение множеством приложений Amazon Kinesis в одном и том же порядке. Клиентская библиотека Amazon Kinesis обеспечивает доставку всех записей с указанным ключом секции к одному и тому же обработчику записей, позволяя легко создавать разные приложения, считывающие данные из одного потока данных Kinesis (например, приложения для подсчета, агрегации и фильтрации). Сервис Amazon Simple Queue Service (SQS) позволяет создать надежную и хорошо масштабируемую размещенную очередь для хранения сообщений во время их передачи между компьютерами. Amazon SQS позволяет с легкостью перемещать данные между компонентами распределенных приложений и создавать приложения для независимой обработки сообщений (со встроенным анализом получения или неполучения на уровне сообщения), такие как автоматизированные потоки заданий.
Вопрос. Когда следует использовать Amazon Kinesis Data Streams, а когда – Amazon SQS?
Kinesis Data Streams рекомендуется использовать в сценариях с требованиями, подобными описанным ниже.
Направление связанных записей к одному и тому же обработчику записей (как в потоке MapReduce). Например, проще выполнить подсчет и агрегацию, если все записи с данным ключом направляются к одному и тому же обработчику записей.
Упорядочение записей. Например, можно передать данные журнала с узла приложения на узел обработки или архивации с сохранением порядка его записей.
Одновременное использование одного потока множеством приложений. Допустим, имеется два приложения, одно из которых обновляет панель управления в режиме реального времени, а другое архивирует данные в Amazon RedShift. Оба приложения должны иметь возможность одновременно получать данные из одного и того же потока независимо друг от друга.
Получение упорядоченных записей через несколько часов. Например, если у вас есть приложение для выставления счетов и приложение для аудита, которое запускается через несколько часов после него, то второе приложение можно запускать с интервалом до 365 дней после первого, поскольку данные в Kinesis Data Streams хранятся не более 365 дней.
Amazon SQS рекомендуется использовать в сценариях с требованиями, подобными описанным ниже.
Семантика сообщений (например, оповещение о получении или неполучении на уровне сообщений) и тайм-аут видимости. Например, если вам нужно независимо отслеживать успешное выполнение каждого задания из очереди, то Amazon SQS будет отслеживать оповещения о получении/неполучении. Таким образом, приложению не требуется хранить контрольные точки или указатели. Amazon SQS удалит сообщения, получение которых подтверждено, и выполнит повторную доставку непринятых сообщений по истечении заданного тайм-аута видимости.
Задержка отдельных сообщений. Например, если отдельные задания в очереди должны быть выполнены с задержкой, с помощью Amazon SQS для отдельных сообщений можно настроить задержку продолжительностью до 15 минут.
Динамическое обеспечение одновременного считывания и повышение пропускной способности. Например, если требуется добавить приложения считывания к очереди заданий до того, как задания будут исчерпаны, то с помощью Kinesis Data Streams можно увеличить число сегментов до необходимого (при этом требуется заблаговременно выделить достаточное количество сегментов).
Использование возможности прозрачного масштабирования Amazon SQS. Например, если число буферных запросов и нагрузка меняются в результате случайных скачков нагрузки или по мере роста вашего бизнеса, то благодаря возможности независимой обработки каждого буферизованного запроса Amazon SQS может автоматически масштабироваться и обслуживать нагрузку без получения инструкций по распределению ресурсов с вашей стороны.
Подробнее о ценах на Amazon Kinesis Data Streams