批处理类似的hadoop spark 等这一批的数据的全部处理完才进行到下一个节点,中间处理的部分数据会被放到磁盘或内存cache
流处理如 storm flink(blink) sparkstreaming(严格意义来说不算,只是时间很小,mini-batch模拟流) 当前一个节点处理一条数据后,后一个节点接着就把数据给拉取进行处理,
而flink(blink) 可谓是集大成者,既能批处理又能流处理,流批合一,流批,流批,主要归功于flink采用了中比较灵活的方式,采用固定的缓存块来进行衡量是否进行流批,当缓存块超时值非常大时,为批处理,当缓存块超时值为0时可以为流处理,所以flink采用了折中的方式,通过用户控制缓存块的大小来进行处理,cache block,那么缓存块的大小呢?既然通过缓存块的超时值,那么缓存块的大小怎么确定呢?
flink中主要编程模型分为两中类型 datastream 和dataset分别对应与流 和批
DataSet<...> input = // [...]
DataSet<...> reduced = input
.groupBy(/*define key here*/)
.reduceGroup(/*do something*/);
DataStream<...> input = // [...]
DataStream<...> windowed = input
.keyBy(/*define key here*/) //按照hash 分组
.window(/*window specification*/);
dataset和datastream分别有不同的算子,需注意
flink 一般主要是on yarn有两种方式 一种是直接向yarn申请一块固定资源,太死板不灵活 yarn-session的方式
第二种,是提交flink job 的形式 推荐
window窗口的概念 ,因为是流计算,无边界,所以需要通过窗口来指定计算范围,主要有countWindow,TimeWindow
countWindow 事件数量计算 一个参数时为滚动窗口,窗口之间没有重叠,每隔多少个事件统计一次,两个参数为滑动窗口,即两个窗口之间有重叠,countWindow(5,1) 每隔一个事件,计算前五次事件
TimeWindow 时间窗口 滚动 滑动2个参数 同样时间窗口和事件窗口差不多 TimeWindow(5,1) 每隔一秒计算前 五秒的数据
time 概念
eventtime(watermarks) 事件时间一般指事件被生产出来的时间,eventTime经常和watermarks一起使用处理乱序数据
(ingestion)进入时间 通过kafka等进入到flink的时间
process time flink正式处理的时间,一般默认就是这个时间
接着来说这个水位线watermars ,一般和eventTime一起来处理乱序的数据 eventTime是固定的,不受flink影响,包含着一个时间戳
需要指定一下 使用eventTime
val env = StreamExecutionEnvironment.getExecutionEnvironment
//env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
// altern