파이프라인 요구 사항
- 소스 Pub/Sub subscription이 존재해야 합니다.
- subscription에 게시되는 메시지는 유효한 JSON이어야 합니다.
- 대상 ClickHouse 테이블(table)이 존재해야 하며, 해당 컬럼 이름은 JSON 페이로드(payload)의 필드 이름과 일치해야 합니다.
- Dataflow worker 머신에서 ClickHouse 호스트에 접근할 수 있어야 합니다.
- 데드 레터 대상(
clickHouseDeadLetterTable또는deadLetterTopic)을 최소 하나 이상 지정해야 합니다. 둘 다 지정하면 실패한 메시지가 두 대상으로 동시에 라우팅됩니다. clickHouseDeadLetterTable이 설정된 경우, 데드 레터 테이블은 데드 레터 처리에 나와 있는 스키마(schema)로 ClickHouse에 미리 존재해야 합니다.deadLetterTopic이 설정된 경우, Pub/Sub 토픽이 미리 존재해야 합니다.
Template 매개변수
모든
ClickHouseIO 매개변수의 기본값은 ClickHouseIO Apache Beam Connector에서 확인할 수 있습니다.메시지 포맷 및 스키마 매핑
- 대상 ClickHouse 테이블의 스키마를 가져옵니다.
- 해당 ClickHouse 스키마를 바탕으로 Beam
Row스키마를 생성합니다. - 수신되는 각 Pub/Sub 메시지에 대해 JSON payload를 파싱하고, ClickHouse 스키마에 정의된 이름의 필드를 읽어 행을 구성합니다.
타입 변환
배칭 및 윈도우 처리
이 값을 조정하면 지연 시간과 삽입 효율성 사이에서 균형을 맞출 수 있습니다. 더 작은 윈도우는 종단 간 지연 시간을 줄이고, 더 큰 윈도우는 수는 적지만 크기는 더 큰
INSERT 배치를 생성합니다.
데드 레터 처리
clickHouseDeadLetterTable 또는 deadLetterTopic 중 최소 하나를 반드시 지정해야 합니다. 둘 다 설정하면 실패한 메시지가 두 곳 모두로 전송됩니다.
ClickHouse 데드 레터 테이블
clickHouseDeadLetterTable이 설정된 경우, 데드 레터 테이블은 다음과 같은 고정 스키마로 미리 생성되어 있어야 합니다:
단일 노드 배포를 위한 최소 정의:
배포 환경에 맞게 엔진과
ORDER BY 절을 조정하세요 — 복제된 테이블에는 ReplicatedMergeTree를 사용하고, 분산 환경에서는 ON CLUSTER를 추가하며, 필요에 따라 파티셔닝이나 TTL을 조정하십시오.Pub/Sub 데드 레터 토픽
deadLetterTopic이 설정되면, 실패한 각 메시지가 다음 정보를 포함해 해당 토픽으로 다시 게시됩니다.
- Payload: 원본 메시지 바이트입니다.
- 속성
errorMessage: 실패 시점에 포착된 예외 메시지입니다. - 속성
failedAt: 해당 행이 실패한 처리 시점의 타임스탬프입니다.
Template 실행
이 문서, 특히 위 섹션을 반드시 검토하여 Template의 구성 요구 사항과 사전 요구 사항을 충분히 이해하십시오.
-
CREATE JOB FROM TEMPLATE버튼을 누르십시오. - Template 양식이 열리면 작업 이름을 입력하고 원하는 리전을 선택합니다.
-
Dataflow Template입력란에ClickHouse또는Pub/Sub를 입력한 다음Pub/Sub to ClickHouseTemplate을 선택합니다. -
선택하면 양식이 확장됩니다. 다음을 입력합니다.
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>형식의 Pub/Sub 입력 subscription- ClickHouse endpoint URL — ClickHouse Cloud의 경우
https://<HOST>:8443사용 - ClickHouse 데이터베이스, 대상 테이블, 사용자 이름 및 비밀번호
- 최소 하나의 데드 레터 대상: ClickHouse 테이블 또는 Pub/Sub 토픽(또는 둘 다)
-
필요에 따라 Template parameters 섹션에 설명된 대로 배칭(
windowSeconds,batchRowCount) 및ClickHouseIO튜닝 매개변수를 사용자 지정합니다.
작업 모니터링
PubSubToClickHouse 네임스페이스 아래에 다음과 같은 사용자 지정 메트릭을 내보내며, Dataflow 작업 페이지에서 확인할 수 있습니다:
문제 해결
메모리 제한(총량) 초과 오류(코드 241)
- 인스턴스 리소스를 늘리세요: 데이터 처리 부하를 감당할 수 있도록 메모리가 더 많은 더 큰 인스턴스로 ClickHouse 서버를 업그레이드하십시오.
- 배치 크기를 줄이세요: Dataflow 작업 구성에서
batchRowCount(및/또는maxInsertBlockSize)를 줄여 더 작은 데이터 청크를 ClickHouse로 전송하면 배치당 메모리 사용량을 줄일 수 있습니다.
모든 메시지가 데드 레터 대상으로 전송됩니다
- JSON 필드 이름이 ClickHouse 컬럼 이름과 정확히 일치하지 않습니다(일치는 대소문자를 구분합니다).
- JSON 값을 컬럼 유형으로 변환할 수 없습니다(예:
DateTime컬럼에 ISO-8601 형식이 아닌 문자열이 있는 경우). - 파이프라인이 시작된 이후 대상 테이블 스키마가 변경되었습니다 — 스키마는 시작 시 한 번만 가져옵니다. 스키마 변경 사항을 적용한 후 작업을 다시 시작하십시오.
error_message 및 stack_trace 컬럼(또는 Pub/Sub 데드 레터 메시지의 errorMessage 속성)을 확인하십시오.
파이프라인이 시작되지만 ClickHouse에 행이 도착하지 않습니다
- subscription이 메시지를 수신하고 있는지 확인하십시오 — Dataflow 작업 페이지에서
messages-received메트릭을 확인하십시오. - 시간 기반 모드(
windowSeconds만 해당)에서는 윈도우 경계에서만 행이 플러시됩니다. 플러시가 발생하는지 확인하려면windowSeconds값을 낮추십시오. - Dataflow 작업자와 ClickHouse 엔드포인트 간 네트워크 연결이 가능한지 확인하십시오(방화벽, VPC peering 또는 Private Service Connect).
Template 소스 코드
GoogleCloudPlatform/DataflowTemplates— 원본 Google Cloud Platform 리포지토리입니다.ClickHouse/DataflowTemplates— ClickHouse에서 포크한 리포지토리입니다.