Flink Bigtable 커넥터
Apache Flink는 실시간으로 데이터를 조작할 수 있는 스트림 처리 프레임워크입니다. Bigtable 테이블이 있는 경우 Flink Bigtable 커넥터를 사용하여 지정된 데이터 소스의 데이터를 Bigtable로 스트리밍, 직렬화, 쓸 수 있습니다. 이 커넥터를 사용하면 Apache Flink Table API 또는 Datastream API를 사용하여 다음 작업을 할 수 있습니다.
- 파이프라인 만들기
- 데이터 소스의 값을 Bigtable 변형 항목으로 직렬화
- Bigtable 테이블에 항목 쓰기
이 문서에서는 Flink Bigtable 커넥터와 사용하기 전에 알아야 할 사항을 설명합니다. 이 문서를 읽기 전에 Apache Flink, Bigtable 스토리지 모델, Bigtable 쓰기를 숙지해야 합니다.
커넥터를 사용하려면 데이터 싱크로 사용할 기존 Bigtable 테이블이 있어야 합니다. 파이프라인을 시작하기 전에 테이블의 column family를 만들어야 합니다. column family는 쓰기 시에 만들 수 없습니다. 자세한 내용은 표 만들기 및 관리를 참고하세요.
커넥터는 GitHub에서 제공됩니다. 커넥터 설치에 관한 자세한 내용은 Flink Bigtable 커넥터 저장소를 참고하세요. 커넥터 사용 방법을 보여주는 코드 샘플은 flink-examples-gcp-bigtable 디렉터리를 참고하세요.
직렬화 프로그램
Flink 커넥터에는 데이터를 Bigtable 변형 항목으로 변환하는 데 사용할 수 있는 세 가지 기본 제공 직렬화기가 있습니다.
GenericRecordToRowMutationSerializer
: AVROGenericRecord
객체RowDataToRowMutationSerializer
: FlinkRowData
객체의 경우FunctionRowMutationSerializer
: 제공된 함수를 사용하는 맞춤 직렬화 로직
BaseRowMutationSerializer
에서 상속받는 자체 맞춤 직렬화 프로그램을 만들 수도 있습니다.
직렬화 모드
Flink 커넥터를 사용할 때는 두 가지 직렬화 모드 중 하나를 선택합니다. 모드는 소스 데이터가 Bigtable column family를 나타내기 위해 직렬화된 후 Bigtable 테이블에 작성되는 방식을 지정합니다. 한 모드 또는 다른 모드를 사용해야 합니다.
Column family 모드
column family 모드에서는 모든 데이터가 지정된 단일 column family에 기록됩니다. 중첩된 필드는 지원되지 않습니다.
중첩된 행 모드
중첩 행 모드에서 각 최상위 필드는 column family를 나타냅니다. 최상위 필드 (RowKeyField)의 값은 다른 필드입니다. 해당 필드의 값에는 Bigtable column family의 각 열에 대한 행 객체가 있습니다. 중첩된 행 모드에서는 최상위 필드를 제외한 모든 필드가 행 객체여야 합니다. 이중으로 중첩된 행은 지원되지 않습니다.
단 한 번 처리
Apache Flink에서 단 한 번은 스트림의 각 데이터 레코드가 정확히 한 번 처리되어 시스템 오류가 발생하더라도 중복 처리나 데이터 손실을 방지한다는 의미입니다.
Bigtable mutateRow
변형은 기본적으로 동일한 row key, column family, column, 타임스탬프, 값이 있는 쓰기 요청이 재시도되더라도 새 셀을 생성하지 않으므로 멱등성입니다. 즉, Bigtable을 Apache Flink 프레임워크의 데이터 싱크로 사용하는 경우 재시도 시 타임스탬프를 변경하지 않고 파이프라인의 나머지 부분도 정확히 한 번 요구사항을 충족하면 정확히 한 번 동작이 자동으로 적용됩니다.
정확히 한 번 처리 시맨틱스에 대한 자세한 내용은 Apache Flink의 엔드 투 엔드 정확히 한 번 처리 개요를 참고하세요.