0
私は8つのキー(keyBy上)があり、スロットの広がりが歪んでいる場合があります。私は3の並列性を持ち、キー操作の普及率は5,2と1であり、5つのキーが1つのスロットに入っています。キー操作の分散が均衡することを保証する方法はありますか? (キーストリームでパーティション操作を行っていません)keyedストリームが(keyBy上で)歪んだダウンストリーム実行を作成するのはなぜですか?
私は8つのキー(keyBy上)があり、スロットの広がりが歪んでいる場合があります。私は3の並列性を持ち、キー操作の普及率は5,2と1であり、5つのキーが1つのスロットに入っています。キー操作の分散が均衡することを保証する方法はありますか? (キーストリームでパーティション操作を行っていません)keyedストリームが(keyBy上で)歪んだダウンストリーム実行を作成するのはなぜですか?
keyBy()
は一様分布を仮定しています。一般的に、この問題は、人工キーを実装することで解決できます。
内部的に、Flinkはあなたのキーのobj.hashCode()
を呼び出し、あなたのレコードをその(そしていくつかの追加ロジックで)配布します。 KeySelector
を実装してねじ込みキーをラップし、より良いhashCode()
メソッドを実装することができます。
「ねじ込み」キー?キーにスキューがありません。 keyBy()の出力は8つの異なるキー付きストリームであり、8つの全く異なるキーがあり、スロットに一様に入射しなくなります。私は、パーティショニングとグループ化の両方について、obj.hashCode()でpiggy bankingしていると思います。それは避けがたい問題かもしれません。 obj(私の場合は文字列)が異なり、nがconsttant(並列処理)の場合でも、obj.hashCode()%nは等しいことができます。 – VishalSan
申し訳ありません。あなたはFlinkの主要グループの概念に精通していますか?キーは、プログラムで定義した最大並列処理に従ってグループ化されます。この演算子の最大並列度が3に設定されていると、問題が解決する可能性があります。 – twalthr
こちらもご覧ください:https://data-artisans.com/blog/apache-flink-at-mediamath-rescaling-stateful-applications – twalthr