Day4 让我们来 Build 出自己的 NiFi 服务吧

Docker & Docker Compose installation

今天我们就来快速地建立起自己的 NiFi 服务吧!我会利用 Docker 的方式来做环境的建置,如果不熟悉 Docker 的读者们,可以先参考以下几个连结,来帮助自己安装好 Docker 和 Docker Compose。

Docker Installation

这边提供常用的 MacOS, WindowsUbuntu 的 Docker 安装连结,读者可依自己的 OS 点选对应的连结来做参考:

Docker Compose Installation

  • Docker Compose installation
    底下可以看到有 MacOS, WindowsLinux,读者们记得也是要依照自己的 OS 选择对应的安装方式喔。

一旦我们安装好 Docker 和 docker-compose 的服务之後,就可以透过指令的方式来做好安装了,这边一开始我会先提供最基本的 Dockerfile 和 docker-compose.yaml 给各位读者,往後随着介绍越来越多时,我们在把需要的东西一步一步加入进来。

开始建立 NiFi 服务

我们一开始可以先建立一个 For NiFi 的 Folder,我这边是建立一个名为nifi_project 的 Folder, 那底下 Structure 可以参考如下:

- nifi_project/
    |-- .env
    |-- requirements.txt
    |-- Dockerfile
    |-- docker-compose.yaml

.env sample

NIFI_USERNAME=your_name
NIFI_PASSWORD=your_password
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=aws_region

这边我们先建立一些要给 NiFi 用的环境变数於 .env 这个档案内,而後续 docker-compose.yaml 就可以加入这个设定来启动服务的 container。这里简单说明一下用到 Key:
(1) NIFI_USERNAME
(2) NIFI_PASSWORD
(3) AWS_ACCESS_KEY_ID
(4) AWS_SECRET_ACCESS_KEY
(5) AWS_REGION
(1) 和 (2) 是当 NiFi 启动之後需要登入的帐号密码,可以依自己需求做设定; 而 (3), (4)和(5) 是因为後续会示范与 AWS 做对接,所以需要设定 AWS 相关的 key,如果还没有的话可以先注解掉没关系,後续再加即可。

requirements.txt example

底下这里是 pip3 要安装的 lib,我把独立写成 requirements.txt,而读者们也可以依据自己的需求去做增减。

asn1crypto==0.24.0
awscli==1.20.16
boto3==1.18.16
botocore==1.21.16
cachetools==4.2.2
certifi==2021.5.30
charset-normalizer==2.0.4
colorama==0.4.3
cryptography==2.6.1
docutils==0.15.2
entrypoints==0.3
google-api-core==1.31.1
google-api-python-client==2.15.0
google-auth==1.34.0
google-auth-httplib2==0.1.0
googleapis-common-protos==1.53.0
httplib2==0.19.1
idna==3.2
jmespath==0.10.0
keyring==17.1.1
keyrings.alt==3.1.1
packaging==21.0
protobuf==3.17.3
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycrypto==2.6.1
PyGObject==3.30.4
pyparsing==2.4.7
python-dateutil==2.8.2
pytz==2021.1
pyxdg==0.25
PyYAML==5.4.1
requests==2.26.0
rsa==4.7.2
s3transfer==0.5.0
SecretStorage==2.3.1
six==1.13.0
uritemplate==3.0.1
urllib3==1.26.6

Dockerfile Sample

这边是我自己简单写的 Dockerfile,也可以依自己需求去做增减,这边未来也会有用 python script 来做实作的范例,所以我先事前安装起来,但必须要建立於官方的 image,可以参考 Docker Hub - Apache NiFi

FROM apache/nifi:1.14.0

USER root

ADD requirements.txt /tmp/project/

