博客
关于我
Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
阅读量:461 次
发布时间:2019-03-06

本文共 1515 字,大约阅读时间需要 5 分钟。

流处理与流框架比较

流处理的定义

流处理是一种设计考虑了无限数据集的数据处理引擎。与批处理不同,流处理是指在连续不断地处理天、月、年甚至永久到来的无边界数据。流处理应用程序始终需要保持运行,这使得其设计和维护具有一定难度。

流处理的关键特征

  • 交付保证

    流引擎需要保证每条记录至少处理一次(at least once),最多处理一次(at most once),或在失败时恰好处理一次(exactly once)。

  • 容错

    在节点或网络故障发生时,框架应能够自动恢复并从断点开始重新处理。

  • 状态管理

    在有状态处理需求的情况下,框架应提供状态保存和更新的机制。例如,记录每个不重复单词的计数。

  • 性能

    包括延迟(处理一条记录所需时间)、吞吐量(每秒处理的记录数)以及可伸缩性。延迟应尽可能小,吞吐量应尽可能大。

  • 高级功能

    包括事件时间处理、水印、窗口化等功能,适用于复杂流处理需求。

  • 成熟度

    成熟的框架通常获得大公司的验证和广泛测试,社区支持也较强。

  • 流处理的两种类型

  • 原生流处理

    每条到达的记录立即处理,无需等待其他记录。适合简单的流媒体用例,如Storm、Flink、Kafka Streams、Samza等框架。

  • 微批处理

    每隔几秒将记录分批处理,延迟较大,但容错性强,吞吐量高。如Spark Streaming、Storm-Trident等框架。

  • 两种方法的优缺点对比

    • 原生流处理

      优点:延迟小,吞吐量高,状态管理自然。
      缺点:缺乏高级功能,容错实现复杂。

    • 微批处理

      优点:容错性强,吞吐量大。
      缺点:延迟较大,状态管理较为复杂。

    流框架对比

    Storm

    • 特点

      • 最古老的开源流框架之一。
      • 适合简单的流媒体用例。
    • 优点

      • 极低延迟,成熟可靠,吞吐量高。
    • 缺点

      • 缺少状态管理和高级功能。

    Spark Streaming

    • 特点

      • Spark的流处理功能,支持微批处理。
      • 2.0版本后成为结构化流框架,支持自定义内存管理、事件时间处理等高级功能。
    • 优点

      • 免费提供,社区支持强大,吞吐量高,容错能力强。
    • 缺点

      • 原生流处理延迟较大,高级功能尚待完善。
    • 特点

      • 真正的原生流处理框架,支持所有高级功能。
    • 优点

      • 低延迟,高吞吐量,可配置性强,社区支持日益强大。
    • 缺点

      • 起步较晚,成熟度稍逊于Spark。

    Kafka Streams

    • 特点

      • Kafka生态的轻量级流处理库,适合微服务架构。
    • 优点

      • 恰好一次处理,轻量化,易于集成。
    • 缺点

      • 依赖Kafka,适用范围有限。

    Samza

    • 特点

      • Kafka Streams的扩展版本,支持Yarn集群运行。
    • 优点

      • 灵活性高,吞吐量大,容错能力强。
    • 缺点

      • 依赖Kafka和Yarn,高级功能尚未完善。

    如何选择最佳的流框架

  • 用例驱动

    • 简单的事件驱动用例(如IOT警报)选择Storm或Kafka Streams。
    • 需要复杂高级功能(如事件时间处理、聚合、水印等)的用例选择Flink或Spark Streaming。
  • 现有技术栈

    • 如果已有Kafka生态,优先考虑Kafka Streams或Samza。
    • 如果已有Spark或Flink批处理基础,选择相应的流处理版本。
  • 未来需求

    • 对高级功能有长期需求的项目选择成熟的框架(如Flink)。
  • 实现复杂度

    • 如果简单用例无需复杂功能,选择轻量级框架(如Kafka Streams)。
  • 总结

    流处理和流框架选择取决于具体用例、现有技术栈以及对未来的扩展需求。在大型企业中,Flink和Spark Streaming因其成熟度和高级功能被广泛采用。对于小型项目或特定场景,Kafka Streams和Storm则更为合适。

    转载地址:http://htrfz.baihongyu.com/

    你可能感兴趣的文章
    Oracle 启动阶段 OPEN
    查看>>
    Oracle 在Drop表时的Cascade Constraints
    查看>>
    Oracle 在Sqlplus 执行sql脚本文件。
    查看>>
    Oracle 如何处理CLOB字段
    查看>>
    oracle 学习
    查看>>
    oracle 定义双重循环例子
    查看>>
    ORACLE 客户端工具连接oracle 12504
    查看>>
    Oracle 客户端连接时报ORA-01019错误总结
    查看>>
    oracle 导出sql数据库表结构,使用sql developer 导出Oracle数据库中的表结构
    查看>>
    oracle 嵌套表 例子,Oracle之嵌套表(了解)
    查看>>
    Oracle 常用命令
    查看>>
    Oracle 常用的V$视图脚本(二)
    查看>>
    Oracle 并行原理与示例总结
    查看>>
    oracle 并集 时间_Oracle集合运算符 交集 并集 差集
    查看>>
    Oracle 序列sequence 开始于某个值(10)执行完nextval 发现查出的值比10还小的解释
    查看>>
    ORACLE 异常错误处理
    查看>>
    oracle 执行一条查询语句,把数据加载到页面或者前台发生的事情
    查看>>
    oracle 批量生成建同义词语句和付权语句
    查看>>
    oracle 抓包工具,shell 安装oracle和pfring(抓包) 及自动环境配置
    查看>>
    Oracle 拆分以逗号分隔的字符串为多行数据
    查看>>