想象你正在看一条永不停息的河流(这就是数据流),你需要统计和分析河里的鱼(数据)。这就是流式计算的场景。 **传统计算 vs 流式计算** - 传统计算就像钓鱼:等收集够了鱼再一起处理 - 流式计算就像在河边实时数鱼:鱼游过来就立即处理,不用等收集完 **举个具体例子:双十一实时销售数据统计** 1. 数据像流水一样不断产生:订单、支付、物流... 2. 需要实时处理:销售额、热门商品、区域统计... **窗口概念(Windows)** 想象你在河边放了一个捕鱼网: 1. **固定窗口(Tumbling)** - 每隔1小时统计一次 - 比如:9:00-10:00的订单总额,10:00-11:00的订单总额 - 特点:时间段不重叠,数据不重复计算 1. **滑动窗口(Sliding)** - 每10分钟统计过去1小时的数据 - 比如:9:00-10:00,9:10-10:10,9:20-10:20... - 特点:像放电影一样,平滑移动,数据会被重复计算 1. **会话窗口(Session)** - 基于用户行为划分时间段 - 比如:一个用户连续操作,超过30分钟无操作就算一个会话结束 - 特点:根据实际活动动态调整,更符合用户行为特征 **处理乱序和延迟** 想象河里的鱼有时会倒游(数据乱序)或迟到: 1. **水位线(Watermark)** - 就像水位标记,表示"这个时间点之前的数据应该都到了" - 比如:现在是10:05,我们认为10:00之前的订单都已经到达了 - 容忍一定延迟,但不会无限等待 1. **迟到数据处理** - 处理特别慢的鱼(迟到数据) - 可以选择: - 丢弃(不管它) - 更新之前的结果 - 单独统计 **实际应用场景** 1. 电商实时销售统计 2. 网站实时访问监控 3. 股票交易实时分析 4. IoT设备数据处理 5. 社交媒体热点监测 流式计算的核心就是: 1. 数据不停地流动 2. 必须实时处理 3. 要处理乱序和延迟 4. 要权衡实时性和准确性 理解了这些,你就基本掌握了流式计算的核心概念。它就像一个永不停息的流水线,需要我们不断地处理和分析数据。 **为什么需要流式计算?** 1. **实时性需求** - 实时推荐 - 实时风控 - 实时监控预警 - 实时数据大屏 1. **批处理的局限** - 延迟高 - 资源利用不均衡 - 不适合实时业务场景 **主流框架对比**: 1. **Apache Flink** - 原生流处理 - 真正的流式计算 - 低延迟、高吞吐 - 精确一次语义 1. **Spark Streaming** - 微批处理 - 构建在Spark之上 - 更适合准实时场景 1. **Apache Storm** - 早期流处理系统 - 实时性好 - 吞吐量相对较低 **应用场景**: 1. **互联网公司** - 用户行为分析 - 实时推荐 - 广告投放 1. **金融行业** - 实时风控 - 交易监控 - 欺诈检测 1. **物联网** - 传感器数据处理 - 实时监控 - 预测性维护 1. **游戏行业** - 玩家行为分析 - 实时匹配 - 作弊检测 总的来说,[[流式处理]]是大数据生态中的一个重要组成部分,主要解决实时数据处理的需求。它与传统的批处理相比,更注重数据的实时性和持续处理能力。在现代应用中,流式计算正变得越来越重要,因为很多业务场景都需要实时的数据洞察和决策支持。