大家好, 也许大家已经注意到通过FLINK-12005[1]我们提出了在State中支持基于EventTime[2]的TTL[3]语义,有关这个特性我们希望向大家发起一个讨论/调查,包括下述问题:
1. 在您的应用场景下是否需要基于EventTime的state TTL?如果需要,请简单描述场景和需求原因,这是决定我们是否开发该特性的关键。 2. 在TTL定义中有两个关键的时间,一个是数据的时间戳,另外一个是检查数据是否过期的当前时间(currentTime)。由于流式计算的特点,数据有可能“乱序”到达,而Flink为了处理这种情况引入了watermark的概念。因此对于 数据时间戳和当前时间,有下述可能的语义/定义 - 2.1 数据时间戳 1. 当前被处理数据记录(StreamRecord)的EventTime时间戳:这个选项需要关注的是乱序问题,即当新到来的record时间戳小于state当前时间戳时如何处理,有两种选择: a. 不检查/比较新记录的EventTime和state当前时间戳,直接写入并更新state b. 比较新到达record的EventTime和state当前时间戳,如果是旧数据(record.EventTime < state.timestamp)则直接丢弃,如果是新数据(record.EventTime >= state.timestamp或者state对应key没有data)则更新 2. 最近的watermark:在timer和window中我们使用watermark处理乱序问题,或者说这也是用户自定义的一种“时间戳”,不过watermark和EventTime不需要有关联性 - 2.2 当前时间 1. “墙上时间”:当前算子后端(operator backend)的系统时间 2. 最近的watermark:watermark一定程度上可以理解为用户定义的“当前时间”,这也许和“墙上时间”完全不同 在假设第一个问题大家的回答是yes的前提下,请根据自己的业务场景选择大家认为合理的时间定义(例如2.1.1.a+2.2.1),并简单描述场景和原因。 希望大家能够积极发表自己的看法,也希望该特性开发完成后对大家的线上业务有所帮助。相关问题英文邮件列表也正在讨论中[4],欢迎大家关注。谢谢! [1] https://issues.apache.org/jira/browse/FLINK-12005 [2] https://ci.apache.org/projects/flink/flink-docs-stable/dev/event_time.html [3] https://docs.google.com/document/d/1SI_WoXAfOd4_NKpGyk4yh3mf59g12pSGNXRtNFi-tgM [4] https://s.apache.org/e9bI Best Regards, Yu