You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Debezium连接Docker中MariaDB失败:任务运行后异常终止

解决Debezium连接MariaDB容器后任务失败(Kafka连接超时)的问题

从报错信息来看,核心问题是Debezium容器尝试通过localhost:9092连接Kafka Broker,但Docker环境中localhost指向容器自身,而非宿主机或Kafka容器——这也是同配置下PostgreSQL能正常工作的关键差异(推测PostgreSQL连接器配置中使用了Kafka容器的服务名而非localhost)。以下是针对性解决方案:

1. 修正Docker Compose的Kafka网络配置

确保Kafka、Debezium、MariaDB容器处于同一Docker网络,且Kafka配置了容器内部可访问的监听地址:

services:
  kafka:
    image: confluentinc/cp-kafka:latest
    hostname: kafka
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092
      # 其他Kafka必填配置(如ZOOKEEPER_CONNECT等)...
  debezium:
    image: debezium/connect:latest
    depends_on:
      - kafka
    environment:
      BOOTSTRAP_SERVERS: kafka:9092
      GROUP_ID: 1
      CONFIG_STORAGE_TOPIC: connect-configs
      OFFSET_STORAGE_TOPIC: connect-offsets
      STATUS_STORAGE_TOPIC: connect-statuses
  mariadb:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: debezium
      MYSQL_PASSWORD: dbz
    command: --log-bin=mysql-bin --binlog-format=ROW

关键配置说明:

  • KAFKA_ADVERTISED_LISTENERS包含容器内部可访问的kafka:9092
  • Debezium容器通过BOOTSTRAP_SERVERS: kafka:9092指定Kafka地址

2. 修正MariaDB连接器的JSON配置

将连接器配置中Kafka相关地址从localhost:9092改为Kafka容器的服务名kafka:9092:

{
  "name": "mariadb-connector",
  "config": {
    "connector.class": "io.debezium.connector.mariadb.MariaDbConnector",
    "tasks.max": "1",
    "database.hostname": "mariadb",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "dbz",
    "database.server.id": "1",
    "database.server.name": "mariadb-db",
    "database.include.list": "testdb",
    "database.history.kafka.bootstrap.servers": "kafka:9092",
    "database.history.kafka.topic": "schema-changes.testdb"
  }
}

重点修正database.history.kafka.bootstrap.servers字段,确保与Docker网络内的Kafka服务地址一致。

3. 验证网络连通性与配置生效

  1. 进入Debezium容器,测试Kafka服务连通性:
docker exec -it <debezium容器ID/名称> ping kafka

能正常ping通则网络配置无误。

  1. 重启所有容器使配置生效:
docker-compose down
docker-compose up -d

补充排查点

若问题仍存在,检查以下内容:

  • Kafka容器日志,确认Broker正常启动无报错
  • MariaDB是否开启binlog:通过docker exec -it <mariadb容器ID> mysql -uroot -proot -e "show variables like 'log_bin';"验证,需确保log_bin=ON且binlog_format=ROW
  • Debezium容器环境变量中BOOTSTRAP_SERVERS是否正确指向kafka:9092

内容的提问来源于stack exchange,提问作者NV0C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:48:19