×

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 协调器流


Samza 的工作完全由工作配置驱动。因此,工作配置往往相当大。为了轻松地序列化这样大的配置并将其持续执行,Samza 在提交作业时将所有配置写入一个称为协调器流的持久流。

协调器流是配置被写入的单分区流。它具有与 Samza 中可配置的任何输入流相同的特征 - 有序,可重放和容错。流将包含三种主要类型的消息:

  1. 作业配置消息
  2. 任务 changelog 分区分配消息
  3. 集装箱地点信息

协调器流命名

命名约定与创建的检查点主题非常相似。

"__samza_coordinator_%s_%s" format (jobName.replaceAll("_", "-"), jobId.replaceAll("_", "-"))

协调器流消息模型

协调器流消息被建模为键/值对。关键是明确定义的字段列表:版本,类型和密钥。该值是一张地图。值映射有一些预定义字段(如时间戳,主机等),这些字段对所有消息都是通用的。

CoordinatorStreamMessage 的完整结构是:

key => ["", "", ""]

message => {
    "host": "",
    "username": "",
    "source": "",
    "timestamp": ,
    "values": { }
}

消息本质上是串行化的,并通过电线作为 JSON Blob 发送。因此,为了使序列化正常工作,没有任何不必要的空格是非常重要的。上述 JSON blob 中的空白区域仅显示为可读性。

最重要的字段是类型,键值和值:

  • type - 定义消息的种类
  • 键 - 定义与值相关联的键
  • 值映射 - 基于每个消息类型定义,并定义与该类型相关联的一组值

当前支持的协调器流消息如下所示:

信息 类型 价值观地图
配置消息
(适用于所有构型
中列出的选项的配置
设置配置 <配置名称> 'value'=>
任务 - 更改日志分配消息 设置更新日志 < TaskName > 'partition'=>
集装箱地点信息 设置容器主机分配 <容器-ID> 'hostname'=>

协调器流写入器

Samza 提供了一个命令行工具,将 Job Configuration 消息写入协调器流。该工具可以使用如下:

samza-example/target/bin/run-coordinator-stream-writer.sh 
  --config-path=file:///path/to/job/config.properties 
  --type set-config 
  --key job.container.count 
  --value 8

工作协调器

作业协调器每次在作业启动时从协调器流引导配置。它会定期跟踪写入协调器流的任何新数据,并更新作业模型。

作业模型是用于表示 Samza 作业的数据模型,它还包含作业配置。Samza 作业的层次结构具有容器,每个容器都有任务,封装在作业模型中,以及相关信息,如容器ID,任务名称,分区信息等。

作业协调器通过 HTTP 服务公开作业模型和作业配置。作业协调器的 HTTP 服务的 URL 作为环境变量作为容器启动时传递给 Samza Containers。容器可以编写元信息,例如 locality - 容器运行的机器的主机名。但是,他们将通过HTTP服务查询作业协调器来读取作业模型和配置。

因此,Job Coorindator 是具有整个工作状态的最新视图的单一组件。这是非常有用的,因为它允许我们在将来扩展作业协调器的功能来管理作业的生命周期(例如启动/停止容器,修改任务分配等)。

工作协调器可用性

作业协调器驻留在与 Samza 应用程序主机相同的容器中。因此,作业协调器的可用性与纱线群集中应用程序主机(AM)的可用性有关。只有在协调器流初始化工作协调器之后才能启动Samza 容器。在稳定状态下,当 Samza 容器出现时,应该能够从 Job Coordinator 中读取 JobModel,而不会超时。

协调器流模型的优点

将配置写入持久的流程为 Samza 打开了大门:

  1. 删除作业配置上的大小限制
  2. 使用标准数据模型和通信接口向工作容器提供与作业相关的配置和元数据(有关详细信息,请参阅作业协调器
  3. 某些配置只能设置一次。在将来的部署中更改它们将重置整个作业的状态,因为它可能会将输入分区重新洗牌到容器。例如,在有状态的Samza作业上更改SystemStreamPartitionGrouper会将单个更改日志分区中的不同StreamTask的状态混合起来。没有持续配置,没有简单的方法来检查作业的当前配置是否有效。
  4. 可以通过写入协调器流动态更改作业配置。这可以使需要作业的功能与配置更改(例如主机相关性,自动缩放,动态重新配置等)无关。
  5. 提供统一的工作状态视图,使Samza能够更强大的控制容器控制的方式(有关详细信息,请参阅作业协调器
  6. 使得 Job Coordinator 未来的设计失败,因为它作为当前工作状态的真实来源

对于可以利用此型号的其他有趣功能,请参考设计文档


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)