2017-07-12 5 views
0

私は8つのキー(keyBy上)があり、スロットの広がりが歪んでいる場合があります。私は3の並列性を持ち、キー操作の普及率は5,2と1であり、5つのキーが1つのスロットに入っています。キー操作の分散が均衡することを保証する方法はありますか? (キーストリームでパーティション操作を行っていません)keyedストリームが(keyBy上で)歪んだダウンストリーム実行を作成するのはなぜですか?

答えて

0

keyBy()は一様分布を仮定しています。一般的に、この問題は、人工キーを実装することで解決できます。

内部的に、Flinkはあなたのキーのobj.hashCode()を呼び出し、あなたのレコードをその(そしていくつかの追加ロジックで)配布します。 KeySelectorを実装してねじ込みキーをラップし、より良いhashCode()メソッドを実装することができます。

+0

「ねじ込み」キー?キーにスキューがありません。 keyBy()の出力は8つの異なるキー付きストリームであり、8つの全く異なるキーがあり、スロットに一様に入射しなくなります。私は、パーティショニングとグループ化の両方について、obj.hashCode()でpiggy bankingしていると思います。それは避けがたい問題かもしれません。 obj(私の場合は文字列)が異なり、nがconsttant(並列処理)の場合でも、obj.hashCode()%nは等しいことができます。 – VishalSan

+0

申し訳ありません。あなたはFlinkの主要グループの概念に精通していますか?キーは、プログラムで定義した最大並列処理に従ってグループ化されます。この演算子の最大並列度が3に設定されていると、問題が解決する可能性があります。 – twalthr

+0

こちらもご覧ください:https://data-artisans.com/blog/apache-flink-at-mediamath-rescaling-stateful-applications – twalthr

関連する問題