开发者社区> 问答> 正文

关于Flink SQL中Interval Join使用时watermark的疑惑

在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

展开
收起
雪哥哥 2021-12-05 12:06:06 3539 0
1 条回答
写回答
取消 提交回答
  • 问题一: 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

    2021-12-05 17:30:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载