「读书」数据密集型应用 Day 21

141 阅读3分钟

流处理

流处理的应用

  • 欺诈检测系统
  • 交易系统检查市场价格变化
  • 制造系统监控
  • 军事和情报系统

复合事件处理

复合事件处理(complex, event processing, CEP)是20世纪90年代为分析事件流⽽开发出的⼀种⽅法,尤其适⽤于需要搜索某些事件模式的应⽤【65,66】。与正则表达式允许你在字符串中搜索特定字符模式的⽅式类似,CEP允许你指定规则以在流中搜索某些事件模式。

流分析

测量某种类型事件的速率(每个时间间隔内发⽣的频率)滚动计算⼀段时间窗⼝内某个值的平均值将当前的统计值与先前的时间区间的值对⽐(例如,检测趋势,当指标与上周同⽐异常偏⾼或偏低时报警)

维护物化视图

在流上搜索

传统的搜索引擎⾸先索引⽂件,然后在索引上跑查询。相⽐之下,搜索⼀个数据流则反了过来:查询被存储下来,⽂档从查询中流过,就像在CEP中⼀样。在简单的情况就是,你可以为每个⽂档测试每个查询。但是如果你有⼤量查询,这可能会变慢。为了优化这个过程,可以像对⽂档⼀样,为查询建⽴索引。

消息传递和 RPC

也就是说,RPC类系统与流处理之间有⼀些交叉领域。例如,Apache Storm有⼀个称为分布式RPC的功能,它允许将⽤户查询分散到⼀系列也处理事件流的节点上;然后这些查询与来⾃输⼊流的事件交织,⽽结果可以被汇总并发回给⽤户

时间推理

事件时间与处理时间

知道什么时候准备好了

在某些情况下,可以使⽤特殊的消息来指示“从现在开始,不会有⽐t更早时间戳的消息了”,消费者可以使⽤它来触发窗⼝

你用的谁的时钟

窗口类型

  • 滚动窗口
  • 跳动窗口
  • 滑动窗口
  • 会话窗口

流式连接

  • 流流连接
  • 流表连接
  • 表表连接

连接的时间依赖性

容错

批处理框架可以很容易地容错:如果MapReduce作业中的任务失败,可以简单地在另⼀台机器上再次启动,并且丢弃失败任务的输出。这种透明的重试是可能的,因为输⼊⽂件是不可变的,每个任务都将其输出写⼊到HDFS上的独⽴⽂件中,⽽输出仅当任务成功完成后可⻅。

微批量与存档点

原子提交再现

为了在出现故障时表现出恰好处理⼀次的样⼦,我们需要确保事件处理的所有输出和副作⽤当且仅当处理成功时才会⽣效。这些影响包括发送给下游算⼦或外部消息传递系统(包括电⼦邮件或推送通知)的任何消息,任何数据库写⼊,对算⼦状态的任何变更,以及对输⼊消息的任何确认(包括在基于⽇志的消息代理中将消费者偏移量前移)。

幂等性

幂等操作是多次重复执⾏与单次执⾏效果相同的操作

失败后重建状态

⼀种选择是将状态保存在远程数据存储中,并进⾏复制,然⽽正如在“流表连接”中所述,每个消息都要查询远程数据库可能会很慢。另⼀种⽅法是在流处理器本地保存状态,并定期复制。然后当流处理器从故障中恢复时,新任务可以读取状态副本,恢复处理⽽不丢失数据。