Airbyte 0.61.0 Postgres-Kafka连接Schema发现失败求助
问题场景
Linux服务器Docker部署Airbyte 0.61.0,创建PostgreSQL(连接器版本3.4.10)→ Kafka(连接器版本0.1.10)的连接时,第三步「选择流」环节报错:Discovering schema failed - Failed to run schema discovery
已完成验证:
- Postgres与Kafka的连接均正常
- Postgres用户对目标Schema的权限配置正确
- 测试库仅包含一个小表及默认public Schema,且已在Postgres连接器配置中指定'public' Schema
- 尝试启用「通过Xmin系统列检测变更」和「通过自定义游标扫描变更」均无效果
- 切换其他Postgres数据库或Schema,仍出现相同错误
相关日志(中文翻译)
"logLines": [ "2024-06-04 19:02:00 > Docker卷任务日志路径: /tmp/workspace/61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa/0/logs.log", "2024-06-04 19:02:00 > 执行worker包装器. Airbyte版本: 0.61.0", "2024-06-04 19:02:00 > 使用环境变量SIDECAR_KUBE_CPU_LIMIT的默认值: '2.0'", "2024-06-04 19:02:00 > 使用环境变量SOCAT_KUBE_CPU_LIMIT的默认值: '2.0'", "2024-06-04 19:02:00 > 使用环境变量SIDECAR_KUBE_CPU_REQUEST的默认值: '0.1'", "2024-06-04 19:02:00 > 使用环境变量SOCAT_KUBE_CPU_REQUEST的默认值: '0.1'", "2024-06-04 19:02:00 > 检查airbyte/source-postgres:3.4.10是否存在...", "2024-06-04 19:02:00 > airbyte/source-postgres:3.4.10已在本地找到.", "2024-06-04 19:02:00 > 创建docker容器 = source-postgres-discover-61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa-0-gejuz,资源配置为io.airbyte.config.ResourceRequirements@66677c2e[cpuRequest=,cpuLimit=,memoryRequest=,memoryLimit=,additionalProperties={}],允许主机为null", "2024-06-04 19:02:00 > 准备命令: docker run --rm --init -i -w /data/61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa/0 --log-driver none --name source-postgres-discover-61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa-0-gejuz --network host -v airbyte_workspace:/data -v oss_local_root:/local -e DEPLOYMENT_MODE=OSS -e WORKER_CONNECTOR_IMAGE=airbyte/source-postgres:3.4.10 -e AUTO_DETECT_SCHEMA=true -e LAUNCHDARKLY_KEY= -e SOCAT_KUBE_CPU_REQUEST=0.1 -e SOCAT_KUBE_CPU_LIMIT=2.0 -e FIELD_SELECTION_WORKSPACES= -e USE_STREAM_CAPABLE_STATE=true -e WORKER_ENVIRONMENT=DOCKER -e AIRBYTE_ROLE=dev -e APPLY_FIELD_SELECTION=false -e WORKER_JOB_ATTEMPT=0 -e OTEL_COLLECTOR_ENDPOINT=http://host.docker.internal:4317 -e FEATURE_FLAG_CLIENT=config -e AIRBYTE_VERSION=0.61.0 -e WORKER_JOB_ID=61b2f90b-9bb0-4a63-be1f-4b0b5a1c59aa airbyte/source-postgres:3.4.10 discover --config source_config.json", "2024-06-04 19:02:00 > 从协议版本0.2.0读取消息", "2024-06-04 19:02:01 > INFO main i.a.i.s.p.PostgresSource(main):667 启动源: class io.airbyte.integrations.source.postgres.PostgresSource", "2024-06-04 19:02:01 > INFO main i.a.c.i.b.IntegrationCliParser$Companion(parseOptions):144 集成参数: {discover=null, config=source_config.json}", "2024-06-04 19:02:01 > INFO main i.a.c.i.b.IntegrationRunner(runInternal):124 运行集成: io.airbyte.cdk.integrations.base.ssh.SshWrappedSource", "2024-06-04 19:02:01 > INFO main i.a.c.i.b.IntegrationRunner(runInternal):125 命令: DISCOVER", "2024-06-04 19:02:01 > INFO main i.a.c.i.b.IntegrationRunner(runInternal):126 集成配置: IntegrationConfig{command=DISCOVER, configPath='source_config.json', catalogPath='null', statePath='null'}", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字groups - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字order - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字group - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字airbyte_secret - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字always_show - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > WARN main c.n.s.JsonMetaSchema(newValidator):278 未知关键字display_type - 你应该定义自己的元Schema. 如果该关键字与验证无关, 只需使用NonValidationKeyword", "2024-06-04 19:02:01 > INFO main i.a.c.i.b.s.SshTunnel$Companion(getInstance):423 启动连接, 方式: NO_TUNNEL", "2024-06-04 19:02:01 > INFO main i.a.i.s.p.PostgresSource(toSslJdbcParamInternal):888 DISABLED toSslJdbcParam disable", "2024-06-04 19:02:01 > INFO main c.z.h.HikariDataSource(<init>):79 HikariPool-1 - 启动中...", "2024-06-04 19:02:01 > INFO main c.z.h.HikariDataSource(<init>):81 HikariPool-1 - 启动完成.", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false", "2024-06-04 19:02:02 > INFO main i.a.c.i.s.j.AbstractJdbcSource(discoverInternal):291 要排除的内部Schema: [catalog_history, information_schema, pg_catalog, pg_internal]", "2024-06-04 19:02:02 > INFO main i.a.c.d.j.s.AdaptiveStreamingQueryConfig(initialize):24 设置初始抓取大小: 10行", "2024-06-04 19:02:02 > INFO main i.a.c.i.s.j.AbstractJdbcSource(discoverPrimaryKeys):428 为表发现主键: []", "2024-06-04 19:02:02 > INFO main c.z.h.HikariDataSource(close):349 HikariPool-1 - 开始关闭...", "2024-06-04 19:02:02 > INFO main c.z.h.HikariDataSource(close):351 HikariPool-1 - 关闭完成.", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresSource(toSslJdbcParamInternal):888 DISABLED toSslJdbcParam disable", "2024-06-04 19:02:02 > INFO main c.z.h.HikariDataSource(<init>):79 HikariPool-2 - 启动中...", "2024-06-04 19:02:02 > INFO main c.z.h.HikariDataSource(<init>):81 HikariPool-2 - 启动完成.", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresUtils(isCdc):70 使用CDC: false", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresUtils(isXmin):190 使用Xmin: false", "2024-06-04 19:02:02 > INFO main i.a.c.i.b.IntegrationRunner(runInternal):268 完成集成: io.airbyte.cdk.integrations.base.ssh.SshWrappedSource", "2024-06-04 19:02:02 > INFO main i.a.i.s.p.PostgresSource(main):669 完成源: class io.airbyte.integrations.source.postgres.PostgresSource" ]
关键分析
日志中Discover primary keys for tables: []是核心问题:Airbyte成功连接到Postgres,但未发现任何表,导致Schema发现失败。
排查及解决步骤
验证Postgres用户的表访问权限
使用连接器配置的Postgres用户登录数据库,执行以下SQL确认能看到目标表:SELECT * FROM pg_tables WHERE schemaname = 'public';如果查询结果为空,说明用户没有权限查看该Schema下的表,需重新配置权限(比如执行
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <your_user>;)。检查数据库名称的正确性
Postgres的数据库名称区分大小写(如果是带双引号创建的),确认连接器配置中的数据库名称与实际完全一致,无拼写或大小写错误。跳过Schema手动指定
暂时在Postgres连接器配置中不填写Schema名称,让Airbyte自动发现所有Schema,看是否能检测到public下的表。测试容器网络连通性
进入Airbyte的worker容器,测试与Postgres的连通性:docker exec -it <airbyte-worker-container-id> bash # 安装telnet或nc apt update && apt install -y telnet # 测试Postgres端口 telnet <postgres-host> <postgres-port>确保网络能正常访问Postgres服务。
升级PostgreSQL连接器版本
连接器3.4.10可能存在已知的Schema发现bug,尝试升级到Airbyte 0.61.0兼容的最新PostgreSQL连接器版本(比如3.5.x系列)。检查Postgres的pg_hba.conf配置
确认pg_hba.conf中允许Airbyte服务器的IP地址连接,且认证方式正确(比如md5或scram-sha-256),修改后需重启Postgres服务。
内容的提问来源于stack exchange,提问作者DimasJackson

