Hi! 我观察到 flink 双流 join ttl 处理的一些现象,望解答: kafka 中存有 students,courses 两个 topic 作为输入流,表结构如下: students s:id,name courses c:stu_id,name,score 两条流通过 s.id = c.stu_id 关联,ttl 设置的过期时间为 2min
测试sql: SELECT s.id, s.name, c.course, c.score FROM student AS s LEFT JOIN courses AS c ON s.id = c.stu_id 测试现象: ttl 时效内(2min) 内如果新输入的右流数据能关联上原有的左流数据,则左流关联数据 ttl 时间刷新 现象推论: 内关联:内关联数据过期只与数据在 state 的创建时间和 ttl 时效有关 左外关联(学生流为左流):右流数据过期只与数据在 state 的创建时间和 ttl 时效有关,左流除了上述两个因素外还与右流数据有关 总结:内连接和外连接 inner 的过期策略类似OnCreateAndWrite,而外连接的 outer 过期策略则类似OnReadAndWrite 源码验证: 核心代码位置:StreamingJoinOperator#processElement,外关联中如果 input 不为outer 且能关联上 outer 的信息,则更新 outer 信息的上次访问时间 疑问: 不知道我表述的是否清楚,这个 ttl 问题是一个 bug 呢,还是就是这么设计的,如果是设计的话,是怎么考虑的呢?谢谢 flink 版本:1.13.1