Flink如何让task不共享插槽,算子拒绝合并Operator Chains

package com.lw.wc

import java.util.Properties

import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011
import org.apache.kafka.clients.consumer.ConsumerConfig


object KafkaWc {
  def main(args: Array[String]): Unit = {
    //1.创建env
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val props = new Properties()
    props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop102:9092")
    props.setProperty("group.id", "consumer-group")
    props.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"latest")
    val consumer = new FlinkKafkaConsumer011[String]("test2",new SimpleStringSchema(),props)
    //指定插槽组为1
    //默认的插槽组都为default。
    //相同的插槽组有可能共享插槽。
    val kafkaStraem: DataStream[String] = env.addSource(consumer).slotSharingGroup("1")
    kafkaStraem.flatMap(_.split(" ")).map((_,1)).keyBy(0).sum(1).print()
    env.execute("kafkatest")

  }
}
dataStream.slotSharingGroup("1")

所有算子后面都可以执行该方法,如果将所有算子的共享组都设置为不一样,那么所有任务都不会共享

注意:算子的并行度会有多个任务,这多个任务不会在同一插槽上执行

不合并Operator Chains

如果设置了,则表示该算子不参与任务链的合并。

    kafkaStraem.flatMap(_.split(" ")).disableChaining()

 全局禁用operator chains

//1.创建
env val env: StreamExecutionEnvironment =StreamExecutionEnvironment.getExecutionEnvironment;
 env.disableOperatorChaining()

开始一个新的任务链,断开前面的

   kafkaStraem.flatMap(_.split(" ")).startNewChain()

修改后结果:

可以看到一共有5个task,每个task的并行度是1但是他们没有合并为任务链。

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页