OpenFlow에서 Python 확장 사용 지침

OpenFlow에서 Python 확장 사용 지침

OpenFlow에서 Python 확장을 사용할 때의 제한 사항, 지원되는 구성, 모범 사례를 설명하는 주제예요.

출처: Snowflake 문서 — OpenFlow에서 Python 확장 사용 지침

본문

OpenFlow의 Python 프로세서는 NiFi의 Py4J 브리지 아키텍처를 사용하는데, 이는 네이티브 Java 프로세서와 근본적으로 다른 리소스 특성을 가져요. Python 프로세서는 JVM 밖의 외부 OS 프로세스로 실행되므로 추가 시스템 메모리를 소비하고, NiFi의 내부 리소스 관리 대상이 아니며, 관측 가능성(observability)도 제한적이에요. 이런 차이는 런타임 크기 측정, 용량 계획, 모니터링에 영향을 줘요.

아키텍처 차이 (Architecture differences)

Python 프로세서는 JVM 안이 아니라 외부 OS 프로세스로 실행돼요. 이 아키텍처는 리소스가 어떻게 할당되고, 모니터링되고, 관리되는지에 영향을 줘요.

프로세서 유형 Java 프로세서 Python 프로세서
런타임 환경 JVM 내부 스레드 외부 OS 프로세스
메모리 관리 JVM 힙 안에서 관리 별도의 프로세스 메모리
생명주기 NiFi가 제어 외부 프로세스 생명주기
모니터링 완전한 NiFi 관측 가능성 제한적인 가시성

런타임 크기 제약 (Runtime size constraints)

Python 확장은 Medium과 Large 런타임에서만 사용할 수 있어요. Small 런타임은 CPU와 메모리 제약 때문에 Python 프로세서를 지원하지 않아요. Snowflake OpenFlow는 Small 런타임에서 Python 확장을 차단해요.

런타임 크기 Python 지원 참고
Small 지원하지 않음 Small 런타임에서는 CPU와 메모리 제약 때문에 Python 프로세서가 차단돼요.
Medium 제한적 (최대 2개 Python 프로세서) 이 제한은 커넥터나 프로세스 그룹별이 아니라 런타임 전체에 적용돼요. 현재는 권장치이며, 향후 OpenFlow 런타임에서 강제 최대값이 될 예정이에요.
Large 제한적 (최대 4개 Python 프로세서) 이 제한은 커넥터나 프로세스 그룹별이 아니라 런타임 전체에 적용돼요. 현재는 권장치이며, 향후 OpenFlow 런타임에서 강제 최대값이 될 예정이에요.

모범 사례 (Best practices)

OpenFlow에서 Python 프로세서를 사용할 때는 다음 지침을 따라 주세요.

  • CPU 부하가 큰 작업에는 Java를 사용하세요. Java는 JVM 안에서 더 효율적인 스레드 관리를 제공해요. Groovy 스크립팅은 Java 기반 대안이에요.
  • Medium 또는 Large 런타임을 사용하세요. Python은 Small 런타임에서 사용할 수 없어요.
  • Python 프로세서 수를 제한하세요. 런타임 크기별 문서화된 제한 안에 머무르세요.
  • 리소스 사용량을 모니터링하세요. 메모리 압력과 CPU 경합을 주의해서 살펴보세요.
  • 업그레이드를 계획하세요. 커스텀 Python 프로세서는 런타임 업그레이드 후 가상 환경(venv) 재설정이 필요할 수 있어요. 자세한 내용은 런타임 업그레이드 후 Python 프로세서 복원을 참고하세요.
  • 단일 스레드 Python 프로세서를 사용하세요. OpenFlow는 Python 프로세서가 서브프로세스를 생성하거나 멀티스레딩을 사용하는 것을 지원하지 않아요.

Python 프로세서 사용 시 제한 사항 (Limitations on using Python processors)

OpenFlow에서 Python 프로세서를 사용할 때 다음 제한 사항이 적용돼요.

런타임 제약 (Runtime constraints) — Python 확장은 Medium 또는 Large 런타임에서만 사용할 수 있어요. Small 런타임에서는 사용할 수 없으며, 플랫폼이 비활성화해요.

메모리 오버헤드 (Memory overhead) — 각 Python 프로세서는 자체 메모리 공간을 가진 외부 OS 프로세스를 생성해요. Python 프로세스는 집합적으로 JVM과 리소스를 두고 경쟁할 수 있어요.

NiFi 리소스 관리 없음 (No NiFi resource management) — Python 프로세서는 NiFi의 내부 리소스 관리에 의해 관찰되거나 제한되지 않아요. CPU 부하가 큰 Python 연산은 전체 서버 CPU 시간의 약 50%를 소비할 수 있어요.

모니터링 공백 (Monitoring gaps) — 플랫폼은 외부 Python 프로세스의 상태와 리소스 소비에 대한 가시성이 없어요.

업그레이드 처리 (Upgrade handling) — 런타임 업그레이드 후에는 가상 환경이 다시 생성될 때까지 커스텀 Python 프로세서가 로드에 실패하거나 예기치 않은 동작을 보일 수 있어요.

런타임 업그레이드 후 Python 프로세서 복원 (Restore Python processors following runtime upgrades)

런타임 업그레이드 후 Python 프로세서가 실패하면 다음을 수행하세요.

  • ProcessorDetails.version 필드에서 프로세서 버전을 올려주세요.
  • NiFi Archive(NAR) 바이너리를 다시 빌드하고 다시 업로드하세요. 그러면 Python 가상 환경 캐시가 리셋돼요.
  • 캔버스에서 프로세서를 제거했다가 다시 추가하세요. 그러면 Py4J 브리지가 다시 초기화돼요.

더 알아보기 (Learn more)