跳转到主要内容

流处理和批处理框架

阅读需 2 分钟Tian PanTian Pan

为什么有这种框架?

  • 为了在更短的时间内处理更多的数据。
  • 统一处理分布式系统中的容错问题。
  • 将任务简化抽象以应对多变的业务要求。
  • 分别适用于有界数据集(批处理)和无界数据集(流处理)。

批处理与流处理的发展史简介

  1. Hadoop 与 MapReduce。谷歌让批处理在一个分布式系统中像 MapRduceresult = pairs.map((pair) => (morePairs)).reduce(somePairs => lessPairs)一样简单。
  2. Apache Storm 与有向图拓扑结构。MapReduce 不能很好地表示迭代算法。因此,内森·马兹(Nathan Marz)将流处理抽象成一个由 spouts 和 bolts 组件构成的图结构。
  3. Spark 内存计算。辛湜(Reynold Xin)指出 Spark 在处理相同数据的时候比 Hadoop 少使用十倍机器的同时速度却快三倍
  4. 基于 Millwheel 和 FlumeJava 的谷歌数据流(Google Dataflow)。谷歌使用窗口化API同时支持批处理与流处理。
  1. Flink 快速采纳了 ==Google Dataflow== 以及 Apache Beam 的编程模式。
  2. Flink 对 Chandy-Lamport checkpointing 算法的高效实现。

这些框架

架构选择

若要用商业机器来满足以上的需求,有这些热门的分布式系统架构……

  • master-slave(中心化的):Apache Storm + zookeeper, Apache Samza + YARN
  • P2P(去中心化的):Apache s4

功能

  1. DAG Topology 用来迭代处理 -例如Spark 中的 GraphX, Apache Storm 中的 topologies, Flink 中的 DataStream API。
  2. 交付保证 (Delivery Guarantees)。如何确保节点与节点之间数据交付的可靠性?至少一次 / 至多一次 / 一次。
  3. 容错性。使用cold/warm/hot standby, checkpointing 或者 active-active 来实现容错。
  4. 无界数据集的窗口化API。例如 Apache 的流式窗口。Spark 的Window函数。Apache Beam 的窗口化。

不同架构的区别对照表

架构StormStorm-tridentSparkFlink
模型原生微批量微批量原生
Guarentees至少一次一次一次一次
容错性记录Ack记录Ack检查点检查点
最大容错
延迟非常低
吞吐量

参考资料

保持联系,关注我获取更多内容

阅读需 3 分钟

Lyft 的营销自动化平台 Symphony

广告投放如何花更少的钱用更少的人得到更高回报?Lyft 的答案是自动化,包括LTV 预测模块 、预算分配模块、投放模块。当人从繁琐的投放任务解放出来,专注于理解用户、理解渠道、理解自身要传达给受众的信息之后,就能够获得更好的投放效果

marketing
architecture
阅读需 3 分钟

构架入门

架构服务于软件系统的整个生命周期,使软件系统易于理解,开发,测试,部署和操作,其目标是最小化每个业务用例的人力资源成本。O’Reilly出版的《软件架构》介绍了五种基本架构:分层架构;事件驱动架构;微核架构;微服务架构;基于空间的架构。

architecture
system design
阅读需 3 分钟

再窥iOS架构模式

深入了解 iOS 架构模式——MVC、MVP、MVVM 和 VIPER——从职责分配、可测试性和可维护性三个维度进行评估。

architecture
mobile
阅读需 1 分钟

Lambda 架构

使用Lambda可以解决大数据所带来的三个问题:准确性(好);延迟(快);吞吐量(多)。lambda 架构可以指导我们如何为一个数据系统实现扩展。

architecture
system design
阅读需 10 分钟

那个悄然演变成延迟敏感型服务的夜间批处理作业

随着一个又一个合理需求的加入,一个夜间批处理作业最终演变成了对延迟要求极高的服务。本文将探讨为什么批量推理和在线推理的优化目标截然相反,架构漂移如何导致隐蔽的故障,以及如何有针对性地进行重新架构。

insider
ai-engineering