第一次接触到flink这个东西,平时也经常的听到朋友们在说fink实时计算框架,但是我也没有仔细的去接触过了解过着这个东西,最近因为公司需要,所以对这个框架稍微的了解了下,来总结下我所遇到的问题;
问题列表:
1.为什么需要用到flink框架?
2.我能用传统的计算方式处理的问题,为什么要用flink去解决?(类似问题1)
3.flink有什么好处,它与传统的计算有什么区别,体现在哪里?
...............
以上是使用它之前所想到的问题;
4.什么场景下用实时处理,什么场景下用批处理?
5.实时计算下,需要长期增量计算的数据,万一在内存中过大怎么办?
6.开窗的意义在哪里,为什么需要开窗
7.窗口基于处理时间和基于时间事件有什么区别;
8.窗口的驱除器有什么意义?
9.如果当天的计算错误了,我该怎么去修复?如果可以修复,那么内存中的状态我可以在外部操作?还是说利用发送消息去修正?
10.如果服务挂了,我利用checkpoint机制恢复,那么我该怎么处理保存checkpoint?
11.如果遇到flink相关的问题时,我该怎么去寻求帮助?
12.窗口内的触发器是每次触发就计算,那么后面的sink是否也是跟随触发器一起执行?
13.窗口时间的判断问题
14.侧输出流的场景
.............
以上是使用过程中遇到的问题
其实在深入了解的过程中你会遇到很多很多的问题,然后去了解这些问题的解决方案,慢慢的就对这个新东西熟悉;下面我来解答下我所遇到的这些问题吧:
1.为什么需要用到flink框架?
答:通俗的说当你需要实时计算且对数据一致性和事件发生顺序要求比较高时,并且你的数据量比较大的时候你就需要使用flink;
2.问题2跟问题1类似,简单说下
因为传统的计算方式你需要自己去保证数据一致性,以及数据先后性,还有当数据量到达一个级别时,程序可能崩溃等等问题;
3.flink有什么好处,它与传统的计算有什么区别,体现在哪里?
答:
3.1.Flink灵活的窗口(利用窗口机制将无限的流变成有限的流)
3.2.Exactly once语义保证(为有状态的计算准备,跟数据源的能力有 关)
3.3.checkpoint机制,(就是故障恢复机制)
4.flink流处理和批处理的使用场景
答:流处理场景:1.需要实时的计算出结果,例如电商重的数据看板,实时的统计处订单数,消费金额,消费次数等
批处理场景:1.对时间要求性不高,允许一天出结果,一个月甚至一年出结果,例如,报表,
5.实时计算下,需要长期增量计算的数据,万一在内存中过大怎么办?
答:目前我想到的唯一方案是,利用窗口机制将内存中的数据流保持在一个可以接受的范围内,定时的持久化到数据库,然后清空窗口内的数据;
6.开窗的意义在哪里,为什么需要开窗
答:这个问题同问题5吧,开窗可以有效的控制数据量,同时也能将无限的数据流变成有限的数据流,便于计算和处理,这里我想到的还有一点是也便于后面对数据做修正是的处理,因为我们可以基于窗口维度做中状态的数据保存;
7.窗口基于处理时间和基于事件时间有什么区别;
答:这个问题是每个新手都会遇到的问题:
处理时件:指消息到的flink的时间;
事件时间:是指数据内的时间;这里涉及到水印的了解,原理其实就是通过给数据机上水印时间,而这个水印时间就是这个数据内的时间;
8.窗口的驱除器有什么意义?
答:这个问题只有用到触发器的程序才需要考虑;
刚开始我也不是很明白驱除器的作用,直到后面遇到问题了才发现,他的存在意义是在于防止重复的计算,因为在窗口内的数据是全量的,如果你不使用驱除器的话,每次计算会将原来的数据也计算进来,这就会导致重复的计算,所以如果用了触发器,你就可能需要使用驱除器来防止重复计算;
9.如果当天的计算错误了,我该怎么去修复?如果可以修复,那么内存中的状态我可以在外部操作?还是说利用发送消息去修正
答:这个问题思考了好久,发现外面应该没有什么办法可以去修改内存中的数据状态,所以只能绕过它,因此我们的方案是利用checkpoint机制以及中间数据的状态来来是程序从最近正确的一个点开始重新计算;
10.如果服务挂了,我利用checkpoint机制恢复,那么我该怎么处理保存checkpoint?
答:这个问题跟问题9是类似的,但是这里的重点是如何保存checkpoint,我们不能简单的保存在集群本地;有方案说是利用hdfs或者rocksdb,目前我们还没做这块的东西,后面又遇到来再补充吧;
11.如果遇到flink相关的问题时,我该怎么去寻求帮助?
答:这个问题只能看自己的关系以及搜索工具去寻求帮助来;
12.窗口内的触发器是每次触发就计算,那么后面的sink是否也是跟随触发器一起执行?
答:经过验证sink是跟随触发器一起的,只要触发来计算,后面的sink也会执行;
13.窗口时间的判断问题
答:这里有个坑,当你使用事件时间的时候,窗口时间是基于你第一条数据的时间来开窗的,而不是基于你本地的时间,所以在测试的时候,你会发现当第一条数据是昨天的时间时,后面只要时间是昨天的都会放到同一个窗口;
14.侧输出流的场景
答:在我的场景中,我是利用侧输出流来处理不属于窗口时间内的数据,来cover修复数据时的场景;
携带着这些问题来慢慢的了解flink,后面有新的问题再进行补充.......欢迎交流!!!!
网友评论