1

4 種類のカフカ トピックと、各種類の 65 のトピックがあります。目標は、データに対していくつかの単純なウィンドウ集約を行い、それを DB に書き込むことです。

トポロジは次のようになります。

kafka -> window -> reduce -> db write

このミックスのどこかで、ユニオンをしたい/する必要があります-または、おそらくいくつか(毎回組み合わせるトピックの数によって異なります)。

トピック内のデータ フローは、1 分間に 10,000 ~ >200,000 メッセージの範囲です。

ノードあたり 30 コアの 4 ノード フリンク クラスターがあります。これらのトポロジを構築して負荷を分散するにはどうすればよいですか?

4

1 に答える 1

3

同じタイプの 65 のトピックのそれぞれに同じタイプのデータが含まれていると仮定して、この回答を書いています。

この問題の最も簡単な解決策は、それぞれ 65 のパーティションを持つ 4 つのトピックを持つように Kafka セットアップを変更することです。次に、プログラムに 4 つのデータ ソースがあり、並列度が高く (65)、これがクラスター全体に自然に分散されます。

設定を変更できない場合は、次の 2 つの方法があります。

  • 考えられる解決策の 1 つは、(1 つのトピックの複数のパーティションだけではなく) 1 つのソースが複数のトピックを消費できる FlinkKafkaConsumer の修正バージョンを作成することです。この変更により、多くのトピックではなく、多くのパーティションを使用しているかのように機能します。このソリューションを使用したい場合は、メーリング リストに ping を送信して、これを行うためのサポートを得ることができます。とにかく、これは Flink コードへの貴重な追加になるでしょう。

  • 各ソースに個別のリソース グループを与えることができます。これにより、専用のスロットが与えられます。これは、「env.addSource(new FlinkKafkaConsumer(...)).startNewResourceGroup();」で実行できます。ただし、ここでは、120 個のコア (したがって、おそらく 120 個のタスク スロット) を持つクラスターで 260 個の異なるソースを実行しようとしていることがわかります。すべてのタスクを保持するには、スロットの数を増やす必要があります。

最初のオプションが望ましいオプションだと思います。

于 2015-12-02T15:05:04.417 に答える