Flink精简笔记

env=StreamExecutionEnvironment.getExecutionEnvironment()

lineDSS=env.socketTextStream("hadoop102",9999)

env.fromCollection(java集合)

env.readTextFile("hdfs://...")

env.addSource(new FlinkKafkaConsumer<>("",new SimpleStringSchema(),prop)) prop=new Properties,prop.setProperty()

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Session:

bin/yarn-session.sh -d

bin/flink run -c 代码全类名 ./flink-prepare-1.0-SNAPSHOT.jar

Application: -t type -c class

bin/flink run-application -t yarn-application -c 代码全类名 ./flink-prepare-1.0-SNAPSHOT.jar

以后凡是用到斜体方法就要注意是不是泛型方法 不要忘记加泛型!!!!!!!!!!!

以后凡是用到匿名类,都要有大括号 才会保留泛型!!!!!!!!!

-----------------------------------------算子-------------------------------------------------------------------------------

Environment->Source->Transform->Sink

所有flink函数都有其Rich版本,可以获取运行环境的上下文,并拥有一些生命周期方法 ,open/close每个

并行度只会被调用一次、open中可调用getRuntimeContext()方法,它提供了函数的RuntimeContext函数执行的并行度,任务的名字,以及state状态.

map

flatMap

filter

keyBy:DateStream->KeyedStream

shuffle

connect: DS[A],DS[B]->ConnectedStreams[A,B] ,只能两个,数据类型可以不同

union: 两个或以上混合,数据类型要一样

滚动聚合算子:sum,min,max,minBy,maxBy KeyedStream->SingleOutputStreamOperator

reduce: KeyedStream->SingleOutputStreamOperator 返回每一次聚合结果,出入元素类型必须一致

process: key前用每个并行度有一个,并行度内数据一视同仁;key后每个key有一个

ProcessFunction

KeyedProcessFunction : keyby后使用

CoProcessFunction :connect后

ProcessJoinFunction :join后

BroadcastProcessFunction :广播变量后

KeyedBroadcastProcessFunction

ProcessWindowFunction :添加窗口后

ProcessAllWindowFunction

对流重新分区的算子:

keyBy:按key将数据分发

shuffle:元素随机分区

rebalance:将数据平均分布到每个区

rescale:不走网络比rebalance更高效

-----------------------------------------Sink--------------------------------------------------------------------------------

lineDSS.addSink(new FlinkKafkaProducer<String>("hadoop102:9092","topic_sensor",new SimpleStringSchema()))

.addSink(new RedisSink<>(redisConf,new RedisMapper<>(){...})) redisConf=new FlinkJedisPoolConfig.Builder().setHost().setPort().setMaxTotal().setTimeout().build()

(自定义) .addSink(new RichSinkFunction<>{

private PreparedStatement ps;

private Connection conn;

open(){conn,ps}

close(){conn,ps}

invoke(){ps.setxxx(),ps.execute}

})

-----------------------------------------Window--------------------------------------------------------------------------------

开窗一定要有watermark !

基于时间:

Tumbling ( time )

Sliding ( time,time )

Session ( gap ) 每到一个新元素创建一个新会话,超过gap无交互就自动关闭

基于数量:

countWindow(num) countWindow(num,num)

增量聚合函数:ReduceFunction(value1,value2),AggregateFunction(累加器)

全量聚合函数:ProcessWindowFunction 可以得到一个包含窗口内所有元素的迭代器,以及窗口的元数据信息;

reduce+proces 或 aggregate+process时,其中的迭代器就是上面聚合的结果,所有只有一个值,增量聚合可以通过这样同样获取到窗口元数据信息

windowAll 所有窗口逻辑都在一个单独的task上执行,并行度必须是1,

-----------------------------------------WaterMark--------------------------------------------------------------------------------

WatermarkStrategy.<>forMonotonousTimestamps();

WatermarkStrategy.<>forBoundedOutOfOrderness(Duration.ofSeconds(3))

.withTimestampAssigner(

事件时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值