image: repository: paasup/flink-cdc-pipeline tag: 3.5.0-flink1.20-r1 pullPolicy: Always flinkVersion: v1_20 serviceAccount: create: true name: "" # defaults to fullname (release name) when empty rbac: create: true ingress: enabled: false host: "flink-cdc-session.example.org" className: "" annotations: {} jobManager: replicas: 1 memory: 1024m cpu: 0.5 taskManager: replicas: 3 memory: 2048m cpu: 1 taskSlots: 2 # ────────────────────────────────────────────────────────────── # CheckpointStorage: 체크포인트/세이브포인트 저장 위치 + 자격증명 (WHERE) # storageType에 해당하는 하위 블록(gcs 또는 s3)만 설정 # ────────────────────────────────────────────────────────────── checkpointStorage: storageType: s3 # gcs | s3 checkpointDir: s3://my-bucket/flink/checkpoints savepointDir: s3://my-bucket/flink/savepoints # S3 (storageType: s3 일 때 설정) # endpoint 비어있음 → AWS S3 / MinIO 등: https://minio.example.org # accessKeyId/secretAccessKey 모두 비어있음 → IAM Role / IRSA 사용 # existingSecret 지정 시 → 기존 Secret에서 자격증명 참조 (accessKeyId 값보다 우선) s3: endpoint: "" pathStyleAccess: "false" accessKeyId: "" secretAccessKey: "" existingSecret: "" accessKeyIdKey: access-key-id secretAccessKeyKey: secret-access-key # GCS (storageType: gcs 일 때 설정) gcs: credentialSecret: gcs-key credentialPath: /opt/flink/gcs-key/key.json create: false # create: true 시 필요: base64 인코딩된 key.json 파일 내용 # base64json: "" # 체크포인트 동작 설정 (HOW) checkpoint: interval: 60s mode: EXACTLY_ONCE # Secret 관리 # create: false → 기존 Secret 참조 (kubectl create secret으로 별도 생성 필요) # create: true → 차트가 Secret 리소스를 직접 생성 (base64 값 필수) truststore: # enabled: true → 외부 JKS를 사용. 싱크/소스 엔드포인트가 사설 CA 인증서를 사용할 때 필요. # enabled: false → 외부 JKS 미사용. 모든 엔드포인트가 공인 CA 인증서를 사용할 때 설정. # JVM 기본 cacerts로 TLS 검증을 수행하며, truststore Secret도 불필요. enabled: false password: changeit create: false secretName: "" # 기존 Secret 이름 지정 시 사용. 비어있으면 -flink-truststore 사용 # create: true 시 필요: base64 인코딩된 truststore.jks 파일 내용 # base64jks: "" # Flink CDC 글로벌 설정 (flink-cdc.yaml) flinkCdc: parallelism: 1 schemaChangeBehavior: EVOLVE # PostgreSQL 소스 postgres: hostname: postgres-postgresql.flink-test.svc.cluster.local port: 5432 username: flink_cdc password: password slotName: flink_cdc_slot decodingPlugin: pgoutput tables: testdb.public.orders,testdb.public.users # 파이프라인 설정 pipeline: name: pg-to-iceberg-test parallelism: 2 checkpointInterval: 60s # Iceberg REST 카탈로그 싱크 sink: catalog: uri: https://lakekeeper.example.org/catalog warehouse: minio s3Endpoint: https://minio.example.org s3PathStyleAccess: "true" oauth2Uri: https://keycloak.example.org/realms/paasup/protocol/openid-connect/token credential: lakekeeper-admin:wMyE9WNn50DH8yycLXwLTmMmu66JU7GV scope: lakekeeper # 소스→싱크 테이블 라우팅 # source-table: PostgreSQL CDC emit 형식 (schema.table) # sink-table: Iceberg namespace.table 형식 route: - sourceTable: public.orders sinkTable: testdb_public.orders - sourceTable: public.users sinkTable: testdb_public.users # CDC 파이프라인 Job 제출 # enabled: false → Session Cluster만 배포 (Job 생략) # enabled: true → Session Cluster + Job 함께 배포 job: enabled: true name: submit-cdc restAddress: flink-cdc-session-rest restPort: 8081 pipelineFile: ./conf/pipeline.yaml