Samza 背景

2018-08-18 18:14 更新

该页面提供了有关流处理的一些背景知识,描述了 Samza 是什么,以及为什么构建它。

什么是消息?

消息系统是实现近实时异步计算的常用方式。当事情发生时,消息可以添加到消息队列(ActiveMQ,RabbitMQ),pub-sub 系统(Kestrel,Kafka)或日志聚合系统(Flume,Scribe)中。下游用户从这些系统读取消息,并根据消息内容进行处理或采取行动。

假设你有一个网站,每当有人加载一个页面时,你会发送一个“用户浏览的页面”事件到消息系统。您可能会让用户执行以下任何操作:

  • 将消息存储在Hadoop中以供将来分析
  • 计数页面视图并更新仪表板
  • 如果页面视图失败,则触发警报
  • 向其他用户发送电子邮件通知
  • 使用用户的配置文件加入页面视图事件,并将消息发送回消息系统

消息传递系统允许您将所有这些工作与实际网页服务分离。

什么是流处理?

消息系统是一个相当低级别的基础设施 - 它存储消息并等待用户使用它们。当您开始编写产生或使用消息的代码时,您很快就会发现在处理层中有很多棘手的问题需要解决。Samza 旨在帮助解决这些问题。

考虑上面的计数示例(计数页面视图和更新仪表板)。当您的使用者正在运行的机器出现故障,并且当前计数器值丢失时会发生什么?你怎么恢复?处理器在重新启动时应该在哪里运行?如果底层邮件系统向您发送两次相同的邮件或丢失邮件怎么办?(除非您小心,否则您的计数将不正确。)如果您想按页面网址分组的网页浏览量计算如何?如果单个机器处理太多,您如何将计算分布在多台机器上?

流处理在消息传递系统之上是更高层次的抽象,它的目的是要正确解决这一类问题。

Samza

Samza 是一个流处理框架,具有以下功能:

  • 简单 API:与大多数低级消息系统 API 不同,Samza 提供了一个非常简单的基于回调的“过程消息” API,与 MapReduce 相当。
  • 管理状态: Samza 管理流处理器状态的快照和恢复。当处理器重新启动时,Samza 将其状态恢复为一致的快照。Samza 被构建来处理大量的状态(每个分区有许多千兆字节)。
  • 容错:当集群中的某台机器发生故障时,Samza 将与 YARN 合作,将您的任务透明地迁移到另一台机器。
  • 耐久性: Samza 使用 Kafka 来确保消息按照写入分区的顺序进行处理,并且不会丢失任何消息。
  • 可扩展性: Samza 在每个级别进行分区和分发。Kafka 提供有序,分区,可重放,容错的流。YARN 为 Samza 容器提供了分布式环境。
  • 可插拔:尽管 Samza 与 Kafka 和 YARN 开箱即用,Samza 提供了一个可插拔的 API,可让您与其他邮件系统和执行环境一起运行 Samza。
  • 处理器隔离: Samza 与 Apache YARN 合作,它支持 Hadoop 的安全模式,并通过 Linux CGroups 进行资源隔离。

备择方案

可用的开源流处理系统实际上很年轻,没有一个系统提供完整的解决方案。这一领域的新问题包括:如何管理流处理器的状态,流是否应该在磁盘上远程缓冲、在接收到重复消息或丢失消息时该怎么做,以及如何对底层消息传递系统进行建模。

 Samza 的主要特点是:

  • Samza 支持容错的本地状态。状态可以被认为是与处理任务分开和共处的表。状态本身被模仿为流。如果由于机器故障而导致本地状态丢失,则会重播状态流以进行恢复。
  • 流被排序,分区,可重放和容错。
  • YARN 用于处理器隔离,安全和容错。
  • 作业解耦:如果一个工作变慢,建立积压的未处理的消息,系统的其余部分不受影响。

有关 Samza 的更深入的讨论及其与其他流处理系统的关系,请参阅 Samza 的 比较 文档。

概念»



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号