×

Samza 入门

Samza 你好Samza 下载Samza 功能预览

Samza 详细介绍

Samza 背景Samza 概念Samza 结构

Samza 与其他流处理项目比较

Samza 比较介绍Samza MUPD8Samza 与 StormSamza 与 Spark Streaming

Samza API

Samza API概述

Samza 核心

Samza ContainerSamza 流Samza 序列化Samza 定期检查Samza 状态管理Samza 窗口功能Samza 协调器流Samza 事件循环Samza 指标Samza JMX

Samza 作业部署

Samza JobRunnerSamza 配置Samza 打包Samza YARN工作Samza 记录Samza 再处理Samza Web UI和REST APISamza 分离框架和作业部署

Samza YARN

Samza Application MasterSamza YARN执行隔离Samza 主机关联和 YARNSamza YARN资源本地化Samza YARN安全Samza 写入HDFSSamza 从HDFS文件读取

Samza 相关操作

Samza 安全Samza Kafka自动创建主题

Samza REST服务

Samza REST服务概观Samza REST服务资源Samza REST服务监视器

Samza 附录

附录一 工作资源附录二 任务资源附录三 远程调试附录四 从HDFS部署Samza工作附录五 部署Samza Job到CDH附录六 在多节点YARN中运行附录七 在没有联网的情况下运行附录八 Samza REST入门附录九 Async API和多线程指南附录十 代码附录十一 Samza配置参考

Samza MUPD8


人们通常想知道类似的系统如何比较。我们已尽全力将 Samza 的功能集与其他系统进行对比。但是我们不是这些框架的专家,当然我们也是完全有偏见的。如果我们有任何东西,请让我们知道,我们会纠正。

耐久力

MUPD8 没有耐久性或交货保证。在 MUPD8 中,流处理器任务最多只能接收一次消息。Samza 使用 Kafka 进行消息传递,保证消息传送。

订购

与耐用性一样,开发人员理想地喜欢他们的流处理器按照他们写的顺序接收消息。

基于对 MUPD8 对其排序保证的描述的理解,它保证所有消息将按照写入 MUPD8 队列的顺序进行处理,这与 Kafka 和 Samza 的保证相当。

缓冲

处理大数据流的一个关键问题是在一个下游处理阶段变慢时处理背压。

当在两个 MUPD8 任务之间传递消息时,MUPD8 会缓冲内存中队列中的消息。当队列填满时,开发人员可以选择将消息放在地板上,将消息记录到本地磁盘或阻塞,直到队列释放。所有这些选项都是次优的。删除邮件会导致错误的结果。阻塞流处理器可能具有级联效应,其中最慢的处理器阻止所有上游处理器,而后者又阻止其上游处理器,直到整个系统停止。登录到本地磁盘是最合理的,但是当发生故障时,这些消息在故障切换时丢失。

通过采用 Kafka 的经纪人作为远程缓冲区,Samza 解决了所有这些问题。它不需要阻止,因为消费者和生产者使用卡夫卡经纪人的磁盘作为缓冲区进行解耦。消息不会被丢弃,因为 Kafka 经纪人从0.8版本开始高度可用。如果发生故障,当 Samza 作业在另一台计算机上重新启动时,其输入和输出不会丢失,因为它们远程存储在复制的 Kafka 代理上。

状态管理

引言所述,流处理器在处理消息时通常需要保持一些状态。不同的框架具有不同的处理这种状态的方法,以及在出现故障时该怎么办。

MUPD8 使用写回缓存策略来管理定期写回 Cassandra 的内存状态。

Samza 在任务中维持当地的状态。这允许状态大于适合内存的状态。状态被持久化到输出流,以便在任务失败时启用恢复。我们认为这种设计能够实现更强的容错语义,因为变更日志会捕获状态的演变,从而使任务的状态恢复到一致的时间点。

部署和执行

MUPD8 包括一个自定义执行框架。该框架在用户和资源限制方面支持的功能对我们来说并不清楚。

Samza 利用 YARN 部署用户代码,并在分布式环境中执行。

容错

流处理系统在机器或处理器出现故障时应该做什么?

MUPD8 使用其相当于 YARN 的定制来管理容错。当流处理器无法向下游处理器发送消息时,它会通知 MUPD8 的协调器,并通知所有其他计算机。然后机器将根据所使用的密钥哈希发送所有的消息到新的机器。发生这种情况时,消息和状态可能会丢失。

Samza 使用 YARN 来管理容错。YARN 检测节点或 Samza 任务何时失败,并通知 Samza 的ApplicationMaster。在这一点上,由 Samza 决定要做什么。通常,这意味着在另一台机器上重新启动任务。由于消息能够远程存储到卡夫卡经纪人,并且没有内存中的队列,所以不应丢失消息(除非处理器使用异步卡夫卡生产者,提供更高的性能,但不要等待消息被提交)。

工作流程

有时候需要多个工作或处理阶段来完成某些工作。例如,您希望重新分区流的情况。MUPD8 有一个自定义的工作流程系统设置,用于定义如何一次执行多个作业,以及如何将流数据从一个进程导入另一个。

Samza 使单个作业的执行细分级别。作业通过命名输入和输出流进行通信。这隐式定义了所有正在运行的作业之间的数据流图。我们选择了这个模型,使不同工作人员拥有不同工程师的处理阶段的数据流图可以在不同的代码库中工作,而无需将所有内容都集成到一个拓扑中。

这是由于我们在 Hadoop 中的经验,其中作业之间的数据流由其输入和输出目录隐含地定义。这种分散的模式已被证明可以很好地扩展到一个大型组织。

记忆

MUPD8 使用线程在单个 JVM 内执行其所有映射/更新处理器。这是内存高效的,因为 JVM 内存开销是跨线程共享的。

Samza 为每个流处理器容器使用单独的 JVM 。与在单个 JVM 中运行多个流处理线程相比,这具有使用更多内存的缺点。然而,优点是改进了任务之间的隔离,这可以使它们更可靠。

隔离

MUPD8 在流处理器之间不提供资源隔离。单个不良行为的流处理器可以降低节点上的所有处理器。

Samza 在流处理器任务之间使用流程级隔离,类似于 Hadoop 的方法。我们可以强制执行严格的每进程内存限制。此外,Samza 在与 YARN cgroup 一起使用时支持 CPU 限制。随着 YARN 对 cgroup 的支持进一步发展,还应该可以支持磁盘和网络 cgroup 限制。

进一步阅读

MUPD8 团队发表了一篇关于他们系统设计的非常好的论文


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)