转眼换工作已有5个月之久。从到新公司后就开始从事建设Flink实时数仓相关的设计和开发工作。排坑无数,收货满满。从这篇开始会写一些和Flink实时数仓相关的文章。
Hadoop批计算的出现解决了大数据处理的棘手问题——数据体量。随后,偏实时的Storm流计算的出现满足了人们对于大数据处理的进一步的效率需求。接着,对MR这种计算原语进一步的抽象满足易用性以及对Hadoop性能的优化成就了Spark。历史总是相似的,在实时方向自然也会迎来一波技术进步,这便是Flink。
Flink作为下一代大数据计算引擎,继承自原生流的思想起源,经过了初代原生流计算Storm的技术迭代,站在了第二代批计算Spark的肩膀上,呈现出强劲的发展势头。
目前,Flink之前所属的Ververica公司已被阿里收购。相信在中国这个"地大物博,人口众多",数据资源天然肥沃的土地上一定能发挥历史赋予它的使命。
除了流计算天然的实时属性,Flink使我印象深刻的另一个属性是其对数据表的理解:表流二象性。传统印象中数据的呈现方式是数据库中的数据表,这种组织方式我们称之为关系型数据库,适用对象是结构化数据。我们在任意时刻去查询数据表,本质上就是对这个时刻的这个有界的数据集合进行关系代数运算。而Flink将这种有界的数据表看作是无界的行级别的数据变更日志流(changelog stream),以此来吻合Flink原生流计算的本质属性。
例如,将MySQL的CDC,即binlog数据流接入Flink,通过在分布式状态后端中去维护这张MySQL中的镜像表,从而完成数据同步。
官方是这样描述这一特性的:
- 数据库表是 INSERT、UPDATE 和 DELETE DML 语句的 stream 的结果,通常称为 changelog stream 。
- 物化视图被定义为一条 SQL 查询。为了更新视图,查询不断地处理视图的基本关系的changelog 流。
- 物化视图是流式 SQL 查询的结果。