Apache NiFi는 소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 오픈 소스 워크플로 관리 소프트웨어입니다. ETL 데이터 파이프라인을 생성할 수 있으며, 300개가 넘는 데이터 프로세서가 함께 제공됩니다. 이 단계별 튜토리얼에서는 Apache NiFi를 ClickHouse의 소스와 대상으로 모두 연결하고, 샘플 데이터셋을 로드하는 방법을 설명합니다.
연결 정보 준비하기
HTTP(S)로 ClickHouse에 연결하려면 다음 정보가 필요합니다.
| 매개변수 | 설명 |
|---|---|
HOST and PORT |
일반적으로 TLS를 사용하는 경우 포트는 8443, TLS를 사용하지 않는 경우 8123입니다. |
DATABASE NAME |
기본적으로 default라는 이름의 데이터베이스가 제공되며, 연결할 데이터베이스 이름을 사용하십시오. |
USERNAME and PASSWORD |
기본 사용자 이름은 default입니다. 사용 사례에 맞는 사용자 이름을 사용하십시오. |
ClickHouse Cloud 서비스의 연결 정보는 ClickHouse Cloud 콘솔에서 확인할 수 있습니다. 서비스를 선택한 다음 Connect를 클릭하십시오.

HTTPS를 선택하십시오. 연결 정보가 예시 curl 명령으로 표시됩니다.

자가 관리형 ClickHouse를 사용하는 경우 연결 정보는 ClickHouse 관리자가 설정합니다.
Apache NiFi 다운로드 및 실행
새로 설정하는 경우 https://nifi.apache.org/download.html에서 바이너리를 다운로드한 후 ./bin/nifi.sh start를 실행해 시작하십시오.
ClickHouse JDBC 드라이버 다운로드
- GitHub의 ClickHouse JDBC 드라이버 릴리스 페이지로 이동하여 최신 JDBC 릴리스 버전을 확인하십시오
- 해당 릴리스에서 "Show all xx assets"를 클릭한 다음, 예를 들어
clickhouse-jdbc-0.5.0-all.jar처럼 "shaded" 또는 "all" 키워드가 포함된 JAR 파일을 찾으십시오 - Apache NiFi에서 접근할 수 있는 폴더에 JAR 파일을 두고 절대 경로를 기록해 두십시오
[object Object]
-
Apache NiFi에서 Controller Service를 구성하려면 "gear" 버튼을 클릭해 NiFi Flow Configuration 페이지로 이동하세요

-
Controller Services 탭을 선택한 뒤, 오른쪽 상단의
+버튼을 클릭해 새 Controller Service를 추가하세요
-
DBCPConnectionPool을 검색한 다음 "Add" 버튼을 클릭하세요
-
새로 추가한
DBCPConnectionPool은 기본적으로 Invalid 상태입니다. 구성을 시작하려면 "gear" 버튼을 클릭하세요
-
"Properties" 섹션에서 다음 값을 입력하세요
| Property | Value | Remark |
|---|---|---|
| Database Connection URL | jdbchttps://HOSTNAME:8443/default?ssl=truetrue | connection URL의 HOSTNAME을 적절히 바꾸세요 |
| Database Driver Class Name | com.clickhouse.jdbc.ClickHouseDriver | |
| Database Driver Locations | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar | ClickHouse JDBC 드라이버 JAR 파일의 절대 경로 |
| Database User | default | ClickHouse 사용자 이름 |
| Password | password | ClickHouse 비밀번호 |
-
"Settings" 섹션에서 나중에 쉽게 식별할 수 있도록 Controller Service 이름을 "ClickHouse JDBC"로 변경하세요

-
"lightning" 버튼을 클릭한 다음 "Enable" 버튼을 클릭해
DBCPConnectionPoolController Service를 활성화하세요

-
Controller Services 탭에서 해당 Controller Service가 활성화되었는지 확인하세요

[object Object]
-
적절한 업스트림 및 다운스트림 프로세서와 함께
ExecuteSQL프로세서를 추가합니다
-
ExecuteSQL프로세서의 "Properties" 섹션에서 다음 값을 입력합니다속성 값 비고 Database Connection Pooling Service ClickHouse JDBC ClickHouse용으로 구성된 Controller Service를 선택합니다 SQL select query SELECT * FROM system.metrics 여기에 쿼리를 입력합니다 -
ExecuteSQL프로세서를 시작합니다
-
쿼리가 성공적으로 처리되었는지 확인하려면 출력 큐에 있는
FlowFile중 하나를 확인합니다
-
출력
FlowFile의 결과를 보려면 보기를 "formatted"로 전환합니다
[object Object]
-
한 번의 삽입으로 여러 행을 쓰려면 먼저 여러 레코드를 하나의 레코드로 머지해야 합니다. 이는
MergeRecord프로세서를 사용해 수행할 수 있습니다. -
MergeRecord프로세서의 "속성" 섹션에서 다음 값을 입력합니다.속성 값 비고 Record Reader JSONTreeReader적절한 record reader를 선택합니다. Record Writer JSONReadSetWriter적절한 record writer를 선택합니다. Minimum Number of Records 1000 최소 개수의 행이 머지되어 하나의 레코드가 되도록 이 값을 더 큰 수로 변경합니다. 기본값은 1행입니다. Maximum Number of Records 10000 "Minimum Number of Records"보다 큰 수로 설정합니다. 기본값은 1,000행입니다. -
여러 레코드가 하나로 머지되었는지 확인하려면
MergeRecord프로세서의 입력과 출력을 확인합니다. 출력은 여러 입력 레코드로 이루어진 배열이라는 점에 유의하십시오.입력

출력

-
PutDatabaseRecord프로세서의 "속성" 섹션에서 다음 값을 입력합니다.속성 값 비고 Record Reader JSONTreeReader적절한 record reader를 선택합니다. Database Type Generic 기본값으로 둡니다. Statement Type INSERT Database Connection Pooling Service ClickHouse JDBC ClickHouse controller service를 선택합니다. Table Name tbl 여기에 테이블 이름을 입력합니다. Translate Field Names false 삽입되는 필드 이름이 컬럼 이름과 일치하도록 "false"로 설정합니다. Maximum Batch Size 1000 삽입 1회당 최대 행 수입니다. 이 값은 MergeRecord프로세서의 "Minimum Number of Records" 값보다 낮아서는 안 됩니다. -
각 삽입에 여러 행이 포함되는지 확인하려면 테이블의 행 수가
MergeRecord에서 정의한 "Minimum Number of Records" 값 이상씩 증가하는지 확인합니다.
-
축하합니다. Apache NiFi를 사용해 데이터를 ClickHouse에 성공적으로 로드했습니다!