了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站
在追求数据时效性的今天,如何高效处理低延时的流数据,逐渐成为大家越来越关注的问题。 流数据处理能力已经成为衡量大数据平台计算实力的一个重要指标。Greenplum作为最先进的开源大数据平台,天生具备处理复杂问题的优势。Pivotal的研发团队在开源Greenplum的基础上,提供了新的高速流数据引擎gpKafka,从而将Greenplum强大的SQL处理能力引入到流计算领域。本文重点介绍目前主要的流计算模式,以及gpKafka如何将Greenplum打造成近实时的流计算引擎。
今天,有越来越多的人在讨论流计算和流数据,如同十年前讨论的大数据一样。对大数据的含义,直到今天,不同人对它仍然有不同的理解。有人认为大数据就是Hadoop,有人说大数据是机器学习和AI,有人说大数据是数据在云上等等。这些有差异的理解不利于我们对问题本身的研究和交流。所以,在我们开始讨论流数据和流计算之前,要先对其具体含义做一个相对精确的描述和解释,从而形成一个共识。所以我们依次解释这三个基本概念:流数据,流计算引擎及流计算模式。
什么是流数据
对它下定义的话,非常简单,没有边界的数据。比如车辆的位置信息,设备的运行状态报告,网站的用户点击信息等。尽管它的定义很简单,流数据有几个比较重要的特点。第一个是流数据从产生到处理,存在延迟。因此流数据有两个时间属性:事件时间和处理时间。而处理时间的延迟,并没有严格要求,可能很大,可能很小,可能时大时小变化很大;而这是流数据区别于实时数据的重要方面。流数据不是实时数据,实时数据不考虑事件时间和处理时间的差别。尽管随着硬件性能的提升,很多原生的流处理引擎已经可以支持部分软实时的应用场景,但流数据和实时数据本身并没有什么必然联系,二者之间有交集,但属于不同的应用范畴。流数据第二个特点,它本身是可以做到强一致性的。认为流数据是不可靠的是一种偏见,或者只是为技术上难以实现强一致性找到借口。但根据具体使用场景的不同,应用可以根据实际需求,来决定自己需要达到的一致性目标,比如强一致,最终一致,或者最多一次,最少一次等等。
什么是流计算引擎
定义完流数据,再理解流数据引擎就比较容易。**流数据引擎是专门处理无边界数据的计算引擎。**它也有两个特点,首先是流计算引擎必须可以满足强一致性要求。如果某个流计算引擎在设计上没有将强一致性作为考虑的目标,那它必定无法保证结果的准确性,那也就不是一个真正的流计算引擎。第二个特点是流计算引擎需要支持所有的或者大部分流计算模式。流计算模式主要有三个不同的属性。我们下面来依次介绍。
首先是时间属性, 一共分三类,事件时间,处理时间及时间无关。那为什么要把将事件时间和处理时间分开呢?原因是通常事件时间和处理时间之间的延时,是不固定的,且变化可能很大。举个例子来说有一个设备在记录我们的位置信息,并将记