用于MySQL的Debezium连接器。 db历史记录主题丢失

时间:2019-01-22 10:06:19

标签: apache-kafka apache-kafka-connect debezium

我正在使用debezium连接器从MySQL数据库捕获更改并将其移至Kafka。我正在使用Docker。一个用于MySQL的容器,另一个用于连接器的容器,另一个用于Kafka的容器。

当我停止docker(停泊docker-compose)并再次启动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.minuteslog.retention.hours(如官方文档中所述),那么我已经解决了保留大小和保留时间问题。

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

编辑: 我使用的是0.8版。

这是大学最后工作的一部分,我想在我将它发布到我的大学之前无法共享完整的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:

其他部分仅仅是网络,而不是相关的东西。

3 个答案:

答案 0 :(得分:0)

最后,经过几天的努力,我找到了问题的原因和解决方案。

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

link to debezium/zookeeper image in dockerHub

文档稳定了3卷,以保存Zookeeper的所有数据。该卷的路径设置为:

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

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

  • / zookeeper / txns

我在下一张图片中显示了其Dockerfile的快照。

enter image description here

答案 1 :(得分:0)

我遇到了类似的问题,mysql.properties配置文件中的database.server.id和database.server.name必须唯一

答案 2 :(得分:0)

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

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

/bin/kafka-configs.sh --zookeeper zookeeper:2181 --entity-type 主题 --entity-name --alter --add-config reserved.bytes=-1

要从此问题中恢复(在开发环境中),只需删除原始连接器并使用不同名称重新创建新连接器即可。