codecamp

Samza附录二 任务资源

该资源公开端点以支持任务范围内的操作。初始实现包括列出特定作业的所有任务的能力。这是“ 工作资源”的子资源,不能单独使用。

各个端点的响应将根据其功能和范围而有所不同。但是,所有任务的资源端点的错误消息将具有以下形式。

错误信息

每个错误响应将具有以下结构:

{
    "message": "Unrecognized status parameter: null"
}

message 是响应中唯一的字段,并包含对该问题的描述。 

获取所有任务

列出有关特定作业的所有任务的完整详细信息

请求
GET /v1/jobs/{jobName}/{jobId}/tasks
响应

状态:200 OK

[
{
   "preferredHost" : "samza-preferredHost",
   "taskName" : "Samza task",
   "containerId" : "0",
   "partitions" : [{
                      "system" : "kafka",
                      "stream" : "topic-name",
                      "partitionId" : "0"
                    }]
 }
 ]
响应码
状态描述
200好操作成功完成,并返回作业的所有任务。
错误(404
提供了无效的作业实例作为参数。
{
"message": "Invalid arguments for getTasks. jobName: SamzaJobName jobId: SamzaJobId."
}
500服务器错误
在服务器上执行该命令时发生错误。例如命令超时。
{
    "message": "Timeout waiting for get all tasks."
}

设计

抽象

TasksResource 需要两个主要抽象,用户可以通过这些抽象来处理特定于其环境的任何细节。

  1. TaskProxy:这个接口是与 Samza 任务交互的中心点。它暴露了一种方法来获得 Samza 工作的所有任务。
  2. InstallationFinder:InstallationFinder 提供了一个通用接口,用于发现所有安装的作业,在作业包结构及其位置隐藏任何自定义。InstallationFinder 还解决了用于验证和识别作业的作业配置。

组态

应该在与 Samza REST 配置相同的文件中指定 TasksResource 属性。

名称描述
task.proxy.factory.class
必需: TaskProxyFactory将用于创建TaskProxy实例。该值是必须实现TaskProxyFactory的完全限定类名称。Samza配有一个实现:
org.apache.samza.rest.proxy.task.SamzaTaskProxy
获取工作的所有任务的细节。它使用
SimpleInstallationRecord
与安装在磁盘上的Samza作业进行交互。
job.installations.path必需:包含Samza作业安装的文件系统路径。路径必须与Samza REST Service在同一主机上。每个安装必须是一个目录,其结构符合JobProxy使用的InstallationRecord实现的期望。
job.config.factory.class
用于阅读Samza作业配置的配置工厂。这用于获取InstallationRecord中每个作业实例的job.name和job.id属性。它也用于验证安装路径中的特定目录实际包含Samza作业。如果没有指定
org.apache.samza.config.factories.PropertiesConfigFactory
将会被使用。
Samza附录一 工作资源
用Samza远程调试
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Samza API

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }