我的团队在 2024 年初和年中迁移到 Airbyte,我们开始使用 SQL Server 的 CDC 功能。
但是,其中一项作业因 Java 堆空间错误再次开始失败。
CDC _CT
桌子上有大约。调查时有 91M 行,日志文件在数据库上的保留期限为 3 天。
需要注意的重要一点是,该作业仅包含一个表,每天运行多次同步约 200 万行,运行良好。
但是,每月一次,当月末流程启动并在桌面上发起重大更改时,工作就会开始失败。
这是我们当前的
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
11 月 5 日提出的相关 GitHub 问题 - https://github.com/airbytehq/airbyte/discussions/48348?sort=new
这似乎与 SQL Server CDC 本身没有任何关系,更多的是 JVM 堆空间不足以容纳 Airbyte Worker 尝试处理的数据量。
我没有使用过 Airbyte,但堆空间是 JVM 级别的可配置选项。显示的values.yml 文件将JVM 堆空间的大小设置为等于可用RAM 的80% (-XX:MaxRAMPercentage=80.0)。
我猜测这意味着 JVM 可以访问为工作容器配置的 80% 的内存,如果我了解的话,配置文件可能只有 1Gi 的 80%(即 858MiB)。