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.)