Общие вопросы
Вопрос. Что такое Потоки данных Amazon Kinesis?
Потоки данных Amazon Kinesis позволяют создавать собственные приложения для обработки или анализа потоковых данных при решении узкоспециальных задач. В поток данных Kinesis можно добавлять данные разных типов (например, истории посещений веб-сайтов, журналы приложений и ленты социальных сетей) из сотен тысяч источников. Приложения смогут считывать и обрабатывать данные из потока уже через несколько секунд с момента их поступления.
Вопрос. Какие виды управления берут на себя Потоки данных Amazon Kinesis?
Потоки данных Amazon Kinesis управляют инфраструктурой, обеспечивают хранение, передачу по сети и выполняют настройки для потоковой передачи данных с учетом скорости их поступления. Сервис избавляет от необходимости самостоятельно выполнять распределение, развертывание и текущее обслуживание аппаратного и программного обеспечения или иным образом поддерживать работу потоков данных. Кроме того, Kinesis Data Streams выполняет синхронную репликацию данных в трех зонах доступности AWS, обеспечивая высокую доступность и сохранность данных. По умолчанию Kinesis Data Streams автоматически масштабирует ресурсы, избавляя вас от необходимости распределять и контролировать их. Вы можете выбрать режим предоставления ресурсов по распределению, если хотите самостоятельно распределять и контролировать пропускную способность.
Вопрос. Для чего предназначен сервис «Потоки данных Amazon Kinesis»?
С помощью Потоков данных Amazon Kinesis можно быстро получать данные из нескольких источников и выполнять их непрерывную обработку, например преобразование перед помещением в хранилище, создание метрик или анализ в режиме реального времени, а также объединение данных в более сложные потоки с целью дальнейшей обработки.
Вот несколько типичных сценариев использования Kinesis Data Streams.
- Ускоренный прием журналов и других данных. Ждать пакетирования данных не требуется. Поступление данных из источников в поток данных Kinesis осуществляется по мере их генерации, что предотвращает потерю данных в случае сбоя в работе их источника. Например, данные системных журналов и журналов приложений могут непрерывно поступать в поток данных, становясь доступными для обработки уже через несколько секунд.
- Метрики и отчеты в режиме реального времени. Извлекать метрики и генерировать отчеты на основе данных потока Kinesis можно в режиме реального времени. Например, приложение Amazon Kinesis может создавать метрики и отчеты на основе данных системных журналов и журналов приложений по мере их поступления в виде потоков, а не в виде пакетов, которые приходится ждать.
- Анализ данных в режиме реального времени. С помощью Kinesis Data Streams можно выполнять анализ потоковых данных в режиме реального времени. Например, в поток данных Kinesis можно добавлять данные о посещениях веб-сайта. Приложение Kinesis будет выполнять их анализ в режиме реального времени и предоставлять ценную аналитическую информацию уже через несколько минут, а не часов или дней.
- Сбор данных журналов и событий. Собирайте данные журналов и событий из таких источников, как серверы, стационарные компьютеры и мобильные устройства. При этом созданные вами приложения, использующие Amazon Lambda или Управляемый сервис Amazon для Apache Flink, будут выполнять непрерывную обработку данных, создавать метрики, работать с информационными панелями в режиме реального времени и передавать сводные данные в хранилища, например в Простой сервис хранения данных Amazon (Amazon S3).
- Запуск приложений, управляемых событиями. Быстрое сопряжение с AWS Lambda позволяет оперативно реагировать на события в приложениях из своей среды и адаптироваться к ним в любых масштабах.
Вопрос. Как использовать Потоки данных Amazon Kinesis?
После регистрации в 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 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 можно с помощью операций PutRecord и PutRecords, KPL или агента Amazon Kinesis.
Вопрос. В чем разница между PutRecord и PutRecords?
Операция PutRecord позволяет добавить одну запись данных с помощью вызова API, а операция PutRecords позволяет одним вызовом API добавить несколько записей данных. Дополнительные сведения см. в разделах PutRecord и PutRecords.
Вопрос. Что такое библиотека источников 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, определяемой числом сегментов.
Чтение и обработка данных из Потоков данных Amazon Kinesis
Вопрос. Что такое потребитель и какие типы потребителей существуют в Потоках данных Amazon Kinesis?
Потребитель – это приложение, которое обрабатывает все данные из потока данных Kinesis. Вы можете выбрать тип потребителя с общим или дополнительным разветвлением для считывания данных из потока Kinesis. Потребители с общим разветвлением совместно используют канал, максимальная скорость чтения из которого составляет 2 МБ/с и пять транзакций в секунду. При этом необходимо использовать API GetRecords. Потребители с дополнительным разветвлением получают собственную полосу пропускания в 2 МБ/с для чтения, что позволяет нескольким потребителям параллельно считывать данные из одного потока, не конкурируя за пропускную способность с другими потребителями. Для потребителей, использующих дополнительное разветвление, необходимо применять API SubscribeToShard. Рекомендуем использовать потребителей с дополнительным разветвлением, если к потоку данных необходимо добавить нескольких потребителей.
Вопрос. Как обрабатывать данные, захваченные и хранящиеся в Потоках данных Kinesis?
Для обработки данных, хранящихся в Потоках данных Kinesis, можно использовать управляемые сервисы, такие как AWS Lambda, Управляемый сервис Amazon для Apache Flink и 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 в режиме предоставления по распределению, разделив имеющиеся сегменты с помощью SplitShard API. Вы можете уменьшить объем ресурсов, объединив два сегмента с помощью MergeShard API. Вы также можете использовать 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.
Расширенное и долговременное хранение данных
Какой период хранения поддерживают Потоки данных Amazon Kinesis?
Период хранения по умолчанию, составляющий 24 часа, применим в тех случаях, когда при обработке данных в режиме реального времени возникают нерегулярные задержки. Хранение в течение семи дней дает возможность повторной обработки данных за эти семь дней для решения проблем потенциальных последующих потерь данных. Долговременное хранение данных в течение периода дольше семи дней и до 365 дней дает возможность повторной обработки данных в таких сценариях использования, как виртуальное тестирование алгоритмов, заполнение хранилища данных и аудит.
Можно ли использовать имеющиеся API Потоков данных Amazon Kinesis для чтения данных, которые хранились дольше семи дней?
Да. Для чтения данных, которые хранились дольше семи дней, можно использовать те же 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 для потребителей с дополнительным разветвлением.
Вопрос. Поддерживают ли Потоки данных Kinesis регистрацию схем?
Да. Клиенты Потоков данных Kinesis могут использовать реестр схем AWS Glue (бессерверная возможность AWS Glue), через KPL и KCL либо посредством API реестра AWS Glue Schema в AWS Java SDK. Доступ к реестру схем можно получить без дополнительной оплаты.
Чтобы начать работу и узнать больше, ознакомьтесь с пользовательской документацией для реестров схем.
Управление Потоками данных Kinesis
Вопрос. Как изменить пропускную способность потока данных Amazon Kinesis?
Изменить пропускную способность потока данных можно двумя способами. Для увеличения или уменьшения числа сегментов в потоке данных можно использовать вызов API UpdateShardCount или Консоль управления AWS. Пропускную способность потока данных Amazon Kinesis можно также изменить путем изменения числа сегментов в потоке данных.
Вопрос. Сколько времени требуется для изменения пропускной способности потока данных Amazon Kinesis в режиме предоставления по распределению с помощью API UpdateShardCount или Консоли управления AWS?
Как правило, запросы на изменение пропускной способности потока выполняются в течение нескольких минут. Большие запросы выполняются дольше, чем небольшие.
Вопрос. Остаются ли Потоки данных Kinesis доступными при изменении пропускной способности потока данных Kinesis в режиме предоставления по распределению или при автоматическом масштабировании в режиме предоставления ресурсов по требованию?
Да. Параллельно с изменением пропускной способности потока данных Kinesis с помощью API UpdateShardCount, путем изменения числа сегментов или автоматически в режиме предоставления ресурсов по требованию можно добавлять в поток данные и считывать их из него.
Вопрос. Как отслеживать выполнение операций и производительность потока данных Amazon Kinesis?
В консоли управления Потоков данных Amazon Kinesis отображаются основные метрики операций и производительности, такие как скорость передачи входящих и исходящих данных потока Kinesis. Кроме того, Потоки данных Amazon Kinesis интегрирован с Amazon CloudWatch, что позволяет собирать, просматривать и анализировать метрики CloudWatch для потоков данных и их сегментов. Дополнительную информацию о метриках Потоков данных Amazon Kinesis см. на странице Мониторинг Потоков данных Amazon Kinesis с помощью Amazon CloudWatch.
Обратите внимание, что все метрики на уровне потоков бесплатны. Все включенные метрики на уровне сегментов оплачиваются по тарифам Amazon CloudWatch.
Вопрос. Как управлять доступом к потокам данных Amazon Kinesis?
Потоки данных Amazon Kinesis интегрированы с сервисом Управление идентификацией и доступом AWS (AWS IAM), который позволяет безопасно управлять доступом пользователей к сервисам и ресурсам AWS. Например, можно создать политику, которая позволит добавлять данные в поток только определенному пользователю или группе. Вы также можете прикрепить политику на основе ресурсов к своему потоку данных или зарегистрированному потребителю, чтобы управлять доступом на уровне ресурсов. Дополнительную информацию об управлении доступом и контроле потока данных см. в разделе Управление доступом к ресурсам Потоков данных Amazon Kinesis с помощью IAM.
Вопрос. Как предоставить доступ к моему потоку данных другой учетной записи?
Вы можете использовать политику IAM, основанную на ролях или ресурсах, чтобы поделиться доступом с другой учетной записью. Чтобы поделиться доступом с функцией AWS Lambda из нескольких учетных записей, прикрепите политику на основе ресурсов к своему потоку данных или потребителю для предоставления доступа к исполняющей роли функции Lambda. Подробнее см. в разделе Использование AWS Lambda с Amazon Kinesis.
Вопрос. Как получить журналы вызовов 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 см. в разделе Использование тегов в Потоках данных Amazon Kinesis.
Безопасность
Вопрос. Насколько защищены мои данные при использовании Kinesis Data Streams?
Сервисы Amazon Kinesis безопасны по умолчанию. Только владельцы аккаунтов и потоков данных имеют доступ к создаваемым ими ресурсам Kinesis. Kinesis поддерживает аутентификацию пользователей для управления доступом к данным. Можно использовать политики IAM для выборочного предоставления разрешений пользователям и группам пользователей. Безопасно размещать данные в Kinesis и получать их можно через адреса SSL с использованием протокола HTTPS. Если нужна дополнительная защита, можно использовать шифрование на стороне сервера с помощью ключей сервиса управления ключами AWS (AWS KMS) для шифрования данных, хранящихся в потоке. AWS KMS позволяет применять для шифрования сгенерированные AWS ключи KMS, а также использовать собственный ключ. Наконец, можно использовать собственные библиотеки для шифрования данных на стороне клиента, прежде чем вводить их в Kinesis.
Вопрос. Можно ли получить частный доступ к API Потоков данных Amazon Kinesis из Виртуального частного облака Amazon (Amazon VPC) без использования публичных IP-адресов?
Да. Частный доступ к 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?
Да. Есть два способа это сделать. Можно использовать шифрование на стороне сервера, которое является полностью управляемой возможностью, выполняющей автоматическое шифрование и расшифровку данных по мере их попадания в поток данных и, соответственно, получения из него. Можно также записать в поток уже зашифрованные данные, применив шифрование и расшифровку на стороне клиента.
Вопрос. Почему следует использовать шифрование на стороне сервера вместо шифрования на стороне клиента?
Вы можете выбрать шифрование на стороне сервера вместо шифрования на стороне клиента по одной из указанных ниже причин.
- Трудно принудительно обеспечить шифрование на стороне клиента.
- В дополнение к шифрованию на стороне клиента требуется обеспечить дополнительный уровень безопасности.
- Сложно реализовать схемы управления ключами на стороне клиента.
Вопрос. Что такое шифрование на стороне сервера?
При использовании для 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 можно использовать для Потоков данных Amazon Kinesis шифрование на стороне сервера?
Шифрование на стороне сервера для Потоков данных Amazon Kinesis доступно в регионе AWS GovCloud и во всех публичных регионах, за исключением региона «Китай (Пекин)».
Вопрос. Как запустить, обновить или удалить шифрование потока данных на стороне сервера?
Все эти операции могут быть выполнены с помощью Консоли управления AWS или пакета средств разработки ПО (SDK) AWS. Подробнее рассказывается в руководстве по началу работы с шифрованием Потоков данных Amazon Kinesis на стороне сервера.
Вопрос: Какой алгоритм используется для шифрования на стороне сервера?
Kinesis Data Streams использует для шифрования алгоритм AES-GCM 256.
Вопрос. Если зашифровать поток данных, в который уже были записаны данные, будь то обычный или зашифрованный текст, будут ли все данные в потоке зашифрованы или расшифрованы при обновлении шифрования?
Нет. При новом применении шифрования будут зашифрованы (или расшифрованы) только новые данные, записываемые в поток.
Вопрос. Что именно шифруется при шифровании потоков Kinesis Data Streams на стороне сервера?
При шифровании на стороне сервера шифруются полезные данные вместе с ключом секции, который указан приложениями – источниками потока данных.
Вопрос: Шифрование на стороне сервера работает на уровне сегмента или потока?
Шифрование на стороне сервера работает на уровне потока.
Вопрос. Можно ли изменить ключ KMS, который используется для шифрования конкретного потока данных?
Да. Используя Консоль управления AWS или SDK AWS, можно выбрать новый ключ для применения к конкретному потоку данных.
Вопрос. Доступен ли сервис «Потоки данных Amazon Kinesis» на уровне бесплатного пользования AWS?
Нет. В настоящее время сервис «Потоки данных Amazon Kinesis» недоступен на уровне бесплатного пользования AWS. AWS
Уровень бесплатного пользования – это программа, в рамках которой предлагается бесплатно воспользоваться пробными версиями ряда сервисов AWS. Подробнее
об уровне бесплатного пользования: Уровень бесплатного пользования AWS.
Соглашение об уровне обслуживания
Вопрос. Что гарантирует соглашение об уровне обслуживания для Потоков данных Amazon Kinesis?
Соглашение об уровне обслуживания (SLA) для Kinesis Data Streams гарантирует бесперебойную ежемесячную работу сервиса Kinesis Data Streams на уровне не менее 99,9 %.
Вопрос. Как узнать, могу ли я претендовать на компенсацию по соглашению об уровне обслуживания?
Согласно условиям нашего соглашения об уровне обслуживания в отношении Kinesis Data Streams, компенсация предоставляется, если бесперебойная ежемесячная работа сервиса в рамках одного региона в нескольких зонах доступности, в которых запущено задание, составила менее 99,9 % в течение любого оплачиваемого месяца.
С условиями и положениями соглашения об уровне обслуживания, а также подробностями оформления заявки на компенсацию можно ознакомиться на странице сведений об SLA Потоков данных Amazon Kinesis.
Цены и оплата
Вопрос. Сколько стоит использование Потоков данных Amazon Kinesis?
В Потоках данных Amazon Kinesis вы платите только за используемые ресурсы. Авансовые и минимальные платежи отсутствуют, а потребляемые ресурсы оплачиваются по факту использования. В Потоках данных Amazon Kinesis есть два потоковых режима – режим предоставления ресурсов по требованию и по распределению, – и у каждого свои способы оплаты.
Вопрос. Сколько стоит использование 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, а когда – Управляемую потоковую передачу Amazon для Apache Kafka (Amazon MSK)?
Потоки данных Amazon Kinesis и Amazon MSK – популярные платформы потоковой передачи данных, которые помогают создавать собственные потоковые рабочие нагрузки, обрабатывающие данные в специализированных целях. Оба сервиса масштабируемы, безопасны и обладают высокой доступностью. Их можно использовать для реализации сценариев использования потоковой передачи, таких как веб-аналитика и аналитика журналов в реальном времени, персонализация обслуживания клиентов, архитектуры, управляемые событиями, аналитика Интернета вещей и обнаружение мошенничества в реальном времени. При выборе между ними важно учитывать ваш конкретный вариант использования и требования. Вот несколько факторов, которые следует учитывать:
Ознакомление
- Если вы новичок в технологиях потоковой передачи, используйте Потоки данных Amazon Kinesis.
- Если у вас уже есть приложения, работающие на Apache Kafka, используйте MSK. В MSK уже действует миграционная программа Kafka (KMP) и руководство по миграции, облегчающее миграцию.
Предпочтение открытому исходному коду
- Если вы предпочитаете использовать технологии с открытым исходным кодом, мы рекомендуем использовать MSK. И MSK, и MSK Connect полностью совместимы с Apache Kafka и Kafka Connect с открытым исходным кодом соответственно.
Вопрос. Чем Потоки данных Amazon Kinesis отличаются от Amazon SQS?
Потоки данных Amazon Kinesis предназначены для обработки потоков больших данных в режиме реального времени. Он поддерживает упорядочение записей и их считывание и/или воспроизведение множеством приложений Amazon Kinesis в одном и том же порядке. Клиентская библиотека Amazon Kinesis обеспечивает доставку всех записей с указанным ключом секции к одному и тому же обработчику записей, позволяя легко создавать разные приложения, считывающие данные из одного потока данных Kinesis (например, приложения для подсчета, агрегации и фильтрации). Сервис Amazon Simple Queue Service (Amazon SQS) позволяет создать надежную и хорошо масштабируемую размещенную очередь для хранения сообщений во время их передачи от компьютера к компьютеру. Amazon SQS позволяет с легкостью перемещать данные между компонентами распределенных приложений и создавать приложения для независимой обработки сообщений (со встроенным анализом получения или неполучения на уровне сообщения), такие как автоматизированные потоки заданий.
Вопрос. Когда следует использовать Потоки данных Amazon Kinesis, а когда – 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 может автоматически масштабироваться и обслуживать нагрузку без получения инструкций по распределению ресурсов с вашей стороны.
Подробнее о ценах на Потоки данных Amazon Kinesis