同步数据CDC之debezium

Debezium是一个CDC平台,通过Kafka Connect提供持久性和容错性。它监控数据库并记录更改到Kafka主题,降低对上游数据库系统的压力。在分布式模式下,常用API用于操作,但需要注意使用从库,因为直接在主库上使用可能导致全局读锁,影响业务写入。
Debezium架构

Debezium是一个捕获数据更改(CDC)平台,并且利用Kafka和Kafka Connect实现了自己的持久性、可靠性和容错性。每一个部署在Kafka Connect分布式的、可扩展的、容错性的服务中的connector监控一个上游数据库服务器,捕获所有的数据库更改,然后记录到一个或者多个Kafka topic(通常一个数据库表对应一个kafka topic)。Kafka确保所有这些数据更改事件都能够多副本并且总体上有序(Kafka只能保证一个topic的单个分区内有序),这样,更多的客户端可以独立消费同样的数据更改事件而对上游数据库系统造成的影响降到很小(如果N个应用都直接去监控数据库更改,对数据库的压力为N,而用debezium汇报数据库更改事件到kafka,所有的应用都去消费kafka中的消息,可以把对数据库的压力降到1)。另外,客户端可以随时停止消费,然后重启,从上次停止消费的地方接着消费。每个客户端可以自行决定他们是否需要exactly-once或者at-least-once消息交付语义保证,并且所有的数据库或者表的更改事件是按照上游数据库发生的顺序被交付的。

distributed模式常用API
# return a list of active connectors 返回活跃的connectors

POST /connectors
#create a new connector; the request body should be a JSON object containing a string name field and an object config field with the connector configuration parameters  创建一个新的connector

GET /connectors/{name}
#get information about a specific connector 获取指定connetor的信息

GET /connectors/{name}/config
#get the conf
Debezium 是一个开源的分布式平台,用于捕获数据库的结构化变更事件(Change Data Capture,简称 CDC)。它能够将 MySQL 数据库中的数据变更实时同步到 Elasticsearch,实现数据的近实时搜索和分析功能。以下是配置 Debezium 将 MySQL 数据同步到 Elasticsearch 的基本步骤: ### 环境准备 1. **MySQL 数据库**:确保 MySQL 数据库已启用二进制日志(Binary Log),并且配置了适当的格式(建议使用 `ROW` 模式)。 ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW ``` 保存配置后重启 MySQL 服务以确保更改生效[^2]。 2. **Elasticsearch 集群**:确保 Elasticsearch 已正确安装并运行,且可以通过网络访问。 3. **Kafka 和 Kafka Connect**:Debezium 依赖于 Kafka 和 Kafka Connect 来处理数据流。需要安装 Kafka 和 Kafka Connect,并确保 Kafka Connect 已经配置了 Debezium 的插件。 4. **Debezium 插件**:下载并安装 Debezium 的 MySQL 连接器插件,将其放置在 Kafka Connect 的插件目录中。 ### 配置 Debezium 连接器 1. **创建连接器配置文件**:创建一个 JSON 格式的配置文件,定义 MySQL 数据库的连接信息、Elasticsearch 的目标信息以及 Debezium 的行为。 ```json { "name": "debezium-mysql-to-elasticsearch", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "database.hostname": "localhost", "database.port": "3306", "database.user": "debezium", "database.password": "dbz_password", "database.server.name": "inventory-server", "database.allowPublicKeyRetrieval": "true", "database.server.id": "184054", "database.include.list": "inventory", "database.connection.adapter": "io.debezium.connector.mysql.connection.adapter.MySqlJdbcConnectionAdapter", "database.connection.adapter.host": "localhost", "database.connection.adapter.port": 3306, "database.connection.adapter.user": "debezium", "database.connection.adapter.password": "dbz_password", "table.include.list": "inventory.customers", "database.server.timezone": "UTC", "database.include.list": "inventory", "snapshot.mode": "when_needed", "snapshot.locking.mode": "none", "connector.class": "io.debezium.connector.mysql.MySqlConnector", "key.converter": "org.apache.kafka.connect.storage.StringConverter", "value.converter": "org.apache.kafka.connect.json.JsonConverter", "value.converter.schemas.enable": "false", "elasticsearch.hostname": "localhost", "elasticsearch.port": "9200", "elasticsearch.index.name": "inventory-customers", "elasticsearch.type.name": "_doc", "elasticsearch.connection.adapter": "io.debezium.connector.elasticsearch.ElasticsearchJdbcConnectionAdapter", "elasticsearch.connection.adapter.host": "localhost", "elasticsearch.connection.adapter.port": 9200 } } ``` 2. **启动 Kafka Connect**:使用 Kafka Connect 的 REST API 或命令行工具加载配置文件,启动 Debezium 连接器。 ```bash curl -X POST -H "Content-Type: application/json" --data @debezium-mysql-to-elasticsearch.json http://localhost:8083/connectors ``` ### 数据同步验证 1. **检查 Kafka 主题**:确保 Kafka 中有对应的主题生成,并且有数据流入。 ```bash kafka-topics.sh --describe --topic inventory-server.inventory.customers --bootstrap-server localhost:9092 ``` 2. **查询 Elasticsearch**:使用 Elasticsearch 的 REST API 查询目标索引,确认数据是否成功同步。 ```bash curl -X GET "http://localhost:9200/inventory-customers/_search" -H 'Content-Type: application/json' -d'{ "size": 10 }' ``` 通过以上步骤,可以实现 MySQL 数据库中的数据通过 Debezium 实时同步到 Elasticsearch。这种架构不仅能够提高数据的实时性和可用性,还能为后续的数据分析和搜索提供强大的支持[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值