Обход ограничения размера Amazon Kinesis 1 МБ - PullRequest
0 голосов
/ 07 декабря 2018

Как указано в документации AWS

Максимальный размер полезных данных записи до кодирования base64 составляет до 1 МБ.

Поскольку мне необходимо обрабатывать записи, размер которых может быть больше 1 МБ, это ограничение может быть проблемой.

Есть ли обходной путь для преодоления этого ограничения?А в случае, если какое-либо проверенное решение уже реализовано и используется кем-либо?(Я бы хотел избежать "изобретать велосипед")

1 Ответ

0 голосов
/ 07 декабря 2018

У вас есть два варианта: разбить полезную нагрузку на несколько записей или сохранить ее вне потока, например, в S3.

Для первого варианта вы можете использовать PartitionKey и SequenceNumberForOrdering ( документ ).Присвойте уникальный ключ раздела (например, UUID) каждой исходной записи.Если вам нужно разбить источник на чанки размером менее 1 МБ, установите порядковый номер для чанков 2..N равным возвращаемому порядковому номеру предыдущего чанка.

Это потребует от клиентов проверки разделаключ для извлеченных записей и при необходимости восстановить исходную запись.Обратите внимание, что им может потребоваться буферизовать несколько фрагментов (для разных исходных записей).

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

Этот второй подход требует большего управления: вам нужно добавить правило жизненного цикла в S3, чтобы удалить записи, и выВам нужно будет убедиться, что это правило жизненного цикла позволяет объектам жить как минимум в течение срока хранения потока (я бы, вероятно, установил бы 8-дневный TTL независимо от периода хранения потока, потому что S3 дешев).

Если у вас есть только нечасто большие записи, особенно если у вас много маленьких записей, тогда запись всего в S3 будет неэффективной.В этом случае вы можете принять гибридную модель, в которой вы записываете в поток структуру данных, которая содержит либо фактические данные, либо ссылку на внешнее хранилище.

...