Lambda架构通俗理解——离线 & 实时数据的一致性,kafka不丢数据的实现
采用Lambda架构的目的是保证实时和离线数据的一致性。
通俗简单理解就是:kafka中的实时数据分两个条线
(1)实时条线,通过Storm、SparkStreaming、Flink等大数据实时处理框架,将kafka中的数据进行实时处理,然后将计算逻辑封装成jar包。
(2)离线条线,通过Hive等,当天结束后,对上面封装成的jar包跑一遍,将离线数据分析结果导入数据应用层,覆盖掉当天之前的实时数据。
这样做的好处是:保证了实时和离线数据的一致性,并且防止kafka中丢数据。
上图是标准的Lambda架构的原理图,第一层Batch Layer(批处理层)做离线处理,第三层Speed Layer(实时处理层)做实时处理,中间层Serving Layer(服务层)做数据的获取。
相当于把同一个数据源的数据即做了实时处理,又做了离线数据,在服务层依据需求获取实时/离线数据。
只是现在一般在当天结束后,对全天的实时数据(此时已经变成离线数据了)进行离线处理,然后覆盖掉当天得出的实时处理结果,这也是目前Lambda架构的企业常用的一种情况。