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但是他们没有合并为任务链。