分离Samza框架和作业部署

2018-08-22 18:09 更新

动机

目前,所有 Samza 作业都部署为单个单元/包,将所有 Samza 库,用户代码和配置组合在一起。通常在大型组织中,管理 Samza 群集的团队与在 Samza 之上运行应用程序的团队不同。在这种情况下,目前的部署方式有两个主要问题:

  • Samza 软件版本:每当 Samza 团队发布新版本(例如修复错误)时,部署它的唯一方法是重建所有用户包并重新部署它们。如果团队可以按照自己的节奏单独发布 Samza 框架,并且简单的重新启动将会启动新版本,效率会更高。
  • 软件包不兼容:如果 Samza 和作业都依赖于相同的软件,但是依赖于不同的(特别是向后不兼容的)版本,则不能一起发布,因为它很可能会导致一些运行时问题。理想情况下,它们中的每一个都将分别加载需要的包。 注意。这个问题在这里没有解决。

为了解决第一个问题,我们通过定义两个可部署单元来分离 Samza 框架与用户作业的部署:

  • Samza 框架 - 仅包含 Samza 库,并单独部署到集群中的所有计算机。
  • 用户工作 - 仅包含用户代码,并使用预部署的 Samza 框架运行。

拆分部署允许升级 Samza 框架,而不强制开发人员显式升级其正在运行的应用程序。它还允许不同版本的 Samza 框架与简单的配置更改。这意味着我们可以支持运行数十或数百个作业的组织通常需要的金丝雀,升级和回滚场景。

部署顺序

拆分部署的先决条件

每个部署现在将由两个独立的软件包组成:

  1. Samza 框架 - 包括所有 Samza 图书馆和脚本,如 samza-api,samza-core,samza-log4j,samza-kafka,samza-yarn,samza-kv,samza-kv-inmemory,samza-kv-rocksdb,samza -shell,samza-hdfs 及其所有依赖项。
  2. 用户的工作 - 这包括作业包:StreamTask 实现的所有用户代码,配置和作业所需的其他库。该工作的包应该仅依赖于 samza-api 和没有其他 Samza 库。该包将无法自行启动。为了开始,它将需要使用 Samza 框架。

部署步骤

要以分拆部署模式运行作业:

  1. 部署框架:Samza 框架包应该部署到集群的所有机器到预定义的固定位置。这可以通过仅复制 jar 来完成,或者创建将部署它们的元包。我们假设 'samza-framework' 包安装到 '/.../samza-fwk/0.12.0' 目录中。
  2. 创建符号链接:需要为稳定版本的框架创建符号链接以指向框架位置,例如:ln -s /.../samza-fwk/0.12.0 /.../samza-fwk/STABLE'
  3. 部署用户作业:在作业的配置中,需要以下属性才能启用拆分部署,例如,在 '/ ... / samza-fwk' 中的 Samza 框架路径:samza.fwk.path=/.../samza-fwk 。默认情况下,Samza 将在文件夹内查找稳定链接以查找框架。您还可以通过配置覆盖版本:samza.fwk.version=0.11.1。在这种情况下,Samza 将选择 “/.../samza-fwk/0.11.1” 作为框架位置。这样,用户可以通过更改配置文件中的版本来轻松执行金丝雀,升级和回滚作业。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号