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

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

Файл потока

Файл потока .ss - это один журнал на диске для всех ключей потока: заголовок, сообщения в кадрах, маяк на каждом интервале и необязательная метка конца потока.

Файл потока на диске по областям и одно его сообщение, разобранное на поляorders.ssОдно сообщениеЗаголовок, 128 байтинтервал маяковСообщениеorders, номер 1Сообщениеreceipts, номер 1Сообщениеorders, номер 2Маякна каждом интервалеorders 2,продолжениеМетка конца потокаесли заданаКлюч потокадлина и имяШард, номер,время в мсРазмер нагрузкиПолезная нагрузкаКонтрольная сумма0x0DВсе ключи потока делят файл, у каждого нумерацияс единицы, все на шарде 0
Схема текстом
  1. orders.ss: Заголовок, 128 байт интервал маяков; Сообщение orders, номер 1; Сообщение receipts, номер 1; Сообщение orders, номер 2; Маяк на каждом интервале; orders 2, продолжение; Метка конца потока если задана
  2. Одно сообщение: Ключ потока длина и имя; Шард, номер, время в мс; Размер нагрузки; Полезная нагрузка; Контрольная сумма; 0x0D
  3. Сообщение orders, номер 1 → Одно сообщение
  4. Все ключи потока делят файл, у каждого нумерация с единицы, все на шарде 0

Файл открывается заголовком длиной 128 байт. В нём хранятся байты Ss, версия формата, имя файла, время создания и интервал маяков.

Дальше идут сообщения в порядке записи, независимо от ключа потока. Каждое несёт свой ключ, шард, порядковый номер и метку времени в миллисекундах, затем полезную нагрузку и контрольную сумму. Числа записаны в порядке big-endian, а каждый кадр закрывает байт 0x0D, поэтому файл с текстовой полезной нагрузкой можно читать в редакторе.

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

Маяк стоит на каждом кратном интервала маяков, по умолчанию 1 МиБ. Он записывает для каждого ключа потока заголовок последнего сообщения и накопленную контрольную сумму, поэтому служит индексом внутри файла. Читатель, попавший в середину файла, выравнивается по следующему маяку, а перемотка сужает поиск по маякам. Сообщение, которое пересекает интервал, разделяется, и маяк стоит между двумя его частями.

end_with_eos при завершении работы пишет сообщение конца потока под внутренним ключом клиента с полезной нагрузкой EOS. Живая подписка на нём заканчивается, и воспроизведение на нём завершается.

Файл, в котором пока ничего нет, при подключении брокера получает одно сообщение под ключом ruststream-internal. Клиент не может открыть живой консьюмер на файле без содержимого, а этот ключ не читает ни одна подписка.

Ключ потока - это от 1 до 249 символов: латинские буквы и цифры ASCII, ., _ и -. Клиент перестаёт писать в файл на 16 ГиБ: публикация, которая достигает предела, возвращает ошибку, и каждая следующая публикация в этот файл тоже.

Формат принадлежит sea-streamer-file (формат файла, клиент). Как клиент читает файл, показывает страница Чтение, а как пишет - страница Запись.