流处理中的事件调度与时间管理
在流处理中,事件调度和时间管理是确保业务逻辑正确执行的关键因素。下面将详细介绍事件调度、不同的时间概念以及如何处理乱序和延迟到达的事件。
1. 事件调度
事件调度是许多流处理框架的特性,但基本的消费者实现中通常没有。如果事件的消费和处理顺序对业务逻辑很重要,那么微服务就需要事件调度。
一些流处理框架允许实现自定义事件调度器。例如,Apache Samza 允许实现一个 MessageChooser 类,根据多个因素(如某些事件流的优先级、时钟时间、事件时间、事件元数据甚至事件本身的内容)选择要处理的事件。不过,实现自定义事件调度器时要小心,因为许多自定义调度器本质上是非确定性的,如果需要重新处理,可能无法产生可重复的结果。
2. 基于不同时间的处理
在基于时间的事件处理中,需要选择使用哪个时间点作为事件的时间戳。有本地分配的事件时间和代理摄入时间可供选择。在生产 - 消费工作流中,这两个时间戳各只出现一次,而时钟时间和消费者摄入时间会根据应用程序的执行时间而变化。
在大多数情况下,当所有消费者和生产者都正常工作且没有事件积压时,这四个时间点相差几秒。但对于处理历史事件的微服务,事件时间和消费者摄入时间会有显著差异。
为了最准确地描述现实世界中的事件,如果可以依赖本地分配的事件时间的准确性,最好使用它。如果生产者的时间戳不可靠且无法修复,那么可以根据事件摄入到事件代理的时间来设置时间戳。只有在事件代理和生产者无法通信的极少数情况下,真实事件时间和代理分配的时间之间才可能存在显著延迟。
消费者在决定如何对记录进行处理排序之
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



