Airbyte SQL Server CDC任务月终大变更时Java堆空间错误求助
问题:Airbyte SQL Server CDC月末批量变更时Java堆空间溢出
我们团队2024年初迁移至Airbyte,年中启用SQL Server的CDC(变更数据捕获)功能。日常单表每日多次同步约200万行数据正常,但每月月末批量变更后,任务因Java堆空间错误失败。排查发现CDC_CT表有约9100万行数据,数据库日志保留周期为3天。
当前values.yml配置如下:
global: edition: "community" jobs: resources: limits: cpu: 1000m memory: 12Gi ## e.g. 500m requests: cpu: 500m memory: 2Gi env_vars: HTTP_IDLE_TIMEOUT: 1800s DEBEZIUM_MAX_QUEUE_SIZE_IN_BYTES: 536870912 #LOG_LEVEL: DEBUG CDC_LOG_LEVEL: DEBUG #DEBEZIUM_LOG_LEVEL: DEBUG MSSQL_CDC_LOG_LEVEL: DEBUG JOB_MAIN_CONTAINER_MEMORY_REQUEST: 2Gi JOB_MAIN_CONTAINER_MEMORY_LIMIT: 15Gi NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_REQUEST: 2Gi NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_LIMIT: 8Gi JAVA_OPTS: "-XX:+ExitOnOutOfMemoryError -XX:MaxRAMPercentage=80.0 -XX:+UseG1GC" webapp: ingress: annotations: kubernetes.io/ingress.class: internal nginx.ingress.kubernetes.io/proxy-body-size: 16m nginx.ingress.kubernetes.io/proxy-send-timeout: 1800 nginx.ingress.kubernetes.io/proxy-read-timeout: 1800 airbyte-bootloader: resources: limits: cpu: 1000m memory: 5Gi ## e.g. 500m requests: cpu: 500m memory: 1Gi worker: enabled: true # -- Number of worker replicas replicaCount: 1 image: # -- The repository to use for the airbyte worker image. repository: airbyte/worker # -- the pull policy to use for the airbyte worker image pullPolicy: IfNotPresent ## worker resource requests and limits ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ ## We usually recommend not to specify default resources and to leave this as a conscious ## choice for the user. This also increases chances charts run on environments with little ## resources, such as Minikube. If you do want to specify resources, uncomment the following ## lines, adjust them as necessary, and remove the curly braces after 'resources:'. resources: #! -- The resources limits for the worker container limits: memory: 5Gi cpu: 500m # -- The requested resources for the worker container requests: memory: 1Gi cpu: 250m
解决方案建议
1. 优化CDC数据清理策略
- 缩短CDC日志保留周期:当前日志保留3天,月末批量变更后CDC_CT表堆积9100万行,说明日志清理不及时。建议调整SQL Server的CDC清理作业,将保留周期缩短至1天,或设置基于时间的自动清理规则,避免大量历史CDC数据堆积。
- 手动清理历史CDC数据:在月末批量变更前,手动清理CDC_CT表中已同步完成的历史数据,减少同步时需要扫描的数据量。
2. 调整Airbyte内存配置
- 增大同步作业内存限制:当前
JOB_MAIN_CONTAINER_MEMORY_LIMIT为15Gi,月末批量同步时可临时调高至20Gi,同时保持JAVA_OPTS中的MaxRAMPercentage=80.0,让堆内存占容器内存的80%。 - 调小Debezium队列大小:
DEBEZIUM_MAX_QUEUE_SIZE_IN_BYTES当前为512Mi,可适当调小至256Mi,减少内存占用,避免队列堆积过多未处理的变更事件。
3. 优化同步任务配置
- 拆分同步任务:将单表同步拆分为按时间范围分批次同步,或按主键范围分片拆分任务,避免一次性加载大量CDC数据到内存。
- 临时提高同步频率:月末批量变更后,临时增加同步频率,让系统分批处理变更数据,而非一次性处理全部9100万行。
4. 调整Worker资源配置
当前Worker的内存限制为5Gi,可适当调高至8Gi,确保Worker有足够内存处理大规模同步任务的调度和数据流转。
内容的提问来源于stack exchange,提问作者NBaliga
相关产品推荐
相关产品推荐

