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

Apache flink Flink何时使用uid将流拆分为作业、重新平衡,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我对flink还很陌生,即将加载我们的第一个生产版本。我们有一个数据流。有状态筛选器正在检查数据是否为新数据 如选项1或选项2所示,将流拆分为不同的作业以获得对并行性的更多控制是否更好? 在这之后。我是否应该为每个操作员输入uid,例如: 是否应该在每个uid之后添加 如果按照所述设置MaxParallelism,或者从flink UI/cli设置并行度,有什么区别 您只需要为有状态运算符定义.uid(“someName”)。不太需要不保存状态的运算符,因为保存点中没有需要映射回它们的内容(

我对flink还很陌生,即将加载我们的第一个生产版本。我们有一个数据流。有状态筛选器正在检查数据是否为新数据

  • 如选项1或选项2所示,将流拆分为不同的作业以获得对并行性的更多控制是否更好?

  • 在这之后。我是否应该为每个操作员输入
    uid
    ,例如:
  • 是否应该在每个
    uid
    之后添加
  • 如果按照所述设置MaxParallelism,或者从flink UI/cli设置并行度,有什么区别

  • 您只需要为有状态运算符定义
    .uid(“someName”)
    。不太需要不保存状态的运算符,因为保存点中没有需要映射回它们的内容(更多信息)。如果你这么做了也不会受伤。
    重新平衡
    只会在存在数据倾斜的情况下对您有所帮助,并且只有在您不使用键控流的情况下才会有所帮助。如果您基于一个键处理数据,并且您的负载在您的键之间分布不均匀(即您有大量“热”键),那么重新平衡对您没有多大帮助

    在你上面的例子中,我会从选项2开始,如果工作太重,可能会转到选项1。一般来说,Flink中的无状态进程速度非常快,因此除非您想将其他使用者添加到有状态筛选器的输出中,否则在此阶段不要费心将其拆分。 虽然没有对错,但这取决于你的问题。从简单开始,从那里开始


    [Update]Re 4,
    setMaxParallelism
    如果我没有弄错,则定义了密钥组的数量,从而定义了流可以重新缩放到的最大并行实例数。这是Flink内部使用的,但它不会设置作业的并行性。通常,您必须将其设置为您为作业设置的实际并行度的倍数(在部署作业时通过CLI/UI中的
    -p

    谢谢,这很有意义。但是,根据您的回答,最好从选项1开始,因为我可能希望在无状态运算符上使用更高的并行性,对吗?顺便说一句,请注意我添加了另一个关于
    uid
    的问题,你的意思是我只需要
    .uid(“mappedId”)
    由于flatMapFunction保持状态?根据经验,有状态运算符的吞吐量通常要低得多。在有状态运算符之后增加并行度不太可能有任何效果,因为即使使用相同的并行度,无状态运算符也会更快。Re
    uid
    ,更多信息。您需要d
    .flatMap(flatMap函数)
    之后的一个(如果
    flatMap函数
    是有状态的)。其他的都很好
    dataStream
    .uid("firstid")
    .keyBy(0)
    .flatMap(flatMapFunction)
    .uid("mappedId)