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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink程序运用的算子有很多种,以下是几个常用的算子示例: 1. Map算子:对输入流中的每个元素应用一个函数,并返回一个新的元素。可以用来进行数据的转换和处理。 ```java DataStream<Integer> input = ...; DataStream<Integer> result = input.map(new MapFunction<Integer, Integer>() { @Override public Integer map(Integer value) throws Exception { return value * 2; } }); ``` 2. Filter算子:根据指定的条件过滤输入流中的元素,只保留满足条件的元素。 ```java DataStream<Integer> input = ...; DataStream<Integer> result = input.filter(new FilterFunction<Integer>() { @Override public boolean filter(Integer value) throws Exception { return value % 2 == 0; } }); ``` 3. KeyBy算子:根据指定的键对输入流进行分组,将具有相同键的元素分到同一个分区中。 ```java DataStream<Tuple2<String, Integer>> input = ...; KeyedStream<Tuple2<String, Integer>, String> keyedStream = input.keyBy(0); ``` 4. Reduce算子:对输入流中具有相同键的元素进行归约操作,返回一个新的元素。 ```java KeyedStream<Tuple2<String, Integer>, String> input = ...; DataStream<Tuple2<String, Integer>> result = input.reduce(new ReduceFunction<Tuple2<String, Integer>>() { @Override public Tuple2<String, Integer> reduce(Tuple2<String, Integer> value1, Tuple2<String, Integer> value2) throws Exception { return new Tuple2<>(value1.f0, value1.f1 + value2.f1); } }); ``` 5. Window算子:将输入流划分为不重叠的窗口,并对每个窗口中的元素进行计算。 ```java DataStream<Tuple2<String, Integer>> input = ...; DataStream<Tuple2<String, Integer>> result = input .keyBy(0) .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) .sum(1); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值