出来事20万件を32個の分割へ割り当てました。偏りがなければ最大は平均の1.28倍です。
偏りが強いと5.09倍になります。分割を増やすほど、この比は広がりました。
同じキーは同じ分割へ入ります。だから、キーの偏りは分割を増やしても消えません。
Apache Kafkaでは、書く側と読む側が分かれています。公式は生産者とは、Kafkaへ出来事を公開する(書き込む)依頼側のアプリケーションであり、消費者とは、それらの出来事を購読する(読んで処理する)ものであると定めています。
書き込まれる先は分割です。同じキーの出来事は同じ分割へ入るので、その前提で偏りを数えました。
出来事 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つの分割に入ったままだからです。分けても、そのキーは分かれません。
偏りがあると、分割を増やすほど比が広がる。
Producers are those client applications that publish (write) events to Kafka, and consumers are those that subscribe to (read and process) these events.原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18
順序が守られるのは同じ分割の中だけです。分けるほど、守られる範囲が狭くなります。
Apache Kafkaは、出来事を流す基盤です。公式はApache Kafkaは出来事を流す基盤であると定めています。
流す以上、順序が問題になります。どこまで守られるかを数えました。
出来事 100000件。同じ分割の中では順序が守られ、分割をまたぐと守られない 分割数 同じキーの並び 別のキーとの並び 順序が守られる組の割合 1個 99999組 0組 100.0% 4個 24989組 75010組 25.0% 16個 6352組 93647組 6.4%
分割1個なら100.0%です。ただし、その1個が処理の上限になります。
16個に分けると6.4%まで下がります。ほとんどの組で順序が保証されません。
守られるのは同じキーの出来事どうしです。だからキーの選び方が、順序の範囲を決めます。
2番目にすると順序の範囲は広がりますが、前の節の偏りが強くなります。大口の顧客が1つの分割に集まります。
つまり順序の範囲と、偏りの少なさは逆を向きます。どちらを取るかを決めることになります。
分割そのものの偏りは、鍵から置き場所が決まる仕組みでも同じです。その計測はDynamoDBの記事にあります。
Apache Kafka® is an event streaming platform.原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18
受け取っても残ります。だから複数の受け手が同じ出来事を、それぞれの進み方で読めます。
Apache Kafkaでは、読み取りが出来事を消しません。公式は代わりに、Kafkaがあなたの出来事をどれだけの期間保つかを、話題ごとの設定で定める。その期間を過ぎると、古い出来事は捨てられると述べています。
この性質が、受け手を増やせることにつながります。1人が読んでも減りません。
4番目が制約になります。期間を7日にしていれば、8日前の出来事は戻れません。
だから期間は、作り直したい範囲から決めます。3年ぶんを作り直したいなら、3年ぶん残すか、別に保管することになります。
期間を延ばせば、置く量がそのまま増えます。1日8MBなら、3年で8760MBです。
その量を絞り込みながら読む話はAmazon Athenaの記事で扱いました。期間で区切ってあれば、必要な範囲だけを読めます。
キーの偏りは式で作ったもので、実在の分布ではありません。「1/i^1」は、i番目に多いキーの出現がiに反比例する形として置いた偏りです。順序の計測も、同じ分割の中では必ず守られ、またぐと守られないという単純な形にしました。実際には受け取る側の並列度でも変わります。ここで見せているのは、分割を増やしても1つのキーは分けられないこと、順序の範囲と偏りの少なさが逆を向くことの2つです。
Instead, you define for how long Kafka should retain your events through a per-topic configuration setting, after which old events will be discarded.原文Apache Kafka 公式ドキュメント「Introduction」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る