在Flink SQL定义了两张kafka表(A表和B表),类型为debezium-json,然后要进行区间JOIN,SQL类似这样:
select * from A left join B on A.id = B.id and B.dt BETWEEN A.dt and A.dt + INTERVAL '30' SECOND
第一个问题是:想要在A和B表中显示定义watermark(dt字段即event_time)来解决可能出现的乱序问题,但是报错了,不太明白这个报错,是否是flink sql中目前还不支持Interval Join中定义watermark?
Interval Join doesn't support consuming update and delete changes
第二个问题是:假如没有在A和B表中显示定义watermark,Job可以成功运行,是否会自动根据区间条件生成一个watermark,用于移除过期的state?
延迟问题:比如我的B流一直延迟不来新数据,A流是不是就一直state大于watermark的数据,是否有类似于datastream中定义statettl一样可以配置。
乱序问题:测试B流来了一条比较旧的数据,但是实际也能连接到A流中理论上已经过期的数据,这个不知道是不是和什么配置有关,还是state没有及时根据watermark清理导致,望解答。*来自志愿者整理的flink
问题一: Interval Join doesn't support consuming update and delete changes是因为输入A或者B是一个更新流 问题二:interval join使用buffer来缓存A和B的数据,没有放在state里,只有在watermark超过下边界会触发onEventtime清理 buffer。 延迟问题:没有类似statettl的配置,interval join不受statettl控制清除状态 乱序问题:如果 B的数据时间小于 watermark则匹配不到,一切是跟watermmark相关
以上个人看源码理解的。希望有帮助*来自志愿者整理的flink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。