Flink实时计算框架

1. 先savepoint 之后过一段时间再cancel job是否会丢失数据

这个不一定的,要看你的source是什么,比如你的source是kafka就不会丢失,他可以重复提取数据,但如果数据源是串口比如端口之类的,就会丢失

2. 是否真的能extaclty once(数据恰好处理一次)这个要取决于从哪个角度来说

比如光看过程,数据如果丢失肯定要多读几次,但是光看结果肯定是ex once

水印的出现就是为了应对数据延迟,数据乱序,来进行延迟计算

3.watermask 没有水印的数据不会触发计算(这种情况是在间接性也就是条件的赋予水印的情况下)

4. 水印确实会触发计算,而且是延迟触发,但是真正要计算的 肯定是你的eventTime为依据,而不是你的水印时间。也就是 现在窗口是10000-20000,水印延迟是2000,此时一个eventTIme为21000,虽然他的水印19000在窗口内,后面来了一个22000水印为20000触发计算,但是肯定不会计算这个21000

5.AllowedLateness 可以做到准确 + 实时

AllowedLateness的3s + wartermask的2s延迟 与单纯的 waterMask的5s是不一样的

因为waterMask的5s是将一个窗口的数据全部延迟5s后才开始计算,缺乏很大的实时性

而allowedLateness只有2s延迟,那三秒是只要你来上个窗口数据我就会再次运算,实时性很强

缺点: 数据冗余会变大,导致flink吞吐量受影响

优化:如果用了AllowedLateness,他那规定的3s还是有频繁的数据导致窗口重新计算,那还不如直接增大waterMask(但是延迟高)

6. waterMark并行度一般会设置为1

如果并行度很高,而数据类别很少,那么一般只会有一个并行度来处理数据,这个并行度的waterMask水位线会随着数据提升,但是 由于其它并行度没有数据,他们的waterMask水位线一直是0,而waterMask的原理是 想要触发计算 我只能由你水位线最低的那个并行度来作为基准。那么就是一直会导致为0,数据永远不触发计算

你可能感兴趣的:(flink,大数据)