今日はそこのグループスロットの小さなパートナーであり、関係(トピックカフカデフォルトでは、以下のトピック)カフカトピックパーティションを尋ね、答えはここに統合のビットは、おそらくです
:まずFLINKタスクマネージャのスロット番号とパーティションのトピックの数は、直接に関連していない、そしてこの質問は実際に求めているが、ことは明らかでなければならない 並行タスクの数とスロット数の関係
スロットの同時=数の最大数
二つの理由がある:各オペレータが同じスロットに平行でないことができ、異なるオペレータは、並列の最大度がスロットの数に等しいように、スロットを共有することができます。
これは、スロット番号とパーティションのトピックの数との間の間接的な関係を持っています:並列子の度合いは、我々は我々のソース(およびそれに続く他の演算子)を設定でき、パーティションカフカオペレータの数に応じて、並列演算子の決定スロットデータの最大程度ながら、の(逆TMスロット番号の数から計算)
公式サイトを見ます:
説明:
図第3タスクマネージャー、各スロット3、9スロットの合計
第チャート:実施例1、WORDCOUNTの場合、複雑な、チェーンオペレータ一緒に、唯一のスロット
3番目の図:Examlple 2、語数場合、2つの同時、2スロットを占めています。3つの設定並列処理することにより:
FLINK-conf.yamlパラメータ並列処理。デフォルト:2 FLINK -p#2プラス開始- Pパラメータを指定 env.setParallelism( 2)
第四図:例3 9スロットを占め、語数場合、9つの同時、
第五个图:Example 3,wordcount 案例,source 9 个并发,sink 1 个并发,占 9 个slot(sink 和其中一个 source chain 在一起了)
看一个具体的任务:
我们要读的 topic 有 2 个 partition,我们设置 source 算子的并行度为 2,那我们最小就需要 4 个 slot,Task Manager 配置的 slot 数为2, 那最少就需要 2 个 TM 任务才能正常运行(不考虑其他算子)。
关键代码:
env.setParallelism(2) env.addSource(source).addSink(sink)
提交到yarn 上
上面说明了算子的并发度与TM 的 slot 数的关系。
下面看下,kafka 分区数与 source 算子的并行度关系。
在不修改 kafka consumer 的分区分配策略的情况下,soure 的并行度与 topic 分区数在不同情况下,会有不同的表现,如下:
1、source 并行度 = topic 分区数,正好的情况,一个 并行度,读一个分区的数据
2、source 并行读 < topic 分区数, 会出现部分 并行度读多个 分区的情况,具体可见:flink 读取kafka 数据,partition分配
3、source 并行度 > topic 分区数,会出现部分并行度没有数据的情况
总结下问题:slot 数和 topic 的分区数并没有直接关系,以kafka 做 source 的情况最多,而 kafka topic 的分区数一般又是 Flink source 的并行度,又是 Flink 任务的最大并发度,一般情况下又是 slot 的数量,所以会有一种 slot 数 和 topic 分区数 有直接关系的假象。
注:Task Manager 的 slot 数在 flink-conf.yaml 中配置 参数:
# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 2 # 默认值为1
官网 slot 配置说明:https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html#configuring-taskmanager-processing-slots (slot 数量推荐是在只有一个任务的情况下,具体配置要看实际情况)
欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文