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, timestamp, 값을 가진 쓰기 요청은 재시도해도 새 셀이 생성되지 않습니다. 즉, Bigtable을 Apache Flink 프레임워크의 데이터 싱크로 사용하면 재시도에서 타임스탬프를 변경하지 않고 나머지 파이프라인도 정확히 한 번 요구사항을 충족하는 한 정확히 한 번 동작이 자동으로 실행됩니다.
정확히 한 번 처리 시맨틱스에 관한 자세한 내용은 Apache Flink의 엔드 투 엔드 정확히 한 번 처리 개요를 참고하세요.