Flink中一共有三种时间类型,分别为事件时间(Event Time)、摄取时间(Ingestion Time)、处理时间(Processing Time)。
根据不同的场景和要求,我们应该选择最合适的时间类型,以在实时性和准确性中实现一个平衡
根据Flink官网给出的图我们可以清晰的了解到这三种时间的发生顺序依次是事件时间,摄取时间,处理时间,以下表格是我整理的不同时间的定义,特点,以及应用场景。
分类 | 定义 | 特点 | 应用场景 | 例子 |
事件时间(Event Time) | 事件在数据源端实际发生的时间 | 1. 反映事件的真实发生顺序 2. 需要用户指定时间戳提取方式 3. 可能需要Watermark处理乱序和延迟数据 | 1. 金融交易记录分析 2. 日志处理,确保按日志生成时间排序 3. 实时数据分析,要求严格的时间顺序 | 股票交易记录,每条记录包含交易发生的时间戳,Flink按此时间戳排序处理 |
摄取时间(Ingestion Time/Ingress Time) | 事件进入Flink处理程序的时间 | 1. 介于事件时间和处理时间之间 2. Flink自动为每条数据添加摄取时间戳 3. 无需用户显式指定时间戳提取方式 | 1. 数据乱序和延迟情况较少 2. 对时间顺序有一定要求,但不需严格精确 3. 实时性要求较高,但可接受一定程度的近似结果 | 实时日志收集系统,每条日志在到达Flink Source时自动打上摄取时间戳,按此时间戳进行窗口聚合 |
处理时间(Processing Time) | 事件在Flink处理程序中被实际处理的时间 | 1. 依赖于系统当前的处理速度和负载 2. 不需要关心数据本身的时间戳 3. 处理结果可能因系统状态变化而不确定 | 1. 实时监控和报警 2. 对实时性要求极高,但对准确性要求不高的场景 3. 无需考虑数据时间顺序的场景 | 实时监控系统,如网络流量监控,按处理时间进行实时统计和报警,不关心具体的数据时间戳 |