博客
关于我
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 where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>
    MySQL – 导出数据成csv
    查看>>
    MySQL —— 在CentOS9下安装MySQL
    查看>>
    MySQL —— 视图
    查看>>
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>
    MySQL 中开启二进制日志(Binlog)
    查看>>
    MySQL 中文问题
    查看>>
    MySQL 中日志的面试题总结
    查看>>
    mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
    查看>>
    MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
    查看>>
    Mysql 中的日期时间字符串查询
    查看>>
    mysql 中索引的问题
    查看>>
    MySQL 中锁的面试题总结
    查看>>