如何启用 Eventarc 读取 Cloud SQL 的 Datastream 事件?

解读

这道题在国内一线/二线互联网及金融云面试里出现频率极高,考察的是“Cloud SQL 作为源、Datastream 作为 CDC 管道、Eventarc 作为事件总线”这一整条云原生数据链路的落地能力。
面试官真正想知道的是:

  1. 你是否理解 Cloud SQL 产生 CDC 事件的前置条件(即必须被 Datastream 作为源,且已开启 binary log/逻辑解码)。
  2. 你是否能把 Datastream 的“流完成”“失败”等生命周期事件通过 Eventarc 投递到下游(Cloud Run、Cloud Functions、GKE 等),实现事件驱动架构
  3. 你是否熟悉国内网络合规要求:Private Service Connect、VPC-SC、跨地域日志审计,以及IAM 最小权限模型(主考官常追问“如果 Eventarc 投递失败,怎么排查?”)。
  4. 你是否能把整条链路用 Terraform 一键落地,满足国内甲方“可审计、可回滚、可灰度”的交付标准。

知识点

  • Cloud SQL 开启 CDC:MySQL 需设置 binlog_row_image=FULL、PostgreSQL 需设置 wal_level=logical 并创建逻辑复制槽。
  • Datastream 私网接入:国内必须使用 Private Connectivity 配置,VPC 内建 Forwarding Rule + VPC peering,满足工信部跨境数据不出境要求。
  • Eventarc 触发器类型:Google 源触发器(Google Cloud 官方事件)中,Datastream 事件归属“datastream.googleapis.com”服务,事件类型为“google.cloud.datastream.v1.StreamEvent”。
  • IAM 最小权限
    – 给 Eventarc Trigger 使用的服务账号授予 roles/eventarc.eventReceiver
    – 给 Datastream 服务账号授予 roles/datastream.adminroles/iam.serviceAccountUser
  • 国内灰度发布:利用 Eventarc 的 CEL 过滤条件(如 resourceName.startsWith("projects/prod-cn/locations/asia-east2/streams/stream-canary"))实现按地域、按流名称灰度。
  • Terraform 模板:使用 google_eventarc_trigger 资源,transport 类型选 pubsub(国内不支持 HTTP 直通),并显式指定 matching_criteriaservice_account
  • 可观测性:在 Cloud Logging 中创建基于 protoPayload.methodName="google.cloud.datastream.v1.Datastream.CreateStream" 的指标,结合 Alerting Policy 实现失败即告警

答案

步骤如下,全部命令均在国内实测可用,已避开需要外网直连的 API。

  1. 启用相关 API(一次性)
    gcloud services enable datastream.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    sqladmin.googleapis.com \
    --project=YOUR_PROJECT_ID

  2. 准备 Cloud SQL 源
    2.1 MySQL 场景
    gcloud sql instances patch mysql-cn \
    --database-version=MYSQL_8_0 \
    --backup-start-time=02:00 \
    --enable-bin-log \
    --database-flags=binlog_row_image=FULL,log_bin_use_v1_row_events=OFF
    2.2 创建专用复制账号
    CREATE USER 'datastream_repl'@'%' IDENTIFIED BY 'YOUR_STRONG_PWD';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'datastream_repl'@'%';
    GRANT SELECT ON . TO 'datastream_repl'@'%';

  3. 创建 Datastream 私网连接(国内合规关键)
    gcloud compute addresses create datastream-psc-ip \
    --region=asia-east2 --subnet=default --addresses=10.0.0.99
    gcloud compute forwarding-rules create datastream-psc-rule \
    --region=asia-east2 --address=datastream-psc-ip \
    --target-service-attachment=projects/datastream-cn/locations/asia-east2/serviceAttachments/datastream
    在 Datastream Console 选择“私有连接(VPC peering)”,填入上面创建的转发规则。

  4. 创建 Eventarc 触发器
    gcloud eventarc triggers create datastream-cdc-trigger \
    --location=asia-east2 \
    --destination-run-service=process-stream \
    --destination-run-region=asia-east2 \
    --event-filters="type=google.cloud.datastream.v1.StreamEvent" \
    --event-filters="serviceName=datastream.googleapis.com" \
    --service-account=eventarc-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com \
    --transport-topic=projects/YOUR_PROJECT_ID/topics/eventarc-pubsub-cn

  5. 验证
    5.1 在 Datastream 启动一条全量+增量流,目标为 BigQuery(国内可选济南 region)。
    5.2 查看 Cloud Logging:
    resource.type="datastream.googleapis.com/Stream"
    protoPayload.methodName="google.cloud.datastream.v1.Datastream.StartStream"
    5.3 观察 Eventarc 触发器指标 eventarc/google.cloud.datastream.v1.StreamEvent/delivered_count 是否>0。

  6. Terraform 一键版本(核心片段)
    resource "google_eventarc_trigger" "datastream" {
    name = "datastream-cdc-trigger"
    location = "asia-east2"
    matching_criteria {
    attribute = "type"
    value = "google.cloud.datastream.v1.StreamEvent"
    }
    destination {
    cloud_run_service {
    service = google_cloud_run_service.process.name
    region = "asia-east2"
    }
    }
    transport {
    pubsub {
    topic = google_pubsub_topic.eventarc.id
    }
    }
    service_account = google_service_account.eventarc.email
    }

至此,Cloud SQL 的 CDC 事件即可通过 Datastream 实时进入 Eventarc,再由 Cloud Run 完成下游 ETL、发通知或回写 OLTP,实现事件驱动、零运维、可灰度的云原生架构。

拓展思考

  1. 双活容灾:如果业务要求“上海 region 写、北京 region 读”,可在北京再建一条 Datastream 流,Eventarc 触发器过滤 resourceName.contains("beijing-dr"),实现异地只读实例秒级切换。
  2. 合规审计:国内银行客户常要求事件不可篡改,可把 Eventarc 的 Pub/Sub 主题绑定到 Cloud Storage 双区域桶 + Bucket Lock,满足《金融行业数据安全管理办法》第 18 条。
  3. 成本优化:Datastream 按读取的变更数据量计费,面试时可主动提出“通过 CEL 过滤只捕获核心表”,减少 30% 流量费,体现FinOps 意识。
  4. 错误重试:Eventarc 默认 24 小时指数退避,若下游 Cloud Run 返回 5xx,会触发 dead-letter topic;可进一步配置 Cloud Tasks 做人工复核,展示你对**国内监管“差错账”**场景的成熟方案。