Siphon을 활용한 ClickHouse 테이블 설계
Siphon을 활용한 ClickHouse 테이블 설계에 대해 설명합니다.
이 문서는 PostgreSQL 변경 데이터 캡처(CDC) 도구인 Siphon 을 활용하여 ClickHouse에서 PostgreSQL 데이터를 사용하는 분석 기능을 설계하는 방법에 대한 개요를 제공합니다. 용어집 # Organization : 프로젝트와 그룹을 위한 상위 컨테이너입니다. Namespace: 그룹, 서브그룹, 사용자 네임스페이스 또는 프로젝트 네임스페이스(프로젝트의 섀도우 레코드로 동작)를 가리킬 수 있습니다. Project: GitLab 프로젝트를 나타냅니다. 아키텍처 개요 # Siphon은 확장성과 안정성을 보장하기 위해 발행-구독 모델을 사용하여 PostgreSQL에서 ClickHouse로 데이터를 이동합니다. Siphon Producer: PostgreSQL 논리 복제 슬롯을 모니터링하고 행 수준 변경사항( INSERT , UPDATE , DELETE )을 NATS 에 발행합니다. NATS: Producer와 Consumer를 분리하는 메시지 브로커 역할을 합니다. Siphon Consumer: NATS 토픽을 구독하고 ReplacingMergeTree 엔진을 사용하여 수신 데이터를 ClickHouse 에 씁니다. 요구 사항 # 이 가이드는 다음 GitLab 구성 요소가 실행 중이라고 가정합니다: wal_level=logical 구성의 PostgreSQL. ClickHouse NATS Siphon Producer 및 Siphon Consumer (ClickHouse용) Note 현재 상태: Siphon은 main 데이터베이스에 있는 데이터베이스 테이블에 대해 GDK를 통한 로컬 개발에서만 사용 가능합니다. 이 가이드 를 따라 GDK로 이러한 종속성을 설정해야 합니다. #f_siphon Slack 채널에서 도움을 받거나 기술적인 문제를 논의할 수 있습니다. 테이블 복제 예시 # Siphon을 사용하면 전체 PostgreSQL 테이블을 ClickHouse로 복제할 수 있습니다. 이 프로세스는 최소 두 단계가 필요합니다: ClickHouse 테이블 생성: Siphon이 데이터를 복제할 ClickHouse의 대상 테이블을 생성합니다. 구성 변경: Siphon이 테이블을 인식할 수 있도록 Siphon 구성을 업데이트합니다. 이 예시에서는 labels 테이블을 ClickHouse로 복제합니다. ClickHouse 테이블 생성 # Rake 태스크를 사용하여 ClickHouse 데이터베이스 마이그레이션을 생성할 수 있습니다. 이렇게 하면 지정된 테이블의 PostgreSQL 스키마를 Siphon 호환 ClickHouse 테이블 정의로 변환합니다. bundle exec rails generate gitlab:click_house:siphon labels 생성된 CREATE TABLE 문: CREATE TABLE IF NOT EXISTS siphon_labels ( id Int64, title Nullable(String), color Nullable(String), project_id Nullable(Int64), created_at