RUN apt-get update && \
    apt-get install -y vim && \
    apt-get install -y python3 python3-pip && \
    pip3 install --no-cache-dir -r /tmp/project/requirements.txt && \
    rm -rf \
        /tmp/* \
        /var/lib/apt/lists/*

接着就可以在当前目录(nifi_project/) 透过以下指令来 Build image:

docker build -t nifi-sample .

建立完之後,就可以透过 docker images | grep nifi-sample 来确认是否有 image 存在。

docker-compose.yaml sample

Build 完 image 之後,我们就可以透过 docker-compose.yaml 来建立 NiFi 和 Nifi-registry 的服务,范例如下:

version: '3'

services:
    nifi:
        image: nifi-sample
        container_name: nifi-service
        restart: always
        ports:
            - 8443:8443/tcp
            - 8080:8080/tcp
        env_file: .env
        volumes:
            - "./aws_athena_jdbc.jar:/tmp/aws_athena_jdbc.jar"
            - "./aws_redshift_jdbc.jar:/tmp/aws_redshift_jdbc.jar"
            - "./mysql-connector-java-8.0.26.jar:/tmp/mysql-connector-java-8.0.26.jar"
        environment:
            - SINGLE_USER_CREDENTIALS_USERNAME=${NIFI_USERNAME}
            - SINGLE_USER_CREDENTIALS_PASSWORD=${nifipassword}
            - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            - AWS_REGION=${AWS_REGION}
        networks:
            - nifi-network

    nifi-registry:
        image: apache/nifi-registry:1.14.0
        container_name: nifi-registry-service
        restart: always
        ports:
            - 18080:18080/tcp
        networks:
            - nifi-network
networks:
    nifi-network:

其中 aws_athena_jdbc.jar, aws_redshift_jdbc.jarmysql-connector-java-8.0.26.jar 是我们後续在介绍时会用到,各位读者可以从我的 Github 来下载下来使用。
接着透过 docker-compose up -d 的指令启动 container,应该就会看到下面这个画面:

最後透过 docker ps 来确定 container 是否有成功启动,画面如下:

如果没问题,就可以透过下面这两个 link 连到 NiFi 和 Nifi Registry 罗

  • NiFi
    link: https://localhost:8443/nifi
    点选 link 之後,就会进入到 login 画面:

    接着输入刚刚在 .env 设定的帐号密码即可 login,login 後的画面如下:

    图上面有我对主画面的 icon 简单说明,未来会在一步一步地做详细介绍。

  • NiFi-Registry
    link: http://localhost:18080/nifi-registry
    点选 link 之後,就会进入到 NiFi-Registry 的主画面:

如此一来,两个服务就启动起来了!是不是很简单呢?

额外补充

或许有人想说,为什麽只有 NiFi 要用 HTTPS 做连线?原因是这样的,这与我所使用的版本有关,我在前面的范例是采用最新 release version - 1.14.0,是今年7月 release 出来的,根据官方最新 release 的版本( Apache NiFi-1.14.0 )有说明到:
由於传统预设的HTTP 协定,会让使用者任意存取所有的 NiFi node,若没有自行设定成 security 机制的话可能就会有安全性的疑虑。所以在新的 version 中,NiFi直接将 security 视为 default 的机制, NiFi 自己会自己做 self-signed certificate, Single User Login Identity ProviderSingle User Authorizer 几种机制,因此必须在建立服务时指定好预设的帐号密码。详细地机制说明可以参考此连结

那如果读者们改 NiFi docker image 成 1.13.0 或是更之前的版本,你可以发现就能直接透过 http://localhost:8080/nifi 直接进入到主画面做操作,也不需要 login 机制。

这时候你可能会想那以前是不是安全性很不好,其实也不是,以往的版本则是要再额外设定 NiFi 的 Config,或是额外搭配像是 Google Oauth 来做一个身份验证来保障安全性,只是通常会用於 Production 或 Staging 的环境,若是自己本地的开发环境就还好,只是现在新版本直接预设要用 HTTPS 做处理这样,那未来如果要搭配像是 Google Oauth 之类的来做身份验证,当然还是要额外做设定。

只是我希望能用最新版本的方式来介绍,好让各位读者可以直接跟到最新的操作。这样未来读者们假设真的有兴趣想再进去专研或是用到企业本身的话,这当中的衔接也不会差异太多。

小总结

最後,我也会把上述这些 File 放到 Github上,有需要也可以自行拉下来做使用; 同时我也有提供 NiFi Clustering for docker在我的 Github上,有兴趣者也可以拉下来试试看,明天我们就可以在服务上开始做操作了喔!

Reference


<<:  Day04-入口管制(三)

>>:  Day5 跟着官方文件学习Laravel-把Request丢给Controller去处理

NNI安装後的验证01

上回我们安装完成後,如何确认安装的正确性呢?当然是下载实验样本来炸炸看。 首先,请先建一个子目录。 ...

Day10 Sideproject(作品集) from 0 to 1 -github organization

今天来介绍这个多人开发必备的东西 其中一个好用的功能 github organizations 在g...

【Day15】Enzyme的两个常用渲染API及Jest的几个API,和..设计测试的几个要点 (・θ・)

为了让我们的测试看起来乾净,就跟写Code一样, 浅显易懂是原则,所以我们要把握以下两点! DRY(...

{Day30} 网路爬虫

前言 现在要进入网路爬虫的自学纪录了!!! Such a long way 网路爬虫可以说是非常实用...

中阶魔法 - this 指向(一)

前情提要 艾草:「this is a book。」 「你在做什麽呀?」 艾草:「练习你的语言呀。」 ...