Try   HackMD

1. Docker-compose

1.1 파일(docker-compose.yml)을 생성함

Docker Compose 파일(docker-compose.yml)을 생성합니다. 이 파일은 NiFi와 PostgreSQL 컨테이너를 정의하고 구성하는 데 사용됩니다. Docker Compose 파일에 다음 내용을 추가하여 NiFi와 PostgreSQL 서비스를 정의합니다.

version: '3'
services:
  nifi:
    image: apache/nifi:1.18.0
    container_name: nifi
    restart: always
    ports:
      - "8080:8080"
      
    environment:
      - NIFI_WEB_HTTP_PORT=8080
    links:
      - postgres:postgres
    depends_on:
      - postgres

  postgres:
    image: postgres:13.4
    container_name: postgresql
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres

1.2 container를 시작함

Docker Compose 파일을 저장한 후, 해당 디렉토리로 이동하여 다음 명령을 실행하여 NiFi와 PostgreSQL 컨테이너를 시작합니다:

docker-compose up -d

명령이 실행되면 NiFi와 PostgreSQL 컨테이너가 배포됩니다

2. NIFI 워크플로 생성

2.1 URL 링크 열기

http://localhost:8080/nifi/

2.2 워크플로 생성

​​​​- 캔버스에 `GetFile` 프로세서를 끌어다 놓다

​​​​- Processors가 추가함: getFile, PutDatabaseRecord, LogAttribute

2.3 Config getFile

이 프로세서를 구성하여 원하는 디렉토리에서 CSV 파일을 읽도록 합니다. 프로세서를 두 번 클릭합니다.

  1. 파일의 위지 (Input Directory): 파일을 가져올 디렉토리 경로를 지정합니다.
  2. 파일 필터 (File Filter): 파일 이름 패턴 또는 정규 표현식을 사용하여 파일을 필터링하는 기능을 제공합니다.
  3. 소스 파일 유지 (Keep Source file): 파일을 가져온 후에 소스 파일을 유지할지 삭제할지 여부를 결정합니다.

2.4 Config PutDatabaseRecord

  • Record Reader: 들어오는 데이터 레코드를 읽고 데이테베이스에 쓰기 위해 사용되는 구성 요소입니다. 특정 형식: CSV,JSON,Avro 등.
  • Database Type: 데이터를 쓸 데이터베이스의 유형을 지정하는 속성입니다. PostgresSQL, MySQL, Oracel, Microsoft SQL Server, Apache Cassandra, MongoDB.
  • Statement Type: 데이터를 어떻게 처리할지를 선택합니다. Insert, Update, Delete.
  • Database Connection Pooling Service: 테이터베이스 연결에 사용할 커넥션 풀링 서비스를 선택합니다.
  • Table Name: 테이터를 삽입할 데이터 레코드의 개수를 지정합니다

  • Click 1

  • jar file (Postgres Driver)를 Docker에 북사
docker cp ./postgresql-42.2.23.jar nifi:/opt/nifi/nifi-current/lib

docker exec -it postgresql psql postgres -U postgres
  • Database Connection URL: 데이터베이스에 연결하기 위한 URL을 지정합니다.
  • Database Driver Class Name: 사용할 데이터베이스 드라이버의 클래스 이름을 지정합니다.
  • Database Driver Location: 사용할 데이터베이스 드라이버의 JAR 팔일의 위치.
  • Database User: 데이터베이스에 연결할 사용자 이름을 지정함.
  • Password: 데이터베이스 사용자의 비밀헌호를 입력합니다.
jdbc:postgresql://postgres:5432/postgres
org.postgresql.Driver
/opt/nifi/nifi-current/lib

  • Enable "Active"

Postgresql에 Table를 생성

CREATE TABLE packages (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    items VARCHAR(50),
    detail VARCHAR(100)
);

Workflow를 시작함

  • click to start the workflow