web-dev-qa-db-ja.com

kafkaトピックのパーティション数を選択する方法は?

3つのzkノードクラスターと7つのブローカーがあります。次に、トピックを作成し、このトピックのパーティションを作成する必要があります。

しかし、このトピックで作成するパーティションの量を決定するための公式は見つかりませんでした。プロデューサのレートは5kメッセージ/秒で、各メッセージのサイズは130バイトです。

前もって感謝します

7
Rajendra Jangir

必要なスループット、クラスターサイズ、ハードウェア仕様によって異なります。

これに関する明確なブログがConfluentのJun Raoによって書かれています: a Kafka cluster?

また、これは洞察を得るために役立つかもしれません: Apache Kafkaクラスタごとに200Kパーティションをサポート

2
gokhansari

明確な答えをお伝えすることはできません。答えに影響を与える可能性のあるパターンや制約はたくさんありますが、考慮に入れたいことがいくつかあります。

  • 並列処理の単位はパーティションであるため、メッセージごとの平均処理時間がわかっている場合は、追いつくために必要なパーティションの数を計算できます。たとえば、各メッセージの処理に100ミリ秒かかり、毎秒5kを受信する場合、少なくとも50のパーティションが必要になります。ピークと変動するインフラストラクチャパフォーマンスに対処するには、それよりも高いパーセンテージを追加します。キューイング理論は、並列処理のニーズを計算するための数学を提供します。

  • トラフィックのバースト性と、レイテンシの制約はありますか?最後のポイントを考慮すると、レイテンシ要件もある場合は、トラフィックのピークレートに対応するためにパーティションをスケールアウトする必要がある場合があります。

  • データの局所性パターンを使用する場合、またはメッセージの順序付けが必要な場合は、将来のトラフィックの増加を考慮する必要があります。たとえば、顧客データを処理し、顧客IDをパーティションキーとして使用し、各顧客が常に同じパーティションにルーティングされることに依存しています。おそらく、イベントソーシングのため、または単に各変更が正しい順序で適用されるようにするためです。後で新しいパーティションを追加して、より高いメッセージレートに対処する場合、各顧客はおそらく別のパーティションにルーティングされるようになります。これは、顧客が2つのパーティションに存在するため、保証されたメッセージの順序に関していくつかの問題を引き起こす可能性があります。したがって、将来の拡張に十分なパーティションを作成する必要があります。これはスケールアウトが容易で、コンシューマーでも簡単に実行できることを覚えておいてください。ただし、パーティションにはいくつかの計画が必要なので、安全面を考慮し、将来を見据えてください。

  • 何千ものパーティションがあると、全体的なレイテンシが増加する可能性があります。

2
Vanlightly

Kafka共同創設者によるこの古いベンチマークはかなりスケールの大きさを理解するのは素晴らしいです https://engineering.linkedin.com/kafka/benchmarking-Apache-kafka-2 -million-writes-second-three-cheap-machines

バンライトリーが上記で述べたように、これからの直接的な結論は、コンシューマーの処理時間がパーティション数を決定する際の最も重要な要素であるということです(プロデューサーのスループットに挑戦するのに近づいていないため)。

消費の最大同時実行性はパーティションの数なので、次のことを確認する必要があります。

((秒単位の1つのメッセージの処理時間x1秒あたりのメッセージ数)/パーティションの数)<< 1

それが1に等しい場合、書き込みよりも速く読み取ることはできません。これは、メッセージのバーストとコンシューマの失敗\ダウンタイムについて言及することなくです。したがって、1を大幅に下回る値にする必要があります。どの程度重要かは、システムが耐えられる待ち時間によって異なります。

2
H. Opler