説明カフカカフカパーティションとトピックの関係にFLINKスロットはデータ、パーティションの割り当てを読み取るFLINK

今日はそこのグループスロットの小さなパートナーであり、関係(トピックカフカデフォルトでは、以下のトピック)カフカトピックパーティションを尋ね、答えはここに統合のビットは、おそらくです

:まず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(开发技术)相关的推文

おすすめ

転載: www.cnblogs.com/Springmoon-venn/p/12023350.html