Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Потоки

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

Производители пишут записи в три сегмента одного потока, а каждый из двух потребителей читает каждый сегментПоток ordersПроизводителиключ сегмента выбирает сегментСегмент 012345Сегмент 1123Сегмент 21234Потребитель billingитератор на сегмент,контрольная точка на сегментПотребитель auditитератор на сегмент,контрольная точка на сегментЗапись доступна каждому читателю, пока не истечёт срок хранения:по умолчанию 24 часа, до 365 дней
Схема текстом
  1. Поток orders: Сегмент 0; 1; 2; 3; 4; 5; Сегмент 1; 1; 2; 3; Сегмент 2; 1; 2; 3; 4
  2. Производители ключ сегмента выбирает сегмент → Поток orders: PutRecord
  3. Поток orders → Потребитель billing итератор на сегмент, контрольная точка на сегмент: читает каждый сегмент
  4. Поток orders → Потребитель audit итератор на сегмент, контрольная точка на сегмент: читает каждый сегмент
  5. Запись доступна каждому читателю, пока не истечёт срок хранения: по умолчанию 24 часа, до 365 дней

Производитель пишет запись вызовом PutRecord: имя потока, ключ сегмента и блок данных. Kinesis хеширует ключ алгоритмом MD5 в 128-битное число. Каждому сегменту принадлежит диапазон таких чисел, поэтому ключ выбирает сегмент, а записи одного ключа сохраняют порядок. Порядок соблюдается внутри сегмента и больше нигде.

Запись содержит блок данных и ключ сегмента, и больше ничего: заголовков у неё нет. Ключ - от 1 до 256 символов Unicode, а блок данных вместе с ключом - не больше 10 МиБ. Имя потока - от 1 до 128 символов из букв, цифр, _, . и -. Этот крейт называет поток по имени.

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

Запись хранится в потоке, пока не истечёт срок хранения, независимо от того, прочитал её кто-нибудь или нет: по умолчанию 24 часа, до 365 дней. Каждый потребитель читает каждый сегмент собственным итератором, поэтому два потребителя видят каждую запись. То, что потребитель прочитал, - это одна позиция на сегмент, его контрольная точка. Kinesis не хранит ни контрольных точек, ни подтверждений: их хранит потребитель, в таблице аренд.

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

Эта модель взята у самого Amazon Kinesis Data Streams (основные понятия, PutRecord, срок хранения). Как сегменты разделяются и сливаются, показывает страница Сегменты, разделение и слияние, а как потребитель читает сегмент, - страница Чтение.