flink-china / flink-forward-asia-hackathon-2021

本 GitHub 项目是 Flink Forward Asia Hackathon (2021) 的投票专用项目。
121 stars 19 forks source link

[参赛项目] 基于Apache Flink的轻量级批流融合通用TableSource #6

Open shouweikun opened 2 years ago

shouweikun commented 2 years ago

项目简述

随着数据技术的不断演进,"流批一体"这一概念正不断从原型设计向着落地进发。Apache Flink自开始起就将"流批一体"作为顶层成员进行考虑。而Source作为数据的入口,是我们实现流批一致性的第一个重要部件。 本项目提出一种轻量级的Source批流融合算法,并基于Flink进行实现。 此外,设计一套全新的Connector,可以在尽可能复用已有的Sql Connector组件下,以非常小的实现代价,组合任意两种Source,进行数据融合,生成RowKind语义完备,不重不漏的数据流。最后,我们将尝试进行多Source表数据一致性相关的探索,试图完成一套完整的机制和对应的实现。

项目Repo

数据整合算法介绍

一致性算法相关论文

背景

相信大家对Table和Stream的统一性多少都一定的了解。Table的Changelog天然就是Stream,而Changelog在时间上的"积分"得到了Table。回到我们实际生产中的数据系统中,对于一张表,往往历史数据部分会被放在一套存储系统上,而较新的数据会以Changelog的形式存储在对应的消息系统(Kafka/Pulsar)中。传统的处理思路往往利用批处理进行全量数据与增量数据的整合。此外,对于该表来说,批处理和流处理的计算逻辑往往有着很大不同。对于流处理,我们往往要将Changelog语义相关的逻辑进行显性的处理,但是即便如此,流处理也不能完全胜任批处理的所能完成的全部逻辑或功能。我们需要这样一套Source系统,可以全量 + 增量的数据以流的形式完美整合。这样不论从计算逻辑上,还是数据本身,都能实现流批统一。从而在数据计算层梁助力相当多的业务场景,譬如数据湖,实时物化视图等

目标

使用方法

-- 创建表
create table source_table(
          col1 int,
          col2 int,
          col3 string,
          primary key(col1) not enforced
         ) with (
          'connector' = 'unified',
          '_changelog.connector' = 'your_connector_type',
          '_changelog.format' = 'certain-format',
          '_changelog.props1' = 'value1',
          '_changelog.props2' = 'value2',
          '_bulk.connector' = 'your_connector_type',
          '_bulk.format' = 'certain-format',
          '_bulk.props1' = 'value1',
          '_bulk.props2' = 'value2'
         );

-- 像编写批处理SQL一样编写流式SQL逻辑

select count(distinct col1) from source_table;

实施方案

成员介绍

刘首维 (天池ID:首维君1)code for fun~

张茄子 (天池ID:chasezh)

程兴源 (天池ID:windwheel)

ChenShuai1981 commented 2 years ago

看了下code这个只能支持最多一个bulk和一个realtime吗?跟flink 1.14新出的Hybrid source是不是类似的功能?Hybrid source是支持多个bulk和多个realtime的,不过目前官方只支持stream api方式,后续是否考虑升级你们这个项目以支持Hybrid source sql方式?

shouweikun commented 2 years ago

@ChenShuai1981 其实不太一样,我们这个完全不去考虑bulk source和realtime source 本身的特性,只要依赖我们设计整合算法完成数据正确性的保证,具备通用性。此外我们做了很多工作在一致性提交上