Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Потоки
Поток Kinesis - это набор сегментов. Каждый сегмент - упорядоченный журнал записей, и каждый потребитель сам читает каждый сегмент, пока не истечёт срок хранения.
Схема текстом
- Поток orders: Сегмент 0; 1; 2; 3; 4; 5; Сегмент 1; 1; 2; 3; Сегмент 2; 1; 2; 3; 4
- Производители ключ сегмента выбирает сегмент → Поток orders: PutRecord
- Поток orders → Потребитель billing итератор на сегмент, контрольная точка на сегмент: читает каждый сегмент
- Поток orders → Потребитель audit итератор на сегмент, контрольная точка на сегмент: читает каждый сегмент
- Запись доступна каждому читателю, пока не истечёт срок хранения: по умолчанию 24 часа, до 365 дней
Производитель пишет запись вызовом PutRecord: имя потока, ключ сегмента и блок данных. Kinesis
хеширует ключ алгоритмом MD5 в 128-битное число. Каждому сегменту принадлежит диапазон таких чисел,
поэтому ключ выбирает сегмент, а записи одного ключа сохраняют порядок. Порядок соблюдается внутри
сегмента и больше нигде.
Запись содержит блок данных и ключ сегмента, и больше ничего: заголовков у неё нет. Ключ - от 1 до
256 символов Unicode, а блок данных вместе с ключом - не больше 10 МиБ. Имя потока - от 1 до 128
символов из букв, цифр, _, . и -. Этот крейт называет поток по имени.
Kinesis присваивает каждой записи порядковый номер, когда запись поступает. Внутри сегмента номера со временем растут. Крейт запоминает, в каком порядке сегмент доставил свои записи, и никогда не сравнивает сами номера.
Запись хранится в потоке, пока не истечёт срок хранения, независимо от того, прочитал её кто-нибудь или нет: по умолчанию 24 часа, до 365 дней. Каждый потребитель читает каждый сегмент собственным итератором, поэтому два потребителя видят каждую запись. То, что потребитель прочитал, - это одна позиция на сегмент, его контрольная точка. Kinesis не хранит ни контрольных точек, ни подтверждений: их хранит потребитель, в таблице аренд.
Для пользовательских заголовков в записи нет места, поэтому крейт записывает их в небольшой конверт перед полезной нагрузкой, и только когда заголовки есть. Запись, опубликованная без заголовков, - это просто полезная нагрузка, которую прочитает любой потребитель.
Эта модель взята у самого Amazon Kinesis Data Streams
(основные понятия,
PutRecord,
срок хранения).
Как сегменты разделяются и сливаются, показывает страница
Сегменты, разделение и слияние, а как потребитель читает сегмент, - страница
Чтение.