私はAWS Kinesis
について読んでいました。次のプログラムでは、TestStream
という名前のストリームにデータを書き込みます。このコードを10回実行し、10個のレコードをストリームに挿入しました。
var params = {
Data: 'More Sample data into the test stream ...',
PartitionKey: 'TestKey_1',
StreamName: 'TestStream'
};
kinesis.putRecord(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
すべてのレコードが正常に挿入されました。ここでpartition key
とはどういう意味ですか?バックグラウンドで何をしていますか? ドキュメント を読みましたが、その意味がわかりませんでした。
パーティションキーは、ストリームに複数のシャードがある場合にのみ重要です(ただし、常に必要です)。 KinesisはパーティションキーのMD5ハッシュを計算して、どのシャードにレコードを保存するかを決定します(ストリームを記述する場合、シャードの説明の一部としてハッシュ範囲が表示されます)。
なぜこれが重要なのでしょうか?
各断片は、1,000レコードおよび/または1秒あたり1 MBのみを受け入れます( PutRecord docを参照)。このレートよりも速い速度で単一のシャードに書き込むと、ProvisionedThroughputExceededException
が得られます。
複数のシャードを使用する場合、この制限をスケーリングします。4つのシャードは、4,000レコードおよび/または4 MB /秒を提供します。もちろん、注意点があります。
最大のものは、異なるパーティションキーを使用する必要があることです。すべてのレコードが同じパーティションキーを使用する場合、それらはすべて同じハッシュ値を持つため、単一のシャードに書き込みを行っています。これを解決する方法はアプリケーションによって異なります。複数のプロセスから作成している場合は、プロセスID、サーバーのIPアドレス、またはホスト名を使用すれば十分です。単一のプロセスから記述している場合は、レコードに含まれる情報(一意のレコードIDなど)を使用するか、ランダムな文字列を生成できます。
2番目の注意点は、パーティションキーが合計書き込みサイズに対してカウントされ、ストリームに格納されることです。したがって、レコード内のテキストコンポーネントを使用することで、おそらく適切なランダム性を得ることができますが、スペースを浪費することになります。一方、ランダムなテキストコンポーネントがある場合、それから独自のハッシュを計算し、パーティションキーのハッシュを文字列化できます。
最後に、 PutRecords を使用している場合(大量のデータを書き込む場合)、リクエスト内の個々のレコードは拒否され、他のレコードは受け入れられます。これは、これらのレコードがすでに書き込み制限にあるシャードに移動したために発生し、(遅延後に)再送信する必要があります。
受け入れられた回答は、パーティションキーとは何か、およびそれらがKinesisで何に使用されるのかを説明します(どのシャードにデータを送信するかを決定するため)。残念ながら、そもそもパーティションキーが必要な理由は説明されていません。
理論的には、AWSは各レコードに対してランダムなパーティションキーを作成し、ほぼ完璧な広がりをもたらします。
パーティションが使用される本当の理由は、「順序付け/ストリーミング」のためです。 Kinesisは、各シャードの順序(シーケンス番号)を維持します。
つまり、Xをストリーミングし、その後YをシャードZにストリーミングすることにより、XがYの前にストリームからプルされることが保証されます(すべてのシャードからレコードをプルする場合)。一方、Xを共有Z1にストリーミングし、その後YをシャードZ2にストリーミングすることにより、順序付けは保証されません(すべてのシャードからレコードをプルする場合)。 YはXの前に確実にプルされます。
シャードの「ストリーミング」機能は、多くの場合に役立ちます。
(たとえば、ユーザー名と映画名をパーティションキーとして使用して映画をユーザーにストリーミングする動画サービス)。
(たとえば、ユーザーのグループからのイベントのストリームで作業し、集計を適用します)。
順序付け(ストリーミング)が不要な場合は、ランダムパーティションキーを生成するだけで十分です。