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

    你可能感兴趣的文章
    MySQL:索引失效场景总结
    查看>>
    Mysql:避免重复的插入数据方法汇总
    查看>>
    MyS中的IF
    查看>>
    M_Map工具箱简介及地理图形绘制
    查看>>
    m_Orchestrate learning system---二十二、html代码如何变的容易
    查看>>
    M×N 形状 numpy.ndarray 的滑动窗口
    查看>>
    m个苹果放入n个盘子问题
    查看>>
    n = 3 , while n , continue
    查看>>
    n 叉树后序遍历转换为链表问题的深入探讨
    查看>>
    N!
    查看>>
    N-Gram的基本原理
    查看>>
    n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
    查看>>
    Nacos Client常用配置
    查看>>
    nacos config
    查看>>
    Nacos Config--服务配置
    查看>>
    Nacos Derby 远程命令执行漏洞(QVD-2024-26473)
    查看>>
    Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
    查看>>
    Nacos 单机集群搭建及常用生产环境配置 | Spring Cloud 3
    查看>>
    Nacos 启动报错[db-load-error]load jdbc.properties error
    查看>>
    Nacos 报Statement cancelled due to timeout or client request
    查看>>