Dataflow 관리형 I/O

관리형 I/O를 사용하면 Dataflow에서 Apache Beam 파이프라인에 사용되는 특정 I/O 커넥터를 관리할 수 있습니다. 관리형 I/O를 사용하면 지원되는 소스 및 싱크와 통합되는 파이프라인을 간편하게 관리할 수 있습니다.

관리형 I/O는 다음 두 가지 구성요소로 구성됩니다.

  • I/O 커넥터 (소스 및 싱크)를 만들기 위한 공통 API를 제공하는 Apache Beam 변환입니다.

  • Apache Beam 버전과 별개로 I/O 커넥터를 업그레이드하는 기능을 포함하여 이러한 I/O 커넥터를 대신 관리하는 Dataflow 서비스입니다.

관리형 I/O의 이점은 다음과 같습니다.

  • 자동 업그레이드. Dataflow는 파이프라인의 관리형 I/O 커넥터를 자동으로 업그레이드합니다. 즉, 코드를 변경하지 않아도 파이프라인은 이러한 커넥터의 보안 수정, 성능 개선, 버그 수정을 수신합니다. 자세한 내용은 자동 업그레이드를 참고하세요.

  • Consistent API 기존에는 Apache Beam의 I/O 커넥터에 고유한 API가 있고 각 커넥터가 다른 방식으로 구성되었습니다. 관리형 I/O는 키-값 속성을 사용하는 단일 구성 API를 제공하므로 더 간단하고 일관된 파이프라인 코드가 생성됩니다. 자세한 내용은 Configuration API를 참고하세요.

요구사항

  • 다음 SDK는 관리형 I/O를 지원합니다.

    • Java용 Apache Beam SDK 버전 2.58.0 이상
    • Python용 Apache Beam SDK 버전 2.61.0 이상
  • 백엔드 서비스에는 Dataflow Runner v2가 필요합니다. Runner v2가 사용 설정되지 않은 경우 파이프라인은 계속 실행되지만 관리형 I/O 서비스의 이점을 얻지 못합니다.

자동 업그레이드

관리형 I/O 커넥터가 있는 Dataflow 파이프라인은 다음과 같이 안정적인 최신 버전의 커넥터를 자동으로 사용합니다.

  • 작업을 제출하면 Dataflow는 테스트를 거쳤으며 제대로 작동하는 최신 버전의 커넥터를 사용합니다.

  • 스트리밍 작업의 경우 Dataflow는 대체 작업을 실행할 때마다 업데이트를 확인하고 알려진 최신 버전을 자동으로 사용합니다. Dataflow는 대체 작업에서 코드를 변경하지 않더라도 이 검사를 실행합니다.

커넥터나 파이프라인의 Apache Beam 버전을 수동으로 업데이트할 필요가 없습니다.

다음 다이어그램은 업그레이드 프로세스를 보여줍니다. 사용자가 SDK 버전 X를 사용하여 Apache Beam 파이프라인을 만듭니다. 사용자가 작업을 제출하면 Dataflow는 관리형 I/O의 버전을 확인하고 버전 Y로 업그레이드합니다.

관리형 I/O 업그레이드 프로세스를 보여주는 다이어그램

업그레이드 프로세스로 인해 작업의 시작 시간이 약 2분 정도 늘어납니다. 관리형 I/O 작업의 상태를 확인하려면 'Managed Transform(s)' 문자열이 포함된 로그 항목을 찾습니다.

구성 API

관리형 I/O는 소스 및 싱크를 구성하는 일관된 API를 제공하는 턴키 Apache Beam 변환입니다.

관리형 I/O에서 지원하는 소스나 싱크를 만들려면 Java에서 Managed 클래스를 사용합니다. 인스턴스화할 소스 또는 싱크를 지정하고 다음과 같이 구성 매개변수 집합을 전달합니다.

Map config = ImmutableMap.<String, Object>builder()
    .put("config1", "abc")
    .put("config2", 1);

pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
    .getSinglePCollection();

구성 매개변수를 YAML 파일로 전달할 수도 있습니다. 전체 코드 예는 Apache Iceberg에서 읽기를 참고하세요.

동적 대상

일부 싱크의 경우 관리형 I/O 커넥터가 수신 레코드의 필드 값을 기반으로 대상을 동적으로 선택할 수 있습니다.

동적 대상을 사용하려면 대상에 템플릿 문자열을 제공합니다. 템플릿 문자열에는 중괄호 안에 필드 이름(예: "tables.{field1}")을 포함할 수 있습니다. 런타임 시 커넥터는 수신되는 각 레코드의 필드 값을 대체하여 해당 레코드의 대상을 결정합니다.

예를 들어 데이터에 airport라는 필드가 있다고 가정해 보겠습니다. 대상을 "flights.{airport}"로 설정할 수 있습니다. airport=SFO이면 레코드가 flights.SFO에 쓰여집니다. 중첩된 필드의 경우 점 표기법을 사용합니다. 예를 들면 {top.middle.nested}입니다.

필터링

특정 필드가 대상 테이블에 쓰여지기 전에 필터를 적용할 수 있습니다. 동적 대상을 지원하는 싱크의 경우 이 목적으로 drop, keep 또는 only 매개변수를 사용할 수 있습니다. 이러한 매개변수를 사용하면 메타데이터를 대상에 쓰지 않고도 입력 레코드에 대상 메타데이터를 포함할 수 있습니다.

특정 싱크에 이러한 매개변수 중 최대 1개를 설정할 수 있습니다.

구성 매개변수 데이터 유형 설명
drop 문자열 목록 대상에 쓰기 전에 삭제할 필드 이름 목록입니다.
keep 문자열 목록 대상에 쓸 때 유지할 필드 이름 목록입니다. 다른 필드는 삭제됩니다.
only 문자열 대상에 쓸 때 쓸 최상위 레코드로 사용할 필드의 이름입니다(하나만 사용). 다른 모든 필드는 삭제됩니다. 이 필드는 행 유형이어야 합니다.

지원되는 소스 및 싱크

관리형 I/O는 다음 소스와 싱크를 지원합니다.