学习资料:
21讲吃透实时流计算 - 拉勾教育

为什么要学习实时流计算

服务场景:当请求非常多、数据量非常大,并且对请求时延要求非常严格时,比如,必须在毫秒甚至微秒级返回,那么问题就变得复杂了。如:

  • 实时检测异常的反欺诈或风控系统;
  • 实时展示业务报表的大屏系统;
  • 实时计算用户兴趣偏好的推荐系统;
  • 实时统计过车流量的智能交通系统。

如果按照传统对数据库增删改查的方法,是无法应对大数据情况下的计算的。因此可用实时流计算方式来解决。

接触实时流计算会遇到的问题

  • 缺乏对实时流计算技术以及它的适用场景的整体认识
  • 如何用“流”来实现各种业务逻辑的异步和高并发计算
  • 如何针对“流”这种独特的数据模式,设计实时算法
  • 对各种流计算框架的认识只停留在 API 调用层面,而没有理解其背后的设计原理,也就是“流”这种计算模式的,核心概念和关键技术点;
  • 缺少对一些已有案例的借鉴和思考。

如何解决实时流计算问题

针对以上问题,可以从系统架构实时算法两个方面来突破。

系统架构

“流计算”本质上是一种“异步”编程方法。业务数据像“流水”一样,通过“管道”,也就是“队列”,持续不断地流到各个环节的子系统中,然后由各个环节的子系统独立处理。所以,为了更快地处理“流”,可以通过增加管道的数量,来提高流计算系统的并行处理能力。

目前,开源的流计算框架虽然有许多(比如 Storm、Spark Streaming、Samza 和 Flink),但其实这些主流框架背后,都有着一套类似的设计思路和架构模式。它们都涉及流数据状态、流信息状态、反向压力、消息可靠性等概念。

实时算法

系统架构提供了整体的计算框架,但要实现具体的业务功能,还需要针对“流数据”设计合适的算法。 毕竟,与传统“块数据”相比,“流数据”需要连续不断并且实时地进行处理。

对于实时流计算中的算法,最最核心的问题,在于解决“大数据量”和“实时计算”之间的矛盾。数据量一大,几乎所有事情都会变得复杂和缓慢。“大数据量”的问题,集中在四个方面:时间窗口很长、业务请求量很大、内存受限、数据跨网络访问。为了实现“实时计算”的效果,需要你针对算法做非常精心的设计。

学习思路

实时流计算 - 图1