Вопрос: Что такое Amazon Kinesis Streams?

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

Вопрос: Какие виды управления берет на себя Amazon Kinesis Streams?

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

Вопрос: Для чего предназначен сервис Amazon Kinesis Streams?

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

  • Ускоренный прием логов и других данных. Не нужно ждать пакетирования данных. Поступление данных из источников в поток Amazon Kinesis осуществляется по мере их генерации, что предотвращает потерю данных в случае сбоя в работе их источника. Например, данные системных логов и логов приложений могут непрерывно поступать в поток, становясь доступными для обработки уже через несколько секунд. 
  • Метрики и отчеты в реальном времени. Извлекать метрики и генерировать отчеты на основе данных потока Amazon Kinesis можно в режиме реального времени. Например, приложение Amazon Kinesis может создавать метрики и отчеты на основе данных системных логов и логов приложений по мере их поступления в виде потоков, а не в виде пакетов, требующих длительного ожидания.
  • Анализ данных в режиме реального времени. С помощью Amazon Kinesis Streams можно выполнять анализ потоковых данных в режиме реального времени. Например, в поток Amazon Kinesis можно добавлять данные о посещениях веб-сайта, и приложение Amazon Kinesis будет выполнять их анализ в реальном времени и предоставит вам важную информацию уже через несколько минут, а не часов или дней. 
  • Комплексная обработка потоковых данных. Вы можете создавать ориентированные ациклические графы (DAG) на основе приложений Amazon Kinesis и потоков данных. В этом сценарии данные из одного или нескольких приложений Amazon Kinesis поступают в другой поток Amazon Kinesis для дальнейшей обработки, создавая последовательность этапов потоковой обработки данных.

Вопрос: Как работать с Amazon Kinesis Streams?

Зарегистрировавшись в Amazon Web Services, вы можете начать работу с Amazon Kinesis Streams. Для этого необходимо выполнить следующие действия.

Вопрос: Каковы ограничения Amazon Kinesis Streams?

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

  • По умолчанию записи в потоке доступны не более 24 часов с момента поступления в поток. Срок хранения данных в потоке можно увеличить до 7 дней.
  • Максимальный объем BLOB-объекта данных (полезных данных до их кодирования по схеме Base64) в одной записи составляет 1 МБ. 
  • Один сегмент поддерживает до 1000 операций записи в секунду.

Дополнительные сведения о других ограничениях на уровне API см. в разделе Ограничения Amazon Kinesis Streams.

Вопрос: Чем Amazon Kinesis Streams отличается от Amazon SQS?

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

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

Вопрос: Когда следует использовать Amazon Kinesis Streams, а когда Amazon SQS?

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

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

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

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


Вопрос: Что такое сегмент?

Сегмент – это основная единица передачи данных потока Amazon Kinesis. Один сегмент обеспечивает передачу входных данных со скоростью 1 МБ/с и передачу выходных данных со скоростью 2 МБ/с. Один сегмент поддерживает до 1000 записей в секунду. При создании потока вы задаете требуемое количество сегментов. Например, можно создать поток с двумя сегментами. Этот поток обеспечит передачу входных данных со скоростью 2 МБ/с и передачу выходных данных со скоростью 4 МБ/с с поддержкой до 2000 записей в секунду. Вы можете отслеживать метрики сегментов в Amazon Kinesis Streams и динамически добавлять или удалять сегменты по мере изменения пропускной способности с помощью операции изменения числа сегментов в потоке.

Вопрос: Что такое запись?

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

Вопрос: Что такое ключ секции?

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

Вопрос: Что такое порядковый номер?

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


Вопрос: Как создать поток Amazon Kinesis?

Зарегистрировавшись в Amazon Web Services, вы можете создать поток Amazon Kinesis либо с помощью консоли управления Amazon Kinesis, либо с помощью API CreateStream.

