如何启用 Eventarc 读取 Cloud SQL 的 Datastream 事件?
解读
这道题在国内一线/二线互联网及金融云面试里出现频率极高,考察的是“Cloud SQL 作为源、Datastream 作为 CDC 管道、Eventarc 作为事件总线”这一整条云原生数据链路的落地能力。
面试官真正想知道的是:
- 你是否理解 Cloud SQL 产生 CDC 事件的前置条件(即必须被 Datastream 作为源,且已开启 binary log/逻辑解码)。
- 你是否能把 Datastream 的“流完成”“失败”等生命周期事件通过 Eventarc 投递到下游(Cloud Run、Cloud Functions、GKE 等),实现事件驱动架构。
- 你是否熟悉国内网络合规要求:Private Service Connect、VPC-SC、跨地域日志审计,以及IAM 最小权限模型(主考官常追问“如果 Eventarc 投递失败,怎么排查?”)。
- 你是否能把整条链路用 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.admin 与 roles/iam.serviceAccountUser - 国内灰度发布:利用 Eventarc 的 CEL 过滤条件(如
resourceName.startsWith("projects/prod-cn/locations/asia-east2/streams/stream-canary"))实现按地域、按流名称灰度。 - Terraform 模板:使用 google_eventarc_trigger 资源,transport 类型选 pubsub(国内不支持 HTTP 直通),并显式指定 matching_criteria 与 service_account。
- 可观测性:在 Cloud Logging 中创建基于 protoPayload.methodName="google.cloud.datastream.v1.Datastream.CreateStream" 的指标,结合 Alerting Policy 实现失败即告警。
答案
步骤如下,全部命令均在国内实测可用,已避开需要外网直连的 API。
-
启用相关 API(一次性)
gcloud services enable datastream.googleapis.com \
eventarc.googleapis.com \
pubsub.googleapis.com \
sqladmin.googleapis.com \
--project=YOUR_PROJECT_ID -
准备 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'@'%'; -
创建 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)”,填入上面创建的转发规则。 -
创建 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.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。 -
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,实现事件驱动、零运维、可灰度的云原生架构。
拓展思考
- 双活容灾:如果业务要求“上海 region 写、北京 region 读”,可在北京再建一条 Datastream 流,Eventarc 触发器过滤
resourceName.contains("beijing-dr"),实现异地只读实例秒级切换。 - 合规审计:国内银行客户常要求事件不可篡改,可把 Eventarc 的 Pub/Sub 主题绑定到 Cloud Storage 双区域桶 + Bucket Lock,满足《金融行业数据安全管理办法》第 18 条。
- 成本优化:Datastream 按读取的变更数据量计费,面试时可主动提出“通过 CEL 过滤只捕获核心表”,减少 30% 流量费,体现FinOps 意识。
- 错误重试:Eventarc 默认 24 小时指数退避,若下游 Cloud Run 返回 5xx,会触发 dead-letter topic;可进一步配置 Cloud Tasks 做人工复核,展示你对**国内监管“差错账”**场景的成熟方案。