在解决方案的相应场景中,PostgreSQL CDC Source Connector 会通过 WAL 日志实时读取 PostgreSQL 数据,进行数据同步。本文将详细介绍如何配置 PostgreSQL CDC Connector 的各项高级参数,来帮助您优化任务性能并规避常见问题。
job.reader.connections job.reader.connectionsList<ClusterInfo>当作业启动阶段报“无法建立连接/缺少连接信息/连接列表为空”等问题时,优先检查此参数是否被正确注入。
db_url 里建议显式设置 sslmode(例如 disable/require),避免环境差异导致握手失败。job.reader.connections 定义了连接器访问 PostgreSQL 的地址集合,通常由数据源接入自动注入。只要该信息缺失或不可达,CDC 作业就无法启动;调参更多是“确保连接正确和稳定”,而不是追求性能优化。
job.reader.user_name Stringjob.reader.user_name 是数据库连接必填项,一般由数据源接入注入;只需要保证账号权限与连通性即可。
job.reader.password Stringjob.reader.password 仅用于鉴权,正确性与安全性优先,通常不参与性能调优。
job.reader.db_name String.reader.db_name 决定了连接器连接到哪个数据库,也是内部命名与状态隔离的重要输入;请确保与实际采集库一致。job.common.job_id Longjob.reader.identifier / job.reader.server_name 时,会参与默认命名。job_id 不冲突。job.common.job_id 更像是任务的“身份证”,一般由平台自动管理;你通常不需要围绕它做调参。
job.reader.identifier Stringsail_${datasourceId}_postgres 或 bizA_pg_cdc_01。job.reader.slot_name,identifier 往往会影响 slot 的默认生成策略;多任务场景建议 两者至少配一个,优先推荐直接配 slot_name。job.reader.identifier 的价值在于“避免多任务在同一库上互相踩名字”;如果你遇到 slot/server name 冲突或想让运维更可控,优先把它配上。
job.reader.server_name Stringpg_cdc_ + taskId(不同平台/版本可能略有差异)server name(用于区分 offset/分区命名空间等)。server_name,在某些平台/运行方式下可能会导致“被视为新任务”而无法复用历史 offset(表现为重新从某个位点开始)。修改前建议评估恢复策略。.reader.server_name 用于给 Debezium 的状态与 offset 做命名隔离;多任务/多环境场景下合理设置能减少冲突,但随意改动可能影响历史状态复用。job.reader.schema_include_list List<String>(常见写法是 JSON 字符串数组)public,或只想采集业务 schema(避免把系统 schema、临时表等也纳入)。"schema_include_list": "[\"((?=^public$)).*\"]"
job.reader.postgres_ddl_table 时,连接器可能会自动把 DDL 表所在 schema 追加进 include list(避免 DDL 事件被漏采)。job.reader.schema_include_list 用来控制“采哪些 schema”。生产建议尽量收敛范围,减少误采与无关流量。
job.reader.table_include_list List<String>(常见写法是 JSON 字符串数组)order_2026.*)。"table_include_list": "[\"((?=.*\\\\.(?:t_order|t_user)$)).*\"]"
schema_include_list 共同决定最终采集集合;建议两者都配,避免范围过大。postgres_ddl_table,连接器可能会把该表追加进 include list。, 时建议配合 job.reader.auto_escape_include_list_comma=true,减少手工转义负担。job.reader.table_include_list 是最常用的“采集范围开关”。范围越精确,越有利于稳定与成本控制。
job.reader.database_include_list List<String>schema_include_list 与 table_include_list。在 Postgres CDC v3 里,database_include_list 不是有效的过滤手段;请用 schema/table 维度来控制采集范围。
job.reader.auto_escape_include_list_comma Booleantrue, 转义为 \\,,降低正则配置的“转义踩坑”。,),或你不确定下游解析对逗号的处理方式。true。false。o_escape_include_list_comma 是一个“减少正则转义错误”的保护参数,通常保持默认即可。job.reader.postgres_ddl_table String{schema}._sail_pg_ddl_{uuid})schema.table(例如 public._sail_pg_ddl_xxx)。schema_include_list / table_include_list(避免 DDL 事件被过滤掉);postgres_ddl_table 用于把“DDL 事件”从普通数据变更里区分出来。只有在你的链路确实通过 DDL 表传递 schema change 时,它才是必需的。
job.reader.initial_offset_type Stringlatestearliest / latest / timestamp / specifiedlatest)或希望回溯历史(earliest)。specified / timestamp)。latest(实时追增量,风险最低)。earliest,但要评估 WAL 保留、数据库压力与回放时长。specified 并通过 initial_offset_props 提供关键字段。initial_offset_type 决定“第一次从哪开始读 WAL”。默认 latest 更偏实时;需要回溯或精确定位起点时再改。
job.reader.initial_offset_timestamp Longinitial_offset_type=timestamp 时生效specified。initial_offset_timestamp 适合按时间粗粒度定位起点;要更精确请用 specified + initial_offset_props。
job.reader.initial_offset_props Map<String,String>initial_offset_type=specified 时生效lsn、ts_usec 等)。"initial_offset_type": "specified", "initial_offset_props": { "lsn": "777E/AE3F0000", "ts_usec": "1735871975038" }
latest 即可。initial_offset_props 让你能指定一个明确的 WAL 起点,适合补偿与排障;但风险更高,建议谨慎使用。
job.reader.plugin_name Stringpgoutputwal2json 等),需要与数据库侧配置一致。pgoutput。plugin_name 需要与数据库侧逻辑复制插件一致;通常不需要改,改动前要先确认兼容性。
job.reader.slot_name Stringidentifier/db_name/job_id/solution_id 相关)dts_pg_${job_id}bizA_pgcdc_${db_name}_01job.reader.identifier、job.reader.slot_name_format_version、job.common.solution_id 存在联动:当你未显式设置 slot_name 时,连接器会基于这些参数做自动生成与兼容。slot_name 是 Postgres CDC 的核心运维点。生产建议显式配置并保持稳定,避免自动生成带来的不可控与冲突。
job.reader.slot_name_format_version Stringv2v1 / v2v2。v1。slot_name_format_version 是典型的“兼容参数”。新任务默认 v2 即可;迁移接管历史任务时再按需调整。
job.common.solution_id Longjob.reader.slot_name,通常无需依赖该兼容逻辑。solution_id 更多是平台侧的历史兼容字段。对用户而言,最稳妥的做法仍是显式配置 slot_name,把运维可控性握在自己手里。
job.reader.scan-lsn-commit-checkpoints-num-delay Integer11。n-lsn-commit-checkpoints-num-delay 用于平衡“LSN 提交频率”与“WAL 回收/恢复重放量”。只有当你确实遇到 WAL 回收相关压力时才建议调大,并建议小步试探。job.reader.skip_ddl_parse_error Booleanfalsefalse(让异常尽早暴露,避免悄悄漏掉 schema 变更)。true,并配合 skip_ddl_pattern 过滤已知可跳过的 DDL。true 并不等于“schema 变更被正确处理”,它只是让任务不中断;下游可能仍需人工修正 schema。skip_ddl_parse_error 是一个“保任务不断流”的容错开关。打开它可以减少因少量 DDL 解析问题导致的任务失败,但也意味着你需要额外关注 schema 是否一致。
job.reader.skip_ddl_pattern String(正则表达式)(?is).*REPLICA\\s+IDENTITY\\s+.*skip_ddl_parse_error=true 的前提下使用效果更明确。skip_ddl_pattern 用于跳过特定 DDL 类型,减少不必要的解析失败。它应当是一个“白名单式”配置:只跳过你确定无影响的语句。
job.reader.debezium Map<String,String>"debezium": { "publication.autocreate.mode": "filtered", "publication.name": "dbz_publication" }
"job.reader.debezium": "{\"publication.autocreate.mode\":\"filtered\",\"publication.name\":\"dbz_publication\"}"
job.reader.debezium 让你能直接控制 Debezium 的高级行为。它很强大,但也容易引入副作用;生产建议谨慎、小步试探。
job.reader.connection_timezone StringUTCAsia/Shanghai)。connection_timezone 主要用于时间语义对齐。当你遇到时间字段偏移时,再考虑调整;否则保持默认 UTC 即可。
job.reader.poll_interval_ms Long500(毫秒)job.reader.poll_interval(无 _ms)的写法;如你不确定平台是否做了兼容映射,建议以平台实际可识别的 key 为准。poll_interval_ms 本质是在“空闲轮询”时做延迟与 CPU 的平衡:调小更实时,调大更省资源。
job.reader.max_batch_size Integer2048max_batch_size 决定了“每次拉一大批还是多次拉小批”。调大偏吞吐,调小偏实时。
job.reader.max_queue_size Integer8192max_queue_size 是“用内存换缓冲”的参数。调大更抗峰值,但更占内存;调小更省内存,但可能更容易背压。
job.reader.meta_db_seq_enabled Booleantrue_db_seq_ 这类序列元数据字段(用于辅助排序、排障或下游去重策略)。true。false。meta_db_seq_enabled 控制是否携带序列元数据字段。它对排障很有帮助,但也会改变输出 schema。
job.reader.meta_latency_timestamp_enabled Booleantruetrue。false。a_latency_timestamp_enabled 让你能在数据里直接观测延迟相关信息,建议默认打开以提升可观测性。job.reader.src_meta_info_column_enabled Booleanfalsesrc_meta_info_column_name)。src_meta_info_column_name 与下游 schema 兼容性。src_meta_info_column_enabled 是“多表链路可观测性”常用开关:开启后记录会带来源信息,更利于下游路由与排障。
job.reader.src_meta_info_column_name String_src_meta_info_job.common.cdc_multiplex_record_case_insensitive 存在联动:在某些多路复用/大小写兼容模式下,字段名可能被自动转换为大写。_meta_info_column_name 用于控制元数据列名。改名的首要原则是“避免与业务字段冲突,并与下游 schema 规范一致”。job.common.cdc_multiplex_record_case_insensitive Booleantrue_src_meta_info_ 这类字段名可能被自动转为大写。true。false 并做端到端验证。cdc_multiplex_record_case_insensitive 用于减少大小写导致的兼容问题。大多数情况下保持默认即可。
job.common.metric_ttl Integer(秒)1800(30 分钟);引擎侧可能表现为 -1(以实现为准)metric_ttl 决定了“指标在内存里保留多久”。排障与可观测性更重要时可调大;资源更敏感时可调小。