博客
关于我
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/

    你可能感兴趣的文章
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    MySQL 错误
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>