流数据处理为什么选择Flink
Flink为流处理器打开了新的世界,使得应用程序的构建过程符合自然规律,接下来我们看一下Flink具有多用途的几个特点,和它是如何保证数据的准确性的。
符合产生数据的自然规律
流处理器(Flink)的正确性体现在计算窗口的定义符合数据产生的自然规律。例如对于每个访问者来说,活动是不连续的,当访问者离开一段时间再回来后,数据产生了间隙。处理框架是如何将访问者行为分析的计算窗口和实际访问时间段吻合的呢?
首先我们拿微批处理或者固定的计算窗口来处理来看,由于微批处理方法得到的计算窗口是人为设置的,因此很难与会话窗口吻合,而Flink的流处理API,可以更灵活的定义窗口,开发人员可以设置非活动阈值,若超过这个预知,可以判断活动结束,因此这个问题迎刃而解。Flink能做到这一点的根本原因是,它可以根据真实情况来设置计算窗口。
事件时间和处理时间
事件时间既事件实际发生的事件,处理时间是事件流数据开始被程序处理的时间。
一般来说,流处理架构不常采用事件时间,但是越来越多的人在这样做,Flink能够完美的做到这一点,这在实现计算的正确性上非常有用,为了获得最佳的计算结构,系统需要能够通过数据找到事件发生的事件,而不是只采用处理时间。Flink理解事件时间的这种能力保障了正确性。与其他流处理系统相比,Flink的一个优势就是能区分不同类型的时间。
发生故障后仍保持准确
Flink采用的技术叫做检查点(checkpoint),再每个检查点,系统都会记录中间就按状态,从而在故障发生时准确地重置。这一方法使系统以低开销的方式拥有了容错能力,当一切正常时,检查点机制对系统的影响非常小,但是检查点并不是只有在发生故障之后才会重新处理数据,当在运行新模型或者修复bug时,就可能需要重播并重新处理时间流数据。
及时给出所需结果
Flink能够满足低延迟应用程序的需要,将这算做一种正确性可能出人意料。但是换个角度来看,有些求和求平均值的结果,如果没有及时取得结果,很难说它是准确的。举个例子,比如说你开车通过手机查询实时路况,选择一条畅通的路,但是程序花了很长时间才把查询结果返回,那么结果在准确也是无用的。
可见在某些情况下,极低的延迟非常重要,它决定了系统能够及时地给出所需结果,而不仅仅是完成计算。Flink的实时且容错的流处理能力可以满足这类需求。
使开发和运维更轻松
Flink与用户交互的借口也有助于保障正确性。完备的语义简化了开发工作,进而降低了出错率。此外,Flink还承担了跟踪计算状态的任务,从而减轻了开发人员的负担,简化了编程工作,并提高了应用程序的成功率,用同一种技术来实现流处理和批处理,大大简化了开发和运维工作。