[アップデート] Amazon Kinesis Data Streams のレコードサイズ上限が10倍に拡大されました
こんにちは、製造ビジネステクノロジー部の若槻です。
Amazon Kinesis Data Streams のレコードサイズ上限10倍のレコードサイズをサポートするアップデートがありました。
これにより、具体的には以下のようなアップデートが行われています。
- レコードサイズの最大値が 1MiB から 10MiB へと 10 倍に増加
- PutRecords リクエストの最大サイズが 5MiB から 10MiB へと 2 倍に増加
- AWS Lambda は Kinesis ストリームからのペイロード取得時に、最大 6MiB のデータを取得可能に
ドキュメントを見ると、Kinesis Data Streams のサービス制限にも反映されていました。
Data payload size
The maximum size of the data payload of a record before base64-encoding is up to 10 MiB. Kinesis is designed to handle intermittent large records (1-10MiB in size) using burst capacity.
試してみた
今回のアップデートを受けて、レコードサイズの上限が 10 MB に拡張されたことを実際に確認してみます。
リソース準備
検証用のストリームを AWS CDK(TypeScript)で作成して準備します。
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as kinesis from "aws-cdk-lib/aws-kinesis";
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
const myStream = new kinesis.Stream(this, "MyStream", {
streamMode: kinesis.StreamMode.ON_DEMAND,
removalPolicy: cdk.RemovalPolicy.DESTROY, // 検証簡易化のため、コンストラクト論理削除時にストリームも物理削除する
});
// ストリーム名を出力
new cdk.CfnOutput(this, "StreamName", {
value: myStream.streamName,
});
// ストリーム ARN を出力
new cdk.CfnOutput(this, "StreamArn", {
value: myStream.streamArn,
});
}
}
作成されたストリームをマネジメントコンソールから確認すると、最大レコードサイズは 1024 KiB(10 MiB)となっています。

動作確認:最大レコードサイズ引き上げ
ストリームの最大レコードサイズは aws kinesis update-max-record-size コマンドで引き上げることができます。
しかし、実行してみるとそんなサブコマンドは無いと言われました。
$ aws kinesis update-max-record-size \
--stream-arn $STREAM_ARN \
--max-record-size-in-ki-b 10240
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
下記を参考に AWS CLI を最新版にアップデートします。
再度コマンドを実行すると、今度は成功しました。
aws kinesis update-max-record-size \
--stream-arn $STREAM_ARN \
--max-record-size-in-ki-b 10240
マネジメントコンソールから最大レコードサイズを確認すると、10240 KiB(10 MiB)に引き上げられていることがわかります。

ここで、10241 KiB(10 MiB 超)に引き上げようとすると、以下のようにエラーとなりました。
$ aws kinesis update-max-record-size \
--stream-arn $STREAM_ARN \
--max-record-size-in-ki-b 10241
An error occurred (ValidationException) when calling the UpdateMaxRecordSize operation: 1 validation error detected: Value '10241' at 'maxRecordSizeInKiB' failed to satisfy constraint: Member must have value less than or equal to 10240
最大レコードサイズの上限はアップデートの発表通り 10 MiB(10240 KiB)であることが確認できました。
動作確認:レコード投入 10MiB 未満 → OK
続いて、実際にレコードをストリームに投入してみます。
まずは 10 MiB 未満のファイルです。9.9 MiB(10,380,903 バイト)のファイルを作成します。
dd if=/dev/zero of=data_9_9mib.bin bs=1 count=10380903
ストリームにレコードを投入すると成功しました。
aws kinesis put-record \
--stream-name $STREAM_NAME \
--data file://data_9_9mib.bin \
--partition-key "9.9mib-key"
{
"ShardId": "shardId-000000000000",
"SequenceNumber": "49668529889908459647092996267713915674082488464151937026",
"EncryptionType": "KMS"
}
動作確認:レコード投入 10MiB 以上 → NG(のはずがOKとなる)
そして 10 MiB 以上のファイルを Kinesis ストリームに投入すると失敗する、を期待していたのですが、なんと成功してしまいました。
dd if=/dev/zero of=data_10_1mib.bin bs=1 count=10585618
aws kinesis put-record \
--stream-name $STREAM_NAME \
--data file://data_10_1mib.bin \
--partition-key "10.1mib-key"
{
"ShardId": "shardId-000000000000",
"SequenceNumber": "49668529889908459647092996369811327917996780036946919426",
"EncryptionType": "KMS"
}
その後、10.3、10.5、20.0、50.0 MiB のファイルを試しましたが、すべて成功してしまいました。
ストリームの CloudWatch メトリクスを見ると PutRecord によるデータの投入が記録されています。


レコードサイズの設定値は 10 MiB が上限ですが、実際の投入上限はそれを大きく超えています。ドキュメントやバーストの規定(最大 10 MiB)にもかかわらず、実測では 50 MiB のレコード投入に成功しました。ストリームのプロデューサー側としては良いのですが、コンシューマー側からするとちょっと気を付けたい挙動ですね。
おわりに
Amazon Kinesis Data Streams のレコードサイズ上限10倍のレコードサイズをサポートするアップデートがあったのでご紹介しました。
ちなみに下記の AWS ビッグデータブログにも詳しい紹介がありましたので、併せてご覧ください。
以上







