感谢sllence大佬的耐心解答,还想继续请教一下:
1、假如是设置了持久化的状态后端,不知道是以什么样的格式来存储state的?是每个流单独一个state(原始数据),还是join后的结果进行state?
2、cdc 默认采用了regular 
join,全量数据都在内存中,所以数据量大的业务会对集群造成较大负担。在实际生产环境中,假如这种类型的任务非常多,集群资源是不是很快就会被耗尽了?不知道 
是否可以认为是cdc的一个问题?
3、我的实际生产中有etl的join需求,这些etl涉及多张表的写入,但是无法确认在join的流中的延迟和乱序时间,所以是不是除了regular 
join就没有更好的选择了?


感谢!


















在 2021-04-12 15:07:05,"sllence" <slle...@aliyun.com> 写道:

1、regular join(就是普通的join),无窗口的限制,会关联全部的历史数据
2、状态存在状态后端(state 
backend),内存是一种默认的状态后端,可以选择filesystem或rockdb之类的状态后端进行大状态以及持久化的状态存储。regular 
join默认会存储全量的状态进行join,可以设置ttl过期掉不用的状态,但可能会照成已过期的状态关联不上导致结果异常
3、cdc目前应该还不支持事件时间以及水印的定义,也就是还不支持窗口join,可以参考issue 
https://issues.apache.org/jira/browse/FLINK-20281
4、每种join的语法不一样,用哪种join就看sql怎么定义,但cdc目前只支持regular join
5、假如用了持久化的状态后端可以在job重新启动时指定路径进行恢复


在2021年04月12日 14:38,董建<62...@163.com> 写道:
最近看了 云邪 大佬关于flink cdc sql的视频,并且动手操作了 例子
https://github.com/ververica/flink-cdc-connectors/wiki/%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B
感受到了flink sql 在实时流计算的便捷性以及强大,但同时也有一些疑问。如下:
flink  connector cdc 直接对接订单表,物流表,商品表表的binlog
1、通过flink进行3流join的时候,这个join是对应flink底层api的哪种join,是否受窗口大小以及时间现在?
2、假如是全量join , 这些数据是全部保存在内存中吗?如果业务表的数据很大或者每天的增量很大,flink使用这种方式,内存是否有瓶颈?
3、如果是具有窗口属性的join,假如流1join流2,如果流2延迟了,是否有可能导致join数据不正确(流2的数据由于延迟被丢下了)
4、flink sql join的时候对应的哪种join是否可以指定?
5、假如job失败了重启,这些join后的数据有state吗?
感谢!

回复