Вопрос: Как выбрать оптимальную пропускную способность потока Amazon Kinesis?

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

  1. Оцените средний объем в КБ записи, записываемой в поток, закруглив его до ближайшего целого числа килобайтов. (average_data_size_in_KB)
  2. Оцените число записей, записываемых в поток за одну секунду. (number_of_records_per_second)
  3. Задайте число приложений Amazon Kinesis, которые одновременно и независимо получают данные из потока. (number_of_consumers)
  4. Вычислите пропускную способность для записи входящих данных в КБ (incoming_write_bandwidth_in_KB), которая равна значению average_data_size_in_KB, умноженному на значение number_of_records_per_seconds.
  5. Вычислите пропускную способность для чтения исходящих данных в КБ (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?

Пропускная способность потока Amazon Kinesis измеряется в сегментах. Наименьшая пропускная способность потока равна одному сегменту и обеспечивает передачу входных данных со скоростью 1 МБ/с и передачу выходных данных со скоростью 2 МБ/с.

Вопрос: Какова максимальная пропускная способность потока Amazon Kinesis?

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

Вопрос: Как объем записи связан со скоростью поступления данных в поток Amazon Kinesis?

Сегмент обеспечивает передачу входных данных со скоростью 1 МБ/с и поддерживает до 1000 записей PUT в секунду. Таким образом, если объем записи будет менее 1 КБ, то фактическая скорость передачи входных данных в сегменте составит менее 1 МБ/с и будет ограничена максимальным числом операций записи в секунду.


Вопрос: Как добавлять данные в поток Amazon Kinesis?

Данные можно добавить в поток Amazon Kinesis с помощью API PutRecord или PutRecords либо с помощью библиотеки источников Amazon Kinesis (KPL) или агента Amazon Kinesis.

Вопрос: В чем разница между API PutRecord и PutRecords?

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

Вопрос: Что такое библиотека источников Amazon Kinesis?

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

Вопрос: Какие языки программирования или платформы можно использовать для работы с API Amazon Kinesis?

API Amazon Kinesis доступны в пакетах SDK Amazon Web Services. Перечень языков программирования и платформ, поддерживаемых SDK Amazon Web Services, см. на странице Инструменты Amazon Web Services.

Вопрос: Для каких языков программирования доступна библиотека источников Amazon Kinesis?

Ядро библиотеки источников Amazon Kinesis (KPL) построено на основе модуля C++, и его можно скомпилировать для работы на любой платформе, для которой имеется актуальный компилятор C++. Для этой библиотеки в настоящее время доступен только интерфейс Java,но планируется добавить поддержку других языков программирования.

Вопрос: Что такое агент Amazon Kinesis?

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

Вопрос: Какие платформы поддерживает агент Amazon Kinesis?

Агент Amazon Kinesis в настоящее время поддерживает Amazon Linux и Red Hat Enterprise Linux.

Вопрос: Как загрузить агент Amazon Kinesis?

Чтобы загрузить и установить агент Amazon Kinesis, необходимо использовать следующую команду.

В Amazon Linux: sudo yum install -y aws-kinesis-agent

В Red Hat Enterprise Linux: sudo yum install -y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

Загрузка из GitHub: awlabs/amazon-kinesis-agent

Вопрос: Как использовать агент Amazon Kinesis?

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

Вопрос: Что произойдет, если при добавлении данных в поток Amazon Kinesis будет превышен предел пропускной способности потока?

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

Вопрос: Какая информация принимается во внимание при добавлении данных в поток Amazon Kinesis с помощью вызова PutRecord или PutRecords ?

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


Вопрос: Что такое приложение Amazon Kinesis?

Приложение Amazon Kinesis – это приложение – потребитель данных, которое считывает и обрабатывает данные из потока Amazon Kinesis. Такие приложения можно создавать с помощью API Kinesis или с помощью клиентской библиотеки Amazon Kinesis.

Вопрос: Что такое клиентская библиотека Amazon Kinesis (KCL)?

Клиентская библиотека Amazon Kinesis для Java | Python | Ruby | Node.js | .NET – это встроенная библиотека, позволяющая легко создавать приложения Amazon Kinesis для считывания и обработки данных из потока Amazon Kinesis. Она берет на себя такие сложные задачи, как адаптация к изменениям объема потока, балансировка нагрузки потоковых данных, координация распределенных сервисов и отказоустойчивая обработка данных, позволяя разработчику сосредоточить внимание на функциональном коде создаваемого приложения.

Вопрос: Что такое связующая библиотека Amazon Kinesis?

Связующая библиотека Amazon Kinesis – это встроенная библиотека, которая позволяет легко интегрировать Amazon Kinesis Streams с другими сервисами AWS и средствами сторонних разработчиков. Для использования связующей библиотеки Amazon Kinesis требуется клиентская библиотека Amazon Kinesis (KCL) для Java | Python | Ruby | Node.js | .NET. Текущая версия этой библиотеки обеспечивает подключение к Amazon DynamoDB, Amazon Redshift, Amazon S3 и Elasticsearch. Кроме того, библиотека содержит примеры подключений для каждого типа, а также файлы компоновки Apache Ant для запуска примеров.

Вопрос: Что такое Amazon Kinesis Storm Spout?

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

Вопрос: Для каких языков программирования доступны клиентская библиотека Amazon Kinesis (KCL), связующая библиотека Amazon Kinesis и библиотека Amazon Kinesis Storm Spout?

Клиентская библиотека Amazon Kinesis в настоящее время доступна для JavaPythonRuby, Node.js и .NETСвязующая библиотека Amazon Kinesis и Amazon Kinesis Storm Spout в настоящее время доступны только для Java, но планируется добавить поддержку других языков программирования.

Вопрос: Необходимо ли для создания приложений Amazon Kinesis использовать клиентскую библиотеку Amazon Kinesis (KCL)?

Нет, с помощью API Amazon Kinesis также можно создавать приложения Amazon Kinesis. Тем не менее рекомендуется использовать клиентскую библиотеку Amazon Kinesis для Java | Python | Ruby | Node.js | .NET, поскольку она берет на себя выполнение трудоемких задач по распределенной обработке потоков, делая процесс разработки приложений более эффективным.

Вопрос: Как клиентская библиотека Amazon Kinesis взаимодействует с приложениями Amazon Kinesis?

Клиентская библиотека Amazon Kinesis (KCL) для Java | Python | Ruby | Node.js | .NET выступает как посредник между сервисом Amazon Kinesis Streams и вашим приложением Amazon Kinesis. Она взаимодействует с приложением через интерфейс IRecordProcessor. Приложение выполняет этот интерфейс, и посредством методов последнего библиотека KCL обращается к коду приложения.

Дополнительную информацию о создании приложений с KCL см. в руководстве Разработка приложений-потребителей для Amazon Kinesis с помощью клиентской библиотеки Amazon Kinesis.

Вопрос: Что собой представляют исполнитель и обработчик записей, создаваемые клиентской библиотекой Amazon Kinesis?

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

Вначале приложение обращается к клиентской библиотеке Amazon Kinesis (KCL) для Java | Python | Ruby | Node.js | .NET для инстанцирования исполнителя. С помощью этого вызова библиотека KCL получает данные конфигурации для приложения, такие как имя потока и данные доступа AWS. В этом вызове также передается ссылка на выполнение интерфейса IRecordProcessorFactory. С помощью этой фабрики библиотека KCL создает новые обработчики записей в количестве, требуемом для обработки потоковых данных. С этими обработчиками KCL взаимодействует посредством интерфейса IRecordProcessor.

Вопрос: Каким образом клиентская библиотека Amazon Kinesis продолжает отслеживать записи данных во время обработки приложением Amazon Kinesis?

Клиентская библиотека Amazon Kinesis (KCL) для Java | Python | Ruby | Node.js | .NET автоматически создает таблицу Amazon DynamoDB для каждого приложения Amazon Kinesis, чтобы отслеживать и обрабатывать информацию о состоянии, такую как события функции изменения числа сегментов и контрольные точки порядковых номеров. Имя этой таблицы DynamoDB будет совпадать с именем приложения, поэтому убедитесь, что имя вашего приложения не конфликтует с именами существующих таблиц DynamoDB того же аккаунта в том же регионе.

Все исполнители, связанные с одним и тем же именем приложения, работают с одним и тем же потоком Amazon Kinesis. При запуске дополнительного экземпляра того же кода приложения, но с другим именем, библиотека KCL будет рассматривать его как совершенно отдельное приложение, также работающее с данным потоком.

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

Дополнительные сведения о том, как KCL контролирует состояние приложения, см. в разделе Контроль состояния приложения Amazon Kinesis.

Вопрос: Как автоматически масштабировать обрабатывающие ресурсы приложения Amazon Kinesis с помощью клиентской библиотеки Amazon Kinesis?

Вы можете создать множество экземпляров вашего приложения Amazon Kinesis, которые будут выполняться некоторым набором инстансов Amazon EC2, входящих в группу Auto Scaling. При возникновении потребности в дополнительных обрабатывающих ресурсах инстанс Amazon EC2, на котором работает экземпляр приложения, будет автоматически инстанцирован. Клиентская библиотека Amazon Kinesis (KCL) для Java | Python | Ruby | Node.js | .NET сгенерирует исполнитель для этого нового инстанса и автоматически переместит обработчики записей с существующих перегруженных инстансов на новый инстанс.

Вопрос: Почему вызов GetRecords возвращает пустой результат, хотя поток Amazon Kinesis содержит данные?

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

Вопрос: Что представляет собой значение ApproximateArrivalTimestamp, возвращаемое в результате операции GetRecords?

Каждая запись содержит метку времени, называемую ApproximateArrivalTimestamp. Эта метка устанавливается при успешном получении и сохранении записи потоком Amazon Kinesis. Метка устанавливается с точностью до миллисекунд, однако полное соответствие действительности не гарантируется. К примеру, метки времени записей в сегменте или в потоке могут быть не упорядочены.

Вопрос: Что произойдет, если при считывании данных приложением Amazon Kinesis из потока Amazon Kinesis будут превышен предел пропускной способности потока?

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


Вопрос: Как изменить пропускную способность потока Amazon Kinesis?

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

Вопрос: Сколько времени требуется для изменения пропускной способности потока Amazon Kinesis с помощью API UpdateShardCount или Консоли управления AWS?

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

Вопрос: Каковы ограничения API UpdateShardCount?

Сведения об ограничениях API UpdateShardCount см. в справочном руководстве по API Amazon Kinesis Streams.

Вопрос: Можно ли продолжать работу с Amazon Kinesis Streams во время изменения пропускной способности потока Amazon Kinesis, выполняемого с помощью API UpdateShardCount либо путем изменения числа сегментов?

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

Вопрос: Как выполняется изменение числа сегментов потока?

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

Вопрос: Как часто можно менять пропускную способность потока Amazon Kinesis путем изменения числа сегментов и сколько времени занимает эта операция?

Операция изменения числа сегментов (как при разделении сегментов, так и при их объединении) занимает несколько секунд. За один раз можно выполнить только одну такую операцию. Таким образом, для того чтобы вдвое повысить пропускную способность потока Amazon Kinesis из одного сегмента путем его разделения, потребуется несколько секунд, а чтобы вдвое повысить пропускную способность потока из 1000 сегментов, потребуется 30 000 секунд (8,3 часа). Поэтому, если вам требуется повышение пропускной способности потока, эту операцию рекомендуется выполнять заблаговременно.

Вопрос: Как изменить срок хранения данных потока Amazon Kinesis?

По умолчанию Amazon Kinesis хранит данные до 24 часов. Срок хранения данных в потоке можно увеличить до 7 дней.

Дополнительные сведения об изменении срока хранения данных см. в разделе «Изменение срока хранения данных».

Вопрос: Как следить за выполнением операций и производительностью потока Amazon Kinesis?

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

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

Вопрос: Как управлять доступом к потокам Amazon Kinesis?

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

Вопрос: Как получить логи вызовов API к потоку Amazon Kinesis для анализа безопасности и разрешения проблем?

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

Вопрос: Как контролировать ресурсы потоков Amazon Kinesis и связанные с ними расходы?

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

Вопрос: Как контролировать уровень использования сегментов?

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


Вопрос: Насколько защищены мои данные при использовании Kinesis Streams?

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

Вопрос: Можно ли получить частный доступ к API-интерфейсам Kinesis Streams из облака Amazon Virtual Private Cloud (VPC) без использования публичных IP-адресов?

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


Вопрос: Можно ли шифровать данные, которые попадают в поток Kinesis?

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

Вопрос: Почему следует использовать шифрование на стороне сервера вместо шифрования на стороне клиента?

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

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

Вопрос: Что такое шифрование на стороне сервера?

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

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

Вопрос: Существует ли руководство по началу работы с шифрованием на стороне сервера?

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

Вопрос: Влияет ли шифрование на стороне сервера на то, как приложения взаимодействуют с Kinesis Streams?

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

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

Вопрос: Будут ли дополнительные затраты при использовании шифрования на стороне сервера?

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

Ключи

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

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

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

Вопрос: В каких регионах AWS можно использовать шифрование на стороне сервера для Kinesis Streams?

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

Вопрос: Как запустить, обновить или удалить шифрование потока на стороне сервера?

Все эти операции могут быть выполнены с помощью Консоли управления AWS или AWS SDK. Подробнее см. в Руководстве по началу работы с шифрованием потоков Kinesis Streams на стороне сервера.

Вопрос: Какие алгоритмы шифрования используются для шифрования на стороне сервера?

Kinesis Streams использует для шифрования алгоритм AES-GCM 256.

Вопрос: Если зашифровать поток, в который уже были записаны данные, будь то незашифрованный или зашифрованный текст, будут ли все данные в потоке зашифрованы или дешифрованы при обновлении шифрования?

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

Вопрос: Что шифруется при шифровании потоков Kinesis Streams на стороне сервера?

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

Вопрос: Шифрование на стороне сервера работает на уровне сегмента или потока?

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

Вопрос: Можно ли изменить ключ CMK, который используется для шифрования конкретного потока?

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

Вопрос: Можно ли получить подробное описание жизненного цикла шифрования данных с момента их отправки в поток Kinesis с включенным шифрованием на стороне сервера и до момента их извлечения?

Ниже описано, как Kinesis Streams использует ключ CMK сервиса AWS KMS для шифрования сообщения перед его сохранением при выполнении запроса PUT и для дешифрования его после извлечения при выполнении запроса GET. Kinesis и AWS KMS выполняют следующие действия (включая дешифрование) при вызове putRecord(s) или getRecords для потока с включенным шифрованием на стороне сервера.

  1. Данные отправляются от клиентского приложения-источника Kinesis (клиента) к Kinesis, используя SSL через протокол HTTPS.
  2. Данные принимаются Kinesis, сохраняются в оперативной памяти, а к полезным данным и ключу секции записи применяется шифрование.
  3. Kinesis запрашивает входной материал в виде простого текста для создания ключей шифрования (IKM), затем копия IKM зашифровывается с помощью выбранного клиентом главного ключа KMS.
  4. AWS KMS создает IKM, шифрует его с помощью главного ключа и отправляет как незашифрованный IKM, так и зашифрованный IKM в Kinesis.
  5. Kinesis использует незашифрованный IKM для получения ключей данных, которые являются уникальными для каждой записи.
  6. Kinesis шифрует ключ полезных данных и секции с помощью ключей данных и удаляет незашифрованный ключ из памяти.
  7. Kinesis присоединяет зашифрованный IKM к зашифрованным данным.
  8. Незашифрованный IKM кэшируется в памяти для повторного использования, пока срок его действия не истечет через 5 минут.
  9. Kinesis поставляет зашифрованное сообщение в серверное хранилище, где оно хранится и откуда извлекается с помощью вызова getRecords.

Kinesis и AWS KMS выполняют следующие действия (включая дешифрование) при вызове getRecords.

  1. Когда выполняется вызов getRecords, клиентская часть Kinesis извлекает зашифрованную запись из серверной части сервиса.
  2. Kinesis делает запрос в KMS с использованием токена, созданного клиентским запросом. AWS KMS авторизует его.
  3. Kinesis дешифрует зашифрованный IKM, хранящийся в записи.
  4. Kinesis воссоздает ключи данных для записи из дешифрованного IKM.
  5. Если авторизация прошла успешно, Kinesis дешифрует полезные данные и удаляет незашифрованный ключ данных из памяти.
  6. Kinesis предоставляет полезные данные через SSL и HTTPS потребителю (клиенту) Kinesis, запрашивающему записи.

 


Вопрос: Доступен ли сервис Amazon Kinesis Streams на уровне бесплатного пользования AWS?

Нет. В настоящее время сервис Amazon Kinesis Streams недоступен на уровне бесплатного пользования AWS. Уровень бесплатного пользования AWS – это программа, предлагающая бесплатную пробную версию ряда сервисов AWS. Подробнее об уровне бесплатного пользования см. раздел Уровень бесплатного пользования AWS.

Вопрос: Сколько стоит использование Amazon Kinesis Streams?

В Amazon Kinesis Streams вы платите только за используемые ресурсы. Сервис не предусматривает авансовой оплаты или минимальных стартовых взносов. Расходы при использовании сервиса Amazon Kinesis Streams включают две основные составляющие и одну дополнительную.

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

Дополнительные сведения о ценах Amazon Kinesis Streams см. на странице Цены на Amazon Kinesis Streams.

Вопрос: Меняется ли стоимость на основе единиц полезной нагрузки записи при использовании API PutRecords вместо API PutRecord?

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

Вопрос: Взимается ли плата за сегменты в состоянии CLOSED?

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

Вопрос: Связаны ли с использованием Amazon Kinesis Streams еще какие-либо затраты, помимо затрат собственно на Amazon Kinesis Streams?

Если вы используете сервис Amazon EC2 для работы приложений Amazon Kinesis, то с вас будет взиматься плата за использование ресурсов Amazon EC2 дополнительно к затратам на Amazon Kinesis Streams.

Клиентская библиотека Amazon Kinesis (KCL) использует таблицу Amazon DynamoDB для отслеживания информации о состоянии обработки записей. При использовании библиотеки KCL для приложений Amazon Kinesis с вас будет взиматься плата за использование ресурсов Amazon DynamoDB дополнительно к затратам на Amazon Kinesis Streams.

Если вы включаете расширенные метрики сегментов, вы будете оплачивать работу сервиса Amazon CloudWatch, связанную с включением метрик сегментов, в дополнение к тарифам Amazon Kinesis Streams.

Просим учесть, что три вышеуказанных примера связанных затрат являются самыми распространенными, но не исчерпывающими.