Debezium MySQL源连接器配置属性

Debezium MySQL源连接器配置属性

可以使用多种配置属性来配置MySQL Source Connector。

  • database.hostname

    MySQL数据库服务器的IP地址或主机名。

    • 类型:字符串
    • 重要性:高
  • database.port

    MySQL数据库服务器的整数端口号。

    • 类型:整数
    • 重要性:低
    • 默认: 3306
  • database.user

    连接到MySQL数据库服务器时使用的用户名。

    • 类型:字符串
    • 重要性:高
  • database.password

    连接到MySQL数据库服务器时使用的密码。

    • 类型:密码
    • 重要性:高
  • database.server.name

    逻辑名称,用于标识特定的MySQL数据库服务器/集群并为其提供名称空间。逻辑名称在所有其他连接器上都应该是唯一的,因为它用作该连接器发出的所有Kafka主题名称的前缀。默认为host:_port_,其中host是database.hostname属性的值,port是属性的值database.port。Confluent建议将默认名称更改为有意义的名称。

    • 类型:字符串
    • 重要性:低
    • 默认: database.hostname:database.port
  • database.server.id

    该数据库客户端的数字ID,在MySQL群集中所有当前正在运行的数据库进程中,该ID必须唯一。该连接器作为另一个服务器(具有此唯一ID)加入MySQL数据库集群,因此它可以读取binlog。默认情况下,在5400和之间会生成一个随机数6400

    • 类型:整数
    • 重要性:低
    • 默认值:随机
  • database.history.kafka.topic

    连接器将在其中存储数据库架构历史记录的Kafka主题的全名。

    • 类型:字符串
    • 重要性:高
  • database.history.kafka.bootstrap.servers

    连接器将用于建立与Kafka群集的初始连接的主机/端口对的列表。该连接将用于检索先前由连接器存储的数据库架构历史,并用于写入从源数据库读取的每个DDL语句。这应该指向Kafka Connect进程使用的同一Kafka群集。

    • 类型:字符串列表
    • 重要性:高
  • database.whitelist

    与要监视的数据库名称匹配的正则表达式的可选逗号分隔列表。白名单中未包括的任何数据库名称都将从监视中排除。默认情况下,将监视所有数据库。不可与一起使用 database.blacklist

    • 类型:字符串列表
    • 重要性:低
    • 默认值:空字符串
  • database.blacklist

    与数据库名称匹配的正则表达式的可选逗号分隔列表,这些名称与要从监视中排除的数据库名称匹配。黑名单中未包括的任何数据库名称都将受到监视。不可与一起使用database.whitelist

    • 类型:字符串列表
    • 重要性:低
    • 默认值:空字符串
  • table.whitelist

    可选的用逗号分隔的正则表达式列表,与要监视的表的标准表标识符匹配。白名单中未包含的任何表都将从监视中排除。每个标识符的格式为schemaName.tableName。默认情况下,连接器将监视每个受监视模式中的每个非系统表。不可与一起使用table.blacklist

    • 类型:字符串列表
    • 重要性:低
    • 默认值:空字符串
  • table.blacklist

    可选的以逗号分隔的正则表达式列表,与要从监视中排除的表的标准表标识符匹配。黑名单中未包含的任何表都将受到监控。每个标识符的格式为databaseName.tableName。不可与一起使用table.whitelist

    • 类型:字符串列表
    • 重要性:低
    • 默认值:空字符串
  • column.blacklist

    可选的用逗号分隔的正则表达式列表,该列表与应从更改事件消息值中排除的列的全限定名称匹配。列的完全限定名称的格式为databaseName.tableName.columnNamedatabaseName.schemaName.tableName.columnName

    • 类型:字符串列表
    • 重要性:低
    • 默认值:不适用
  • column.truncate.to.length.chars

    可选的用逗号分隔的正则表达式列表,与基于字符的列的标准名称匹配。如果字段值长于指定的字符数,则更改事件消息值中的列值将被截断。可以在单个配置中使用具有不同长度的多个属性,尽管每种属性的长度必须为正整数。列的全限定名称采用databaseName.tableName.columnName或的形式databaseName.schemaName.tableName.columnName

    • 类型:字符串列表
    • 重要性:低
    • 默认值:不适用
  • column.mask.with.length.chars

    可选的用逗号分隔的正则表达式列表,与基于字符的列的标准名称匹配。列值在更改事件消息值中替换为由指定数量的星号(*)字符组成的字段值。可以在单个配置中使用具有不同长度的多个属性,尽管每种属性的长度必须为正整数。列的全限定名称采用databaseName.tableName.columnName或的形式databaseName.schemaName.tableName.columnName

    • 类型:字符串列表
    • 重要性:低
    • 默认值:不适用
  • column.propagate.source.type

    可选的以逗号分隔的正则表达式列表,与正则表达式的列的完全限定名称匹配,这些列的原始类型和长度应作为参数添加到发出的更改消息中的相应字段模式中。模式参数__debezium.source.column.type__debezium.source.column.length_debezium.source.column.scale分别用于传播的原始类型的名称和长度(对于可变宽度的类型),。用于适当调整接收器数据库中相应列的大小。列的全限定名称采用databaseName.tableName.columnName或的形式databaseName.schemaName.tableName.columnName

    • 类型:字符串列表
    • 重要性:低
    • 默认值:不适用
  • time.precision.mode

    时间,日期和时间戳可以不同的精度表示。设置包括以下内容:

    • adaptive_time_microseconds(默认值),它将完全捕获数据库中的日期,日期时间和时间戳记值。它使用基于数据库列类型的毫秒,微秒或纳秒精度值。TIME类型字段是一个例外,始终捕获为微秒。

    • adaptive(不建议使用)使用毫秒,微秒或纳秒精度值捕获与数据库中的时间和时间戳值完全相同的值。这些值基于数据库列的类型。

    • connect使用Kafka Connect内置的时间,日期和时间戳记表示时间和时间戳记值。无论数据库列的精度如何,它都使用毫秒精度。

    • 类型:字符串

    • 重要性:低

    • 默认: adaptive_time_microseconds

  • decimal.handling.mode

    指定连接器应如何处理DECIMALNUMERIC列的值。设置包括以下内容:

    • precise(默认值)使用java.math.BigDecimal更改事件中以二进制形式表示的值精确地表示它们;或double使用double值表示它们,这可能会导致精度损失,但使用起来容易得多。

    • string将值编码为易于使用的格式化字符串,但有关实型的语义信息丢失。

    • 类型:字符串

    • 重要性:低

    • 默认: precise

  • bigint.unsigned.handling.mode

    指定在更改事件中应如何表示BIGINT UNSIGNED列。设置包括以下内容:

    • precise用于java.math.BigDecimal表示值,这些值在更改事件中使用二进制表示和Kafka Connect的org.apache.kafka.connect.data.Decimal类型进行编码。

    • long(默认值)使用Java表示的值long ,该值可能无法提供精度,但在使用者中使用起来会容易得多。long 通常是首选设置。precise 仅当使用大于2 ^ 63的值(这些值不能使用传送long)时,才应使用该设置。

    • 类型:字符串

    • 重要性:低

    • 默认: long

  • include.schema.changes

    一个布尔值,它指定连接器是否应将数据库模式中的更改发布到与数据库服务器ID同名的Kafka主题。每个模式更改都将使用包含数据库名称且其值包含DDL语句的键来记录。这与连接器内部记录数据库历史记录的方式无关。

    • 类型:字符串
    • 重要性:低
    • 默认: true
  • include.query

    布尔值,用于指定连接器是否应包括生成更改事件的原始SQL查询。注意:此选项要求配置MySQL并将binlog_rows_query_log_events选项设置为ON。对于快照过程生成的事件将不存在查询。 **警告:**启用此选项可能会通过将原始SQL语句包括在change事件中来公开明确列入黑名单或掩盖的表或字段。

    • 类型:字符串
    • 重要性:低
    • 默认: false
  • event.deserialization.failure.handling.mode

    指定连接器在反序列化二进制日志事件期间应如何应对异常。

    fail传播异常(指示有问题的事件及其binlog偏移量),导致连接器停止。

    warn导致有问题的事件被跳过,有问题的事件及其binlog偏移被记录(确保记录器设置为WARNERROR级别)。

    ignore导致有问题的事件被跳过。fail propagates the exception (indicating the problematic event and its binlog offset), causing the connector to stop. warnWARNERRORignore

    • 类型:字符串
    • 重要性:低
    • 默认: fail
  • inconsistent.schema.handling.mode

    指定连接器对与内部模式表示形式中不存在的表相关的binlog事件应如何反应(即内部表示形式与数据库不一致)

    fail引发异常(指示有问题的事件及其binlog偏移量),从而导致连接器停止。

    warn导致有问题的事件被跳过,有问题的事件及其binlog偏移被记录(确保记录器设置为WARNERROR级别)。

    ignore导致有问题的事件被跳过。

    • 类型:字符串
    • 重要性:低
    • 默认: fail
  • max.queue.size

    正整数值,它指定阻塞队列的最大大小,从数据库日志中读取的更改事件在写入到Kafka之前将被放入该队列中。例如,当对Kafka的写入速度较慢或Kafka不可用时,此队列可以为binlog阅读器提供背压。队列中出现的事件不包括在此连接器定期记录的偏移量中。默认值为8192,并且应始终大于该max.batch.size属性中指定的最大批处理大小。

    • 类型:整数

    • 重要性:低

    • 默认: 8192

  • max.batch.size

    正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。默认为2048

    • 类型:整数

    • 重要性:低

    • 默认: 2048

  • poll.interval.ms

    正整数值,指定连接器在每次迭代期间应等待的毫秒数,以便出现新的更改事件。默认为500毫秒。

    • 类型:整数

    • 重要性:低

    • 默认: 500

  • connect.timeout.ms

    一个正整数,它指定连接器在尝试连接到MySQL数据库服务器之后应等待的最长时间(毫秒)。默认为30秒。

    • 类型:字符串

    • 重要性:低

    • 默认: 30

  • gtid.source.includes

    用逗号分隔的正则表达式列表,该列表与GTID集中用于查找MySQL服务器中binlog位置的源UUID匹配。仅将使用与这些包含模式之一匹配的源的GTID范围。不可与一起使用gtid.source.excludes

    • 类型:字符串列表
    • 重要性:低
  • gtid.source.excludes

    用逗号分隔的正则表达式列表,该列表与GTID集中用于查找MySQL服务器中binlog位置的源UUID匹配。仅使用源与这些排除模式都不匹配的GTID范围。不可与一起使用gtid.source.includes

    • 类型:字符串列表

    • 重要性:低

  • gtid.new.channel.position

    设置latest为时,并且当连接器看到新的GTID通道时,连接器将从该GTID通道中最后执行的事务开始使用。如果设置为earliest,则Debezium连接器将从第一个可用(未清除)的GTID位置开始读取该通道。earliest当您有一个主动-被动MySQL设置(其中Debezium连接到主数据库)时,此功能非常有用,在这种情况下,在故障转移期间,具有新UUID(和GTID通道)的辅助数据库开始在连接Debezium之前接收写入。使用最新时,这些写入将丢失。

    • 类型:字符串
    • 重要性:低
    • 默认: latest
  • tombstones.on.delete

    控制是否应在删除事件之后生成逻辑删除事件。设置为true时,删除操作由删除事件和随后的逻辑删除事件表示。设置为false时,仅发送删除事件。发出逻辑删除事件(默认行为)后,一旦源记录被删除,Kafka便可以完全删除与给定键有关的所有事件。

    • 类型:字符串
    • 重要性:低
    • 默认: true
  • ddl.parser.mode

    控制在构建捕获的数据库结构的元模型时应使用哪个解析器来解析DDL语句。可以设置为legacy(对于旧的手写解析器实现)或antlr(对于Debezium 0.8.0中引入的基于Antlr的实现)。虽然旧版解析器仍然是Debezium 0.8.x的默认解析器,但是请尝试新的实现并报告遇到的任何问题。新的解析器是默认的0.9版本,随后在将来的版本中删除了旧的实现。

    • 类型:字符串
    • 重要性:低
    • 默认值: legacy对于Debezium 0.8.x和antlrDebezium 0.9(及更高版本)

