flink何时将流拆分为作业,使用uid,重新平衡

vuktfyat  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(388)

我对flink还很陌生,即将加载我们的第一个产品版本。我们有一个数据流。有状态筛选器正在检查数据是否是新的。
如果将流拆分为不同的作业,以获得对并行性的更多控制,会更好吗?如选项1所示,还是选项2更好?

遵循文件建议。我应该把 uid 每个操作员,例如:

dataStream
.uid("firstid")
.keyBy(0)
.flatMap(flatMapFunction)
.uid("mappedId)

我是否应该在每个 uid 如果有的话?
如果按此处所述设置MaxParallelism或从flink ui/cli设置parallelism,有什么区别?

wwwo4jvm

wwwo4jvm1#

你只需要定义 .uid("someName") 给你的有状态操作员。不需要太多不保持状态的操作符,因为保存点中没有需要Map回它们的内容(这里有更多介绍)。如果你这么做也不会受伤。 rebalance 只有在存在数据倾斜的情况下才有帮助,而且只有在不使用键控流的情况下才有帮助。如果您基于一个键处理数据,并且您的负载没有均匀地分布在您的键上(即您有大量的“热”键),那么重新平衡将不会对您有多大帮助。
在你上面的例子中,我会从选项2开始,如果工作太重,可能会转到选项1。一般来说,flink中的无状态进程非常快,因此除非您想将其他使用者添加到有状态过滤器的输出中,否则在这个阶段就不必费心将其拆分。不过,没有对错之分,这取决于你的问题。从简单开始,从那里开始。
[更新]re 4, setMaxParallelism 如果我没有弄错的话,我定义了密钥组的数量,从而定义了流可以重缩放到的最大并行示例数。flink在内部使用它,但它不会设置作业的并行性。通常必须将其设置为为为作业设置的实际并行度的倍数(通过 -p <n> 在cli/ui中(当您部署它时)。

相关问题