前面已经大概介绍了一下 NiFi 的用途还有特性,那今天就来讲在 NiFi 中,其实是可以对一组 Data Pipieline 来做一个『版本控制』,就类似於 git 一样,git 可以将每次修改好的版本 commit 出去且 push 到 Github 或 Gitlab 平台上对应的 respository。那 NiFi 是如何做到的呢?答案是今天的主角 - NiFi Registry。
在开始讲 NiFi Registry 之前,先来简单探讨一下为什麽 NiFi 需要做版本控制?原因有几点:
NiFi Registry 是一个额外独立的服务,他同时也是 NiFi 的 sub-project。其中他有几个地方需要留意:
首先先看我设计的架构图:
从图上我们可以看到在 NiFi Registry 建立於 Bucket,而Bucket底下可以有很多 Flow(也就是 Processor Group 为单位),再针对 Flow 来做版控。
这样讲可能读者们还是有点不清楚,没关系,我们来套用一个常见的例子:
举例来说,现在有一间公司有两个部门会用到 NiFi 来做 Data Pipeline,此时我们可以在 NiFi Registry 建立两个 Bucket,用来个别隶属於两个部门,而每个部门底下有自己的Data Pipeline Project,就可以在 Bucket 底下针对每一个 Project(也就是 Flow) 来做版本控制了。
当然读者们也可以依据自己所属的环境与场景来做对应的拆分,所以 Bucket 和 Flow 也就会有不同的意涵,这边我就提一个常用的案例来让大家理解。
为什麽必须要以 Processor Group 为单位呢?其实不难想像,Processor Group 除了做 Module 之外,同时也作为分 Team 和分 Project 为使用,所以底下就会由一连串的 Processors 所组合而成的。所以以这个作为版控单位,才能将完整的 Data Pipeline 去做到一个控管。
还有一点是如果站在 Module 去思考,正常来说我们再引用 Module 时本来就会指定好我们可以使用的版本,所以从这个角度去想确实采用 Processor Group 作为版控单位是比较合理的选择。
NiFi Registry 在与 Nifi 搭配应用的架构,主要会分成两种:
这个架构是 Dev, Staging 和 Production 共用同一个 NiFi Registry,虽然维护成本比较少,因为只要维护一台 NiFi Registry,但其实依据我使用的经验,这个架构其实不太好:
这个架构是 Dev, Staging 和 Production 个别维运 NiFi Registry,接着透过 nifi-toolkit 或 NiPyAPI 来做 Registry 之间的同步。我觉得这个架构是比较好的:
个人还是建议采用第二种架构,好好地将环境切割清楚,只 synch 需要 synch 的版本,这样一方面可读性好,另一方面假设有问题时也比较好去追踪。
今天提完了这个 NiFi Registry 的用途,以及如何搭配 NiFi 的架构,明天我就会让读者们可以在自己的机器或笔电上启动这两个服务,接下来的文章都会以 1个 NiFi 搭配 1个 NiFi Registry 去做介绍,想要更复杂一点的,未来我会再提供一些资源给各位。
<<: Day 13 运算宝石:【Lab】EC2储存资源 EBS Volume 建立与使用 (下)
其实原本最初规画想要做Index方式的纪录,然後多增加一些没写到的面向 不过,总是计画赶不上变化 最...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
持续卡关debug的一天。不过至少可以纪录一下今天弄出debug环境的笔记: 上篇提到seperat...
Set与Map不同再於Set没有key,是指有包含值的特殊集合,且每个值只能出现一次不能重复。 Se...
「久未联络的朋友,我还没存他的电话,但不小心删除了 iPhone 通话记录。请问我还能还原消失不见的...