2

我正在使用 Debezium 连接器 0.8 版从 MySQL 数据库中捕获更改并将其移动到 Kafka。我将 Docker 与 MySQL 容器一起使用,另一个用于连接器,另一个用于 Kafka。

当我停止 Docker ( docker-compose down) 并再次启动 Docker 时,通常会收到以下错误:

org.apache.kafka.connect.errors.ConnectException: The db history topic is missing. You may attempt to recover it by reconfiguring the connector to SCHEMA_ONLY_RECOVERY

我已在此处的官方页面上阅读了此问题的解决方案:

https://debezium.io/blog/2018/03/16/note-on-database-history-topic-configuration/

但我遵循了这些步骤,我认为我的配置还可以:

log.retention.bytes = -1
log.retention.hours = 168       
log.retention.minutes = null
log.retention.ms = -1

请注意,如果我设置log.retention.ms为 -1 则log.retention.minutes不会log.retention.hours像官方文档解释的那样使用,然后我已经解决了保留大小和保留时间问题。

那么,有人知道我为什么会收到此错误吗?

这是大学工作的一部分。docker-compose我想在我的大学发布之前我无法分享完整的文件,但我可以向您展示与此问题相关的重要内容。我不认为这是一个配置问题,因为我的docker-compose.

mysql:
    image: mysql/5.7:configured (Little changes like enabling queries...)
environment:
     - MYSQL_ROOT_PASSWORD=debezium
     - MYSQL_USER=mysqluser
     - MYSQL_PASSWORD=mysqlpw
    volumes:
     - "sql_Data:/var/lib/mysql"
     - "sql_LogError:/var/log/mysql"

kafka:
    image: debezium/kafka:0.8
    depends_on:
     - zookeeper
    environment:
     - HOST_NAME=xxxx
     - ADVERTISED_HOST_NAME=xxxx
     - ZOOKEEPER_CONNECT=zookeeper:2181
     - KAFKA_CREATE_TOPICS="events:1:1"
     - KAFKA_LOG_RETENTION_MS=-1
    volumes:
          - "kafka_Data:/kafka/data" 
          - "kafka_Log:/kafka/logs"
          - "kafka_Conf:/kafka/config"

connect:
    image: debezium/connect:0.8
    depends_on:
     - zookeeper
     - kafka
     - mysql
    environment:
     - HOST_NAME=xxxx
     - ADVERTISED_HOST_NAME=xxxx
     - BOOTSTRAP_SERVERS=xxxx:9092
     - GROUP_ID=1
     - CONFIG_STORAGE_TOPIC=my_connect_configs
     - OFFSET_STORAGE_TOPIC=my_connect_offsets
     - STATUS_STORAGE_TOPIC=my_connect_statuses
volumes: 
  sql_Data:
  sql_LogError:
  kafka_Data:
  kafka_Log:
  kafka_Conf:

而其他部分只是网络或不相关的东西。

4

3 回答 3

2

我遇到了类似的问题。您的database.server.idand database.server.nameinmysql.properties配置文件必须是唯一的。

于 2019-12-26T11:11:21.677 回答
1

最后,在与这个问题斗争了很多天之后,我找到了问题的原因和解决方案。

debezium/zookeeper图像文档中有勘误表。正如您在此链接中看到的:

链接到 dockerHub 中的 debezium/zookeeper 映像

文档建立了 3 个卷来保存 zookeeper 需要的所有数据。这些卷的路径是:

  1. /zookeeper/data
  2. /zookeeper/logs
  3. /zookeeper/conf

这里的问题是第二个是错误的。根据其Dockerfile,用于保存事务日志的第二个路径必须是:

/zookeeper/txns

这是它的一个片段Dockerfile

# Expose the ports and set up volumes for the data, transaction log, and configuration
EXPOSE 2181 2888 3888
VOLUME ["/zookeeper/data","/zookeeper/txns","/zookeeper/conf"]
于 2019-04-10T10:30:08.823 回答
0

永远不要让历史主题过期或删除历史主题。这就是导致问题的原因。

为避免主题过期,请按照此处的 Kafka 文档运行以下命令:https ://debezium.io/blog/2018/03/16/note-on-database-history-topic-configuration/

<KAFKA_DIR>/bin/kafka-configs.sh --zookeeper zookeeper:2181 --entity-type topics --entity-name <DB_HISTORY_TOPIC> --alter --add-config retention.bytes=-1

要在开发环境中从这个问题中恢复,只需删除您的原始连接器并重新创建一个具有不同名称的新连接器。

于 2021-04-19T07:45:25.593 回答