如何获取Kafka Debezium MySQL连接器的数据库.server.name?连接器、数据库、Debezium、Kafka

2023-09-04 01:52:18 作者:倾城乱世

编辑问题:

尝试配置debezium MySQL Kafka连接器,以

实时数据同步利器debezium教程

https://debezium.io/documentation/reference/stable/connectors/mysql.html#mysql-example-configuration

我有:

主机名:";ec2-xxx.compute.amazonaws.com"; 数据库:myCooldb(里面有我所有的表)

然后我设置了以下属性:

"database.hostname": "ec2-xxx.compute.amazonaws.com"
"database.include.list": "mycooldb"

而debezium有另一个属性,称为";database.server.name";。如何在MySQL服务器中找到服务器名值?

一台服务器可以有多个数据库,然后在database.include.list中可以包括数据库列表。

database.hostname是主机名或IP的。

我不确定什么是database.server.name和如何从MySQL服务器获取值?。在这个场景中,如果我想要将多个数据库包含在antiase.cludde.list中,那么atabase.server.name的值是多少?

推荐答案

database.server.namedatabase.hostname

根据docs:

database.hostname:MySQL数据库服务器的IP地址或主机名 database.server.name:标识特定MySQL数据库服务器并为其提供命名空间的逻辑名称/集群,Debezium在该集群中捕获更改。逻辑名称在所有其他连接器中应该是唯一的,因为它用作接收该连接器发出的事件的所有Kafka主题名称的前缀。数据库服务器逻辑名称中只能使用字母数字字符、连字符、圆点和下划线。

sodatabase.hostname必须是数据库所在的主机/IP。database.server.name可以是fredfoobarsalesanythingelse。它只是数据库逻辑名称,并在Kafka主题中使用(如上所述)。

如果没有database.server.name,您可能会遇到一个问题,即使用两个不同的Debezium连接器从两个不同的数据库中摄取一个名为foo的表,并且两个数据库都试图将其存储在一个名为foo的Kafka主题中。因此,文档中的注释database.server.name…提供命名空间

编辑:关于您的评论,我的回答仍然是准确的。文档detail topic naming,特别是在主题的一部分中使用了MySQL数据库名称,database.server.name也是如此。如果您连接到同一个MySQL主机(假设我们将其称为database.server.name=fred),并从其上名为saleswarehouse的两个数据库中提取数据,并且每个数据库都有一个名为audit的表,则会有两个Kafka主题:

fred.sales.audit fred.warehouse.audit