出来事20万件を32個の分割へ割り当てました。偏りがなければ最大は平均の1.28倍です。
偏りが強いと5.09倍になります。分割を増やすほど、この比は広がりました。
増減はできます。ただし、同じキーは同じ分割へ行くので、キーの偏りは分割では消えません。
Amazon Kinesisでは、流れの規模を変えられます。公式は伸び縮みできるため、流れを大きくも小さくもでき、記録が期限切れになる前に失われることがないと述べています。
大きくすれば均されるのか。実際に振り分けて数えました。
出来事 200000件。キーは2000種。キーの偏りを変えて、分割ごとの件数を見る 分割はキーを混ぜてから割り当てる。同じキーは必ず同じ分割へ入る 偏り 分割数 最も多い分割 平均 最大が平均の何倍か なし 4個 53399件 50000件 1.07倍 なし 32個 8015件 6250件 1.28倍 1/i^1 4個 64253件 50000件 1.29倍 1/i^1 8個 41939件 25000件 1.68倍 1/i^1 16個 35686件 12500件 2.85倍 1/i^1 32個 31811件 6250件 5.09倍
偏りがなければ、32個に分けても最大は平均の1.28倍です。ほぼ均等になります。
偏りが強い場合は5.09倍で、分割を増やすほど比が広がります。
最も多い分割の件数を見てください。4個で64253件、32個でも31811件です。半分にしかなりません。
平均は5万件から6250件へ8分の1になります。分母だけが下がるので、比が広がります。
止まる理由は単純で、いちばん多いキーが1つの分割に入ったままだからです。増やしても、そのキーは分かれません。
偏りがあると、分割を増やすほど比が広がる。
The elasticity of Kinesis Data Streams enables you to scale the stream up or down, so that you never lose data records before they expire.原文AWS ドキュメント「What is Amazon Kinesis Data Streams?」 この内容の有効期限2027-02-18
届くのは速くても、順序は同じ分割の中だけです。分けるほど守られる範囲が狭くなります。
Amazon Kinesisでは、置いてから読めるまでが短いとされています。公式は記録が流れに置かれてから取り出せるようになるまでの遅れは、通常1秒未満であると述べています。
速く届いても、順序が守られるかは別です。どこまで守られるかを数えました。
出来事 100000件。同じ分割の中では順序が守られ、分割をまたぐと守られない 分割数 同じキーの並び 別のキーとの並び 順序が守られる組の割合 1個 99999組 0組 100.0% 4個 24989組 75010組 25.0% 16個 6352組 93647組 6.4%
分割1個なら100.0%です。ただし、その1個が処理の上限になります。
16個に分けると6.4%まで下がります。ほとんどの組で順序が保証されません。
守られるのは同じキーの出来事どうしです。キーの選び方が、順序の範囲を決めます。
2番目を選ぶと、前の節の偏りが強くなります。順序の範囲と、偏りの少なさは逆を向きます。
同じ関係は、出来事を並べて残す別の仕組みでも出ます。その計測はApache Kafkaの記事にあります。
The delay between the time a record is put into the stream and the time it can be retrieved (put-to-get delay) is typically less than 1 second.原文AWS ドキュメント「What is Amazon Kinesis Data Streams?」 この内容の有効期限2027-02-18
複数の処理が同じ流れを、それぞれの進み方で読めます。用途ごとに分けられます。
Amazon Kinesisでは、読み取りが出来事を消しません。公式は複数の処理が1つの流れからデータを読み取れるので、保管と加工のような複数の動作を、同時にかつ互いに独立して行えると述べています。
「互いに独立して」が要点です。片方が遅れても、もう片方は進めます。
3番目が効きます。新しい処理を試しても、既存の処理が止まりません。
4番目には期限があります。期限を過ぎた出来事は読めないので、読み直したい範囲から期限を決めることになります。
独立している以上、受け手ごとに進みが違います。まとめて見ていると、遅れている1つに気づけません。
見るのは、受け手ごと・分割ごとの読み残しです。前の節の偏りがあると、特定の分割だけが遅れます。
5.09倍の偏りがある分割は、他の5倍の量を処理することになります。そこだけが追いつかないという形が起きます。
キーの偏りは式で作ったもので、実在の分布ではありません。「1/i^1」は、i番目に多いキーの出現がiに反比例する形として置いた偏りです。順序の計測も、同じ分割の中では必ず守られ、またぐと守られないという単純な形にしました。実際には受け取る側の並列度でも変わります。ここで見せているのは、分割を増やしても1つのキーは分けられないこと、順序の範囲と偏りの少なさが逆を向くことの2つです。
Multiple Kinesis Data Streams applications can consume data from a stream, so that multiple actions, like archiving and processing, can take place concurrently and independently.原文AWS ドキュメント「What is Amazon Kinesis Data Streams?」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る