可以在Debezium 连接器属性文档中找到其他高级配置属性和详细信息。

原文

https://docs.confluent.io/current/connect/debezium-connect-mysql/mysql_source_connector_config.html

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Debezium自定义MariaDB连接器的完整代码示例: ``` package com.example.debezium; import io.debezium.connector.mysql.MySqlConnectorConfig; import io.debezium.connector.mysql.MySqlConnectorTask; import io.debezium.embedded.EmbeddedEngine; import io.debezium.engine.DebeziumEngine; import io.debezium.engine.format.Json; import io.debezium.relational.history.FileDatabaseHistory; import org.apache.kafka.connect.json.JsonConverter; import org.apache.kafka.connect.storage.StringConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class CustomMariaDBConnector { private static final Logger LOGGER = LoggerFactory.getLogger(CustomMariaDBConnector.class); public static void main(String[] args) throws IOException { final String kafkaBootstrapServers = "localhost:9092"; final String databaseHostName = "localhost"; final int databasePort = 3306; final String databaseUser = "root"; final String databasePassword = "password"; final String databaseServerName = "my-server"; final String databaseHistoryPath = "/path/to/database/history/file"; final Map<String, String> config = new HashMap<>(); config.put("name", databaseServerName); config.put("connector.class", "io.debezium.connector.mysql.MySqlConnector"); config.put("database.hostname", databaseHostName); config.put("database.port", String.valueOf(databasePort)); config.put("database.user", databaseUser); config.put("database.password", databasePassword); config.put("database.server.id", "184054"); config.put("database.server.name", databaseServerName); config.put("database.history", "io.debezium.relational.history.FileDatabaseHistory"); config.put("database.history.file.filename", databaseHistoryPath); config.put("table.whitelist", "mydb.mytable"); final MySqlConnectorConfig connectorConfig = new MySqlConnectorConfig(config); final MySqlConnectorTask task = new MySqlConnectorTask(connectorConfig); final JsonConverter keyConverter = new JsonConverter(); final JsonConverter valueConverter = new JsonConverter(); final StringConverter headerConverter = new StringConverter(); keyConverter.configure(config, true); valueConverter.configure(config, false); headerConverter.configure(config, true); final ExecutorService executor = Executors.newSingleThreadExecutor(); final DebeziumEngine<ChangeEvent<String, String>> engine = EmbeddedEngine.create() .using(task) .using(keyConverter) .using(valueConverter) .using(headerConverter) .notifying(record -> LOGGER.info("Record: {}", record)) .using(Json::newBuilder) .using(new FileDatabaseHistory()) .build(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { LOGGER.info("Stopping Debezium engine"); engine.stop(); executor.shutdown(); executor.awaitTermination(10, TimeUnit.SECONDS); } catch (InterruptedException e) { LOGGER.error("Error while stopping Debezium engine", e); } LOGGER.info("Debezium engine stopped"); })); LOGGER.info("Starting Debezium engine"); executor.execute(engine); } } ``` 请注意,这个示例是使用Debezium的EmbeddedEngine创建的,但是你也可以使用Debezium的StandaloneEngine。此外,你需要将以下依赖项添加到你的项目中: - debezium-connector-mysql - debezium-embedded - kafka-clients - kafka-connect-api - kafka-streams - slf4j-api 你还需要在你的Kafka集群中创建一个名为“my-server”的主题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值