|连载:阿里巴巴大数据实践—实时技术


数据价值是具有时效性的 , 在一条数据产生的时候 , 如果不能及时处理并在业务系统中使用 , 就不能让数据保持最高的“新鲜度”和价值最大化 。
相对于离线批处理技术 , 流式实时处理技术作为一个非常重要的技术补充 , 在阿里巴巴集团内被广泛使用 。
在大数据业界中 , 流计算技术的研究是近年来非常热门的课题 。
业务诉求是希望能在第一时间拿到经过加工后的数据 , 以便实时监控当前业务状态并做出运营决策 , 引导业务往好的方向发展 。 比如网站上一个访问量很高的广告位 , 需要实时监控广告位的引流效果 , 如果转化率非常低的话 , 运营人员就需要及时更换为其他广告 , 以避免流量资源的浪费 。 在这个例子中 , 就需要实时统计广告位的曝光和点击等指标作为运营决策的参考 。
按照数据的延迟情况 , 数据时效性一般分为三种(离线、准实时、实时):

  • 离线:在今天(T)处理N天前(T-N , N≥1)的数据 , 延迟时间粒度为天 。
  • 准实时:在当前小时(H)处理N小时前(H-N , N>0 , 如0.5小时、1小时等)的数据 , 延迟时间粒度为小时 。
  • 实时:在当前时刻处理当前的数据 , 延迟时间粒度为秒;
离线和准实时都可以在批处理系统中实现(比如Hadoop、MaxCompute、Spark等系统) , 只是调度周期不一样而已 , 而实时数据则需要在流式处理系统中完成 。 简单来说 , 流式数据处理技术是指业务系统每产生一条数据 , 就会立刻被采集并实时发送到流式任务中进行处理 , 不需要定时调度任务来处理数据 。
整体来看 , 流式数据处理一般具有以下特征 。
1.时效性高
数据实时采集、实时处理 , 延时粒度在秒级甚至毫秒级 , 业务方能够在第一时间拿到经过加工处理后的数据 。
2.常驻任务
区别于离线任务的周期调度 , 流式任务属于常驻进程任务 , 一旦启动后就会一直运行 , 直到人为地终止 , 因此计算成本会相对比较高 。 这一特点也预示着流式任务的数据源是无界的 , 而离线任务的数据源是有界的 。 这也是实时处理和离线处理最主要的差别 , 这个特性会导致实时任务在数据处理上有一定的局限性 。
3.性能要求高
实时计算对数据处理的性能要求非常严格 , 如果处理吞吐量跟不上采集吞吐量 , 计算出来的数据就失去了实时的特性 。 比如实时任务1分钟只能处理30秒采集的数据 , 那么产出的数据的延时会越来越长 , 不能代表当前时刻的业务状态 , 有可能导致业务方做出错误的运营决策 。 在互联网行业中 , 需要处理的数据是海量的 , 如何在数据量快速膨胀的情况下也能保持高吞吐量和低延时 , 是当前面临的重要挑战 。 因此 , 实时处理的性能优化占了任务开发的很大一部分工作 。
4.应用局限性
实时数据处理不能替代离线处理 , 除了计算成本较大这个因素外 , 对于业务逻辑复杂的场景(比如双流关联或者需要数据回滚的情况) , 其局限性导致支持不足 。 另外 , 由于数据源是流式的 , 在数据具有上下文关系的情况下 , 数据到达时间的不确定性导致实时处理跟离线处理得出来的结果会有一定的差异 。
来源: 数智化 转型俱乐部
流式技术架构
在流式计算技术中 , 需要各个子系统之间相互依赖形成一条数据处理链路 , 才能产出结果最终对外提供实时数据服务 。 在实际技术选型时 , 可选的开源技术方案非常多 , 但是各个方案的整体架构是类似的 , 只是各个子系统的实现原理不太一样 。 另外 , 流式技术架构中的系统跟离线处理是有交叉的 , 两套技术方案并不是完全独立的 , 并且在业界中有合并的趋势 。
各个子系统按功能划分的话 , 主要分为以下几部分:
1.数据采集
数据的源头 , 一般来自于各个业务的日志服务器(例如网站的浏览行为日志、订单的修改日志等) , 这些数据被实时采集到数据中间件中 , 供下游实时订阅使用 。


推荐阅读