使用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. 验证网络连通性与配置生效
- 进入Debezium容器,测试Kafka服务连通性:
docker exec -it <debezium容器ID/名称> ping kafka
能正常ping通则网络配置无误。
- 重启所有容器使配置生效:
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
相关产品推荐
相关产品推荐

