SQS API

YDB поддерживает работу с топиками по протоколу SQS.

Примечание

Работа с топиками по SQS-протоколу поддерживается только для Amazon JSON protocol.

С одним топиком работа может вестись одновременно по нескольким протоколам. Например, запись может осуществляться с использованием Topic API, а чтение — с использованием SQS API, и наоборот.

При создании топика командой CreateQueue SQS API топик создаётся с включённым автопартиционированием: с одной партицией и автоматической возможностью увеличения до 10 активных партиций. Параметры автопартиционирования можно изменить через YQL или YDB CLI.

Чтение по SQS API

Для чтения по SQS API используется разделяемый (общий) читатель, который должен быть создан на топике до начала чтения по SQS-протоколу. Если топик создаётся командой CreateQueue SQS API, автоматически создаётся разделяемый (общий) читатель с именем ydb-sqs-consumer.

Сообщения, записанные через Topic API, могут быть сжаты алгоритмами gzip, lzop или zstd. При чтении по SQS-протоколу сервер не разжимает их, а передаёт в виде base64: читатель должен выполнить base64-декодирование, а затем разжатие.

Сообщения, записанные через Topic API без сжатия, могут содержать бинарные данные. При чтении по SQS-протоколу сервер также кодирует их в base64 — читатель должен выполнить base64-декодирование.

Чтобы читатель мог определить алгоритм сжатия, вместе с каждым сообщением отдаётся атрибут BodyEncoding. Если атрибут BodyEncoding отсутствует, разжимать сообщение не требуется. Возможные значения атрибута: gzip, lzop, zstd или base64.

Пример сообщения, содержимое которого сжато:

{
    "Messages": [
        {
            "MessageId": "D523647F-5E89-560B-B1D0-152201831603",
            "ReceiptHandle": "CAAQAA==",
            "MD5OfBody": "d620a162c499920254054f78eac4feed",
            "Body": "KLUv/QBYaQAAeWRiIHdyaXRlZCAyCg==",
            "Attributes": {
                "SentTimestamp": "1780660726888",
                "BodyEncoding": "zstd"
            }
        }
    ]
}

Запись по SQS API

При записи в топик по SQS-протоколу сообщения равномерно распределяются по партициям. При этом гарантируется, что все сообщения с одинаковым MessageGroupId попадут в одну партицию.

Для записи по SQS-протоколу поддержана дедубликация сообщений по DeduplicationMessageId, а если DeduplicationMessageId не передан — по содержимому сообщения. Включить дедубликацию по содержимому можно командами CreateQueue и SetQueueAttributes, указав параметр ContentBasedDeduplication.

Дедубликация по содержимому реализована на окне в 5 минут: сообщение с повторяющимся DeduplicationMessageId может быть повторно записано через 5 минут или более.

Есть ограничение на количество сообщений, которые можно записать в партицию топика с включённой дедубликацией по содержимому, — 500 сообщений в секунду. Если требуется записывать в топик больше сообщений, следует увеличить количество партиций. Ограничение на топик вычисляется как 500 сообщений/сек/партиция × количество партиций. Например, чтобы записывать 10 тыс. сообщений в секунду, создайте топик с 20 партициями.

Разделы документации

Предыдущая
Следующая