codecamp

Samza REST服务概观

Samza 提供了可在群集中的任何节点上部署的 REST服务,并具有可插入接口以添加自定义资源监视器。它旨在成为一个常见的动作的节点本地委托,例如启动作业,取样本地状态,测量磁盘使用情况,采取堆转储,验证活动等等。

Samza REST服务尚未启用 SSL 或身份验证,因此最初适用于更多后端和操作用例。例如,在不允许用户停止对方的工作的环境中将其暴露为面向用户的 API 是不明智的。

Samza REST的打包和配置与 Samza 的工作非常相似。一个明显的区别是 Samza REST 必须在要运行的每个主机上部署和执行,而 Samza 作业通常在集群管理器的主节点上启动,并且主人将作业部署到其他节点。

部署

Samza REST旨在成为需要从 Samza 群集节点执行的所有操作的代理。它可以部署到集群中的所有主机,并可能在不同主机上提供不同的用途。在这种情况下,使用不同的配置部署相同的版本的压缩来自定义主机角色的功能可能会有用。例如,Samza REST可以部署在具有 ResourceManager(RM)主机的一个配置和 NodeManager(NM))主机的另一个配置的 YARN 集群上。

部署服务与运行 Samza 工作非常相似。首先使用以下命令构建压缩:

./gradlew samza-rest:clean releaseRestServiceTar

然后从提取的位置运行服务:

samza-example/target/bin/run-samza-rest-service.sh  \
  --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory \
  --config-path=file://$PWD/config/samza-rest.properties

两个配置参数与 run-job.sh 的用途相同。

按照 入门教程 第一次快速部署和测试 Samza REST服务。

组态

Samza REST服务依赖于与 Samza Jobs 相同的配置系统。但是,Samza REST服务配置文件本身与 Samza 作业的配置文件完全不同。

配置可能提供核心配置的值,以及您可能添加到服务中的资源或监视器所需的任何其他配置。包含核心服务配置和 JobsResource 的基本配置文件如下所示:

# Service port. Set to 0 for a dynamic port.
services.rest.port=9139

# JobProxy
job.proxy.factory.class=org.apache.samza.rest.proxy.job.SimpleYarnJobProxyFactory
# Installation path for hello-samza project. Your root may vary.
job.installations.path=/hello-samza-ROOT/deploy/samza

核心配置

名称默认描述
services.rest.port必需: Samza REST服务在本地主机上使用的端口。如果为0,则动态选择可用端口。
rest.resource.factory.classes
以逗号分隔的实现ResourceFactory的类名列表。这些工厂将用于创建特定的资源实例,并可以从提供的服务器配置中拉取所需的任何属性。返回的实例将用于服务器的生命周期。如果没有为此属性提供任何值
rest.resource.classes
然后
org.apache.samza.rest.resources.DefaultResourceFactory
将被用作默认值。
rest.resource.classes以服务器注册的资源类名称的逗号分隔列表。这些类可以像每个请求一样经常实例化,生命周期不能保证与服务器匹配。此外,实例不接收任何配置。请注意,生命周期和接收配置的能力是通过此属性添加的资源与rest.resource.factory.classes之间的主要区别

记录

Samza REST使用 SLF4J 进行日志记录。在 run-samza-rest-service.sh 默认情况下,上述脚本需要在包的 bin 目录中的 log4j.xml 和日志写入到包根 logs 目录。但是,由于脚本调用run-class.sh 用于运行 Samza 作业的相同脚本,因此可以重新配置与Samza作业的日志记录非常相似。

Samza REST服务资源  »

Samza Kafka自动创建主题
Samza REST服务资源
温馨提示
下载编程狮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; }