Openflow에서 Python 확장 프로그램을 사용하기 위한 지침¶
이 항목에서는 Openflow에서 Python 확장 프로그램을 사용할 때의 제한 사항, 지원되는 구성, 모범 사례에 대해 설명합니다.
Openflow의 Python 프로세서는 네이티브 Java 프로세서와 리소스 특성이 근본적으로 다른 NiFi의 Py4J 브리지 아키텍처를 사용합니다. Python 프로세서는 JVM 외부의 외부 OS로 실행되므로 추가 시스템 메모리를 사용하고, NiFi의 내부 리소스 관리에 의해 제어되지 않으며, 가시성이 제한적입니다. 이러한 차이점은 런타임 크기 조정, 용량 계획 및 모니터링에 영향을 줍니다.
아키텍처의 차이점¶
Python 프로세서는 JVM 내부가 아닌 외부 OS로 실행됩니다. 이 아키텍처는 리소스 할당, 모니터링, 관리 방식에 영향을 줍니다.
프로세서 유형 |
Java 프로세서 |
Python 프로세서 |
|---|---|---|
런타임 환경 |
JVM 내부 스레드 |
외부 OS 프로세스 |
메모리 관리 |
JVM 힙 내에서 관리됨 |
별도의 프로세스 메모리 |
수명 주기 |
NiFi 제어 |
외부 프로세스 수명 주기 |
모니터링 |
전체 NiFi 가시성 |
제한된 가시성 |
런타임 크기 제약 조건¶
Python 확장 프로그램은 Medium 및 Large 런타임에서만 사용할 수 있습니다. Small 런타임은 CPU 및 메모리 제약 조건으로 인해 Python 프로세서를 지원하지 않습니다. Snowflake Openflow는 Small 런타임에서 Python 확장 프로그램을 차단합니다.
런타임 크기 |
Python 지원 |
참고 |
|---|---|---|
Small |
지원되지 않음 |
Python 프로세서는 CPU 및 메모리 제약 조건으로 인해 Small 런타임에서 차단됩니다. |
Medium |
제한적(최대 2개의 Python 프로세서) |
이 제한은 커넥터 또는 프로세스 그룹이 아닌 전체 런타임에 대한 제한입니다. 이 제한은 현재 권장 사항이며 향후 Openflow 런타임에 적용되는 최대값입니다. |
Large |
제한적(최대 4개의 Python 프로세서) |
이 제한은 커넥터 또는 프로세스 그룹이 아닌 전체 런타임에 대한 제한입니다. 이 제한은 현재 권장 사항이며 향후 Openflow 런타임에 적용되는 최대값입니다. |
모범 사례¶
Openflow에서 Python 프로세서로 작업하려면 다음 지침을 따릅니다.
CPU 사용량이 많은 작업의 경우 Java를 사용합니다. Java는 JVM 내에서 보다 효율적인 스레드 관리를 제공합니다. Groovy 스크립팅은 Java 기반 대안입니다.
Medium 또는 Large 런타임을 사용합니다. Python은 Small 런타임에서 사용할 수 없습니다.
Python 프로세서 수를 제한합니다. 런타임 크기당 문서화된 제한을 준수합니다.
리소스 사용량을 모니터링합니다. 메모리 압력 및 CPU 경합을 감시합니다.
업그레이드를 계획합니다. 사용자 지정 Python 프로세서는 런타임 업그레이드 후 가상 환경(venv)을 재설정해야 할 수 있습니다. 자세한 내용은 :ref:`런타임 업그레이드 후 Python 프로세서 복원 <label-openflow_python_ext_restore>`을 참조하세요.
단일 스레드 Python 프로세서를 사용합니다. Openflow는 하위 프로세스를 생성하거나 다중 스레딩을 사용하는 Python 프로세서를 지원하지 않습니다.
Python 프로세서 사용에 대한 제한 사항¶
Openflow에서 Python 프로세서를 사용할 때 다음 제한 사항이 적용됩니다.
- 런타임 제약 조건
Python 확장 프로그램은 Medium 또는 Large 런타임에서만 사용할 수 있습니다. Python 확장 프로그램은 Small 런타임과 함께 사용할 수 없습니다. 이는 플랫폼에 의해 비활성화됩니다.
- 메모리 오버헤드
각 Python 프로세서는 자체 메모리 사용 공간이 있는 외부 OS 프로세스를 생성합니다. Python 프로세스는 리소스에 대해 JVM과 집단적으로 경쟁할 수 있습니다
- NiFi 리소스 관리 없음
Python 프로세서는 NiFi의 내부 리소스 관리에 의해 관찰되거나 제한되지 않습니다. CPU 사용량이 많은 Python 작업은 전체 서버 CPU 시간의 약 50%를 사용할 수 있습니다.
- 갭 모니터링하기
플랫폼에는 외부 Python 프로세스 상태 및 리소스 사용에 대한 가시성이 부족합니다.
- 업그레이드 처리
런타임 업그레이드 후 가상 환경이 다시 생성될 때까지 사용자 지정 Python 프로세서가 로드되지 않거나 예기치 않은 동작이 발생할 수 있습니다.
런타임 업그레이드 후 Python 프로세서 복원¶
런타임 업그레이드 후 Python 프로세서가 실패하면 다음을 수행합니다.
ProcessorDetails.version필드에서 프로세서 버전을 증분합니다.NiFi 아카이브(NAR) 바이너리를 다시 빌드하고 다시 업로드합니다. 그러면 Python 가상 환경 캐시가 재설정되도록 트리거됩니다.
캔버스에서 프로세서를 제거했다가 다시 추가합니다. 그러면 Py4J 브리지가 다시 초기화됩니다.