博客
关于我
Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
阅读量:460 次
发布时间: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/

    你可能感兴趣的文章
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>