Apache Nifi 클러스터로 구성된 메모
최근에 아파치 니피를 알게 됐어요.
웹소켓을 사용하면 간단한 MQ 서버에서... 데이터 흐름을 직관적으로 설계하고 스케줄링하며 분산을 실행할 수 있다.재미있었어
스탠드는 간단하지만 클러스터 구성을 만드는 데 시간이 많이 걸려 설정 등의 메모를 작성했다.
전제 조건
nifi1
, nifi2
, nifi3
의 호스트 이름)zookeeper
)절차.
Docker 이미지 만들기
적당히 했어.사용하기 편리하도록 환경 변수 등을 통해 파라미터를 조정해야 하지만 설정 파일을 직접 마운트하는 방식으로 조작할 수 있습니다.
Apache Nifi
Dockerfile
FROM openjdk:11-jre
# nifiユーザの作成
RUN addgroup --system --gid 1001 nifi &&\
adduser --system --home /home/nifi --shell /bin/bash --uid 1001 --gid 1001 nifi &&\
cd /home/nifi
USER nifi
WORKDIR /home/nifi
# Apache Nifiのダウンロードと展開とパス通す
RUN wget ftp://ftp.riken.jp/net/apache/nifi/1.12.1/nifi-1.12.1-bin.tar.gz &&\
tar -xf nifi-1.12.1-bin.tar.gz
ENV NIFI_HOME=/home/nifi/nifi-1.12.1
ENV PATH=$PATH:$NIFI_HOME/bin
EXPOSE 8080
CMD ["nifi.sh","run"]
구축$ sudo docker build -t mynifi .
nifi.propertiesDocker 이미지를 구축한 후 nifi.properties를 HOST 측에 가져와 편집하다.각 노드의 몫을 준비하다.
$ docker run --rm mynifi cat /home/nifi/nifi-1.12.1/conf/nifi.properties > nifi1.properties
$ vi nifi1.properties
변경된 부분만 뽑아주세요.#(中略)
#ノードのホスト名と合わせる
nifi.remote.input.host=nifi1
#適当なポートを設定
nifi.remote.input.socket=8090
#ノードのホスト名と合わせる
nifi.web.http.host=nifi1
#trueに変更
nifi.cluster.is.node=true
#ノードのホスト名と合わせる
nifi.cluster.node.address=nifi1
# 適当なポートを設定
nifi.cluster.node.protocol.port=8091
# ノードのリーダー選挙時間。デフォ5分が長くて待つのが面倒だったので、ちょっと短くした。
nifi.cluster.flow.election.max.wait.time=1 min
# 複数Zookeeperを指定する時はカンマ区切りで並べる
nifi.zookeeper.connect.string=zookeeper1:2181
state-management.xml$ sudo docker run --rm mynifi cat /home/nifi/nifi-1.12.1/conf/state-management.xml > state-management.xml
$ vi state-management.xml
<!-- 中略 -->
<cluster-provider>
<id>zk-provider</id>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
<!-- Zookeeperの宛先を設定 -->
<property name="Connect String">zookeeper1:2181</property>
<property name="Root Node">/nifi</property>
<property name="Session Timeout">10 seconds</property>
<property name="Access Control">Open</property>
</cluster-provider>
Apache ZookeeperNiFi에는 내장된 Zookeeper가 있는데
nifi.state.management.embeded.zookeeper.start=true
라면 NiFi와 동시에 Zookeeper를 시작할 수 있지만 실제 활용에 가까운 이미지로 외부의 Zookeeper를 사용해야 한다.아파치 카프카 등 다른 세워진 주키퍼 노드가 있다면 그쪽으로 연결해도 괜찮다.
Dockerfile
FROM openjdk:11-jre
RUN mkdir /home/zookeeper && mkdir /var/lib/zookeeper
WORKDIR /home/zookeeper
RUN wget https://downloads.apache.org/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz &&\
tar xzf apache-zookeeper-3.6.2-bin.tar.gz
ENV ZOOKEEPER_HOME=/home/zookeeper/apache-zookeeper-3.6.2-bin
ENV PATH=$PATH:$ZOOKEEPER_HOME/bin
COPY Start.sh /home/zookeeper/Start.sh
CMD ["./Start.sh"]
Start.shZookeeper는 Zookeeper의 데이터 디렉토리(/var/lib/zokeeper)에서
myid
파일을 만들어야 합니다.Docker 컨테이너를 실행할 때 환경 변수를 통해 전달되며 셸 스크립트를 미리 만들어 생성합니다.#!/bin/bash
echo $ZOOKEEPER_MYID > /var/lib/zookeeper/myid
zkServer.sh start-foreground
zoo.cfgZookeeper의 conf 디렉토리에서 파일을 복사
zoo_sample.cfg
하여 zoo.cfg
라는 이름으로 편집합니다.$ sudo docker build -t myzookeeper .
$ sudo docker run --rm myzookeeper cat /home/zookeeper/apache-zookeeper-3.6.2/conf/zoo_sample.cfg > zoo.cfg
$ vi zoo.cfg
# 最終行にでも以下を追記する。この1は先ほどのZOOKEEPER_MYIDと紐づく
server.1=zookeeper:2888:3888
Docker Compose 만들기Docker 이미지가 준비되었으므로 Docker-Compose 파일 만들기
docker-compose.yaml
version: '3'
services:
zookeeper:
build: ./zookeeper
image: "myzookeeper"
container_name: "zookeeper"
environment:
ZOOKEEPER_MYID: 1
volumes:
- ./zookeeper/zoo.cfg:/home/zookeeper/apache-zookeeper-3.6.2-bin/conf/zoo.cfg
nifi1:
build: ./nifi
image: "mynifi"
container_name: "nifi1"
ports:
- 8080:8080
volumes:
- ./nifi/nifi1.properties:/home/nifi/nifi-1.12.1/conf/nifi.properties
- ./nifi/state-management.xml:/home/nifi/nifi-1.12.1/conf/state-management.xml
nifi2:
build: ./nifi
image: "mynifi"
container_name: "nifi2"
ports:
- 8081:8080
volumes:
- ./nifi/nifi2.properties:/home/nifi/nifi-1.12.1/conf/nifi.properties
- ./nifi/state-management.xml:/home/nifi/nifi-1.12.1/conf/state-management.xml
nifi3:
build: ./nifi
image: "mynifi"
container_name: "nifi3"
ports:
- 8082:8080
volumes:
- ./nifi/nifi3.properties:/home/nifi/nifi-1.12.1/conf/nifi.properties
- ./nifi/state-management.xml:/home/nifi/nifi-1.12.1/conf/state-management.xml
생성된 디렉토리 구조+ /project_root
- docker-compose.yaml
+ /nifi
- Dockerfile
- nifi1.properties
- nifi2.properties
- nifi3.properteis
- state-mnagement.xml
+ /zookeeper
- Dockerfile
- zoo.cfg
- Start.sh
실행!$ sudo docker-compose up -d
지도자 선거를 1분 정도 치러야 하기 때문에 조금 기다려야 한다.docker exec
중$NIFI_HOME/logs/nifi-app.log
에서 아파치 니피tail -f
를 조망할 수도 있다.브라우저를 통해 액세스
http://localhost:8080/nifi
.집단 표지가 3/3이 되면 성공합니다.오른쪽 빵 부스러기에서 Cluster를 선택하여 각 노드의 상태를 관찰합니다.Nifi2 노드는 주로 Nifi 3 노드로 구성됩니다.
Reference
이 문제에 관하여(Apache Nifi 클러스터로 구성된 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/souchan-t/items/de8f845d294a5efa9db9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)