NiFi 2.0 은 1.x 에서 사용 중지로 표시해 두었던 기능을 실제로 제거한 주요 버전이다. 1.x 플로우를 그대로 올리면 제거된 구성 요소가 ghost component 로 올라와 시작되지 않는다. 옮기기 전에 다음 항목을 먼저 확인한다.
| 1.x | 2.x 대체 |
|---|---|
| Template (XML) | 제거됨. 프로세스 그룹을 flow definition(JSON) 으로 내려받고 올린다. 버전 관리는 NiFi Registry |
| Variables (프로세스 그룹 변수) | Parameter Context |
ConsumeKafka_2_6 · PublishKafka_2_6 등 버전 접미사 프로세서 |
ConsumeKafka · PublishKafka + Kafka3ConnectionService 컨트롤러 서비스 |
| Kerberos Credentials Service | Kerberos User Service (KerberosKeytabUserService · KerberosPasswordUserService) |
ExecuteScript 의 Jython(python) · JRuby · Lua 엔진 |
Groovy 만 남았다. 파이썬은 2.x 의 Python 확장 API 로 프로세서를 작성한다 |
| HBase 1.x · Hive 1.x 계열 NAR | 제거됨 |
nifi.properties 의 일부 레거시 보안 키 |
단일 사용자 인증 · Keystore 기반 구성으로 정리됨 |
Java 도 함께 바뀐다. NiFi 2.x 는 Java 21 이상을 요구하며 Java 8 · 11 로는 기동하지 않는다.
NiFi 2.x 에는 Template 기능 자체가 없다. 메뉴와 아이콘이 없는 것이 정상 동작이며 설정으로 되살릴 수 없다. 1.x 에서 쓰던 템플릿 XML 은 2.x 에서 읽지 못하므로, 1.x 가 아직 살아 있는 동안 템플릿을 인스턴스화해 캔버스에 올리고 프로세스 그룹을 flow definition 으로 내보내야 한다.
curl -X GET 'http://nifi.example.com:8080/nifi-api/process-groups/<pg-id>/download?includeReferencedServices=true' -o flow.json
반대로 아이콘만 깨져 보이고 메뉴는 있는 경우는 UI 정적 자원을 못 받아 온 것이다. 리버스 프록시 뒤에 둘 때 nifi.web.proxy.host 와 nifi.web.proxy.context.path 가 실제 진입 경로와 어긋나거나, 프록시가 Content-Security-Policy 헤더를 덧씌워 폰트·SVG 를 막으면 이렇게 된다. 브라우저 개발자 도구의 콘솔과 네트워크 탭에서 404 와 CSP 위반 메시지를 먼저 확인한다.
기본 배포본에 없는 확장 기능은 NAR 을 따로 받아 extensions 디렉터리에 둔다. 아파치가 배포하는 NAR 은 Maven Central 의 org.apache.nifi 그룹에서 nifi-<이름>-nar 아티팩트로 받을 수 있고, 배포본에서 빠진 것도 같은 좌표에 올라와 있는 경우가 많다.
curl -L -o /opt/nifi/extensions/nifi-example-nar-2.5.0.nar \
'https://repo1.maven.org/maven2/org/apache/nifi/nifi-example-nar/2.5.0/nifi-example-nar-2.5.0.nar'
nifi.nar.library.autoload.directory 가 가리키는 디렉터리에 NAR 을 넣으면 재기동 없이 올라온다. 다만 버전이 NiFi 본체와 맞아야 하며, 다른 버전의 NAR 은 클래스 충돌을 일으킨다. 아파치 외 제3자가 배포하는 NAR 은 출처와 버전 호환을 직접 확인해야 한다 (확인 필요).