debezium+kafka connector 实时采集mysql

本文介绍了如何配置MySQL以启用二进制日志,并创建用户和授权,然后详细阐述了安装和启动Kafka及Kafka-Connect的过程。接着,展示了如何配置和启动Debezium MySQL Connector,用于将数据库变更实时同步到Kafka。最后,提到了可能遇到的问题以及相关API的使用,并提供了相关文档链接。

配置mysql

创建用户并授权

创建用户

CREATE USER 'debezium'@'%' IDENTIFIED BY 'password';

授予权限

GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'debezium' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

启用二进制日志

1.检查是否支持二进制日志

SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::" FROM information_schema.global_variables WHERE variable_name='log_bin';

2.如果是OFF,请使用以下属性配置您的 MySQL 服务器配置文件并重启服务器,如下表所述:

log_bin           = mysql-bin
binlog_format     = ROW
binlog_row_image  = FULL
expire_logs_days  = 10

3.检查二进制文件

SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::" FROM information_schema.global_variables WHERE variable_name='log_bin';

启用gdit

因为现在使用的单节点暂时未开启

安装kafka

启动kafka-connect

修改config/connect-distributed.properties的plugin.path和bootstrap.servers的值

修改日志文件 config/connect-log4j.properties

log4j.rootLogger=INFO, kafkaConnectAppender

log4j.appender.kafkaConnectAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaConnectAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.kafkaConnectAppender.File=/hadoop/kafka_2.11-0.11.0.2/logs/kafka-connect.log
log4j.appender.kafkaConnectAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaConnectAppender.layout.ConversionPattern=[%d] %p %m (%c)%n

log4j.logger.org.apache.zookeeper=ERROR
log4j.logger.org.I0Itec.zkclient=ERROR
log4j.logger.org.reflections=ERROR

启动kafka-connnector   bin/connect-distributed.sh -daemon config/connect-distributed.properties

api查看kafka信息http://ip:8083

启动mysql-connector

1.配置mysql-connector文件

{
    "name": "inventory-connector", 
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector", 
        "database.hostname": "mysqlip", 
        "database.port": "3306", 
        "database.user": "debezium", 
        "database.password": "password", 
        "database.server.id": "184054", 
        "database.server.name": "fullfillment", 
        "database.include.list": "数据库1,数据库2", 
        "database.history.kafka.bootstrap.servers": "kafka:9092", 
        "database.history.kafka.topic": "dbhistory.fullfillment", 
        "include.schema.changes": "true" 
    }
}

其他详细配置参数官方文档https://debezium.io/documentation/reference/1.6/connectors/mysql.html#mysql-connector-properties

2.通过api启动mysql-connect

post方式提交http://ip:8083/connectors,参数为json文件

3.查看connect信息:get http://ip:8083/connectors 查看所有的connnectors

get http://ip:8083/connectors/inventory-connector/status 获取当前的状态

详细api请看:https://kafka.apache.org/documentation.html#connect_rest

查看kafka

1.dbhistory.fullfillment为表结构修改数据

2..dbhistory.fullfillment.[table] 为数据修改数据

可能遇到的问题:

ClassNotFoundException: org.apache.kafka.connect.header.ConnectHeaders

kafka版本过低,使用1.1及以上的版本即可

### 使用 Debezium 实现实时数据采集Kafka Debezium 可以作为连接器部署在 Kafka Connect 中来实现从各种数据库捕获变更并将这些变更加入到 Kafka 主题中[^2]。 #### 安装和配置 Debezium Connector 为了设置 Debezium 来监控特定的数据库并将其变化发送给 Kafka,需要先安装对应的 Debezium 连接器。对于 MySQL 数据库为例: 1. **启动 Zookeeper 和 Kafka** 确保已经有一个正在运行的 Kafka 集群以及相应的 Zookeeper 服务实例。 2. **创建 Kafka Topic** 创建一个或多个目标主题用于存储来自数据库的变化记录。例如: ```bash kafka-topics.sh --create --topic dbserver1.inventory.customers \ --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1 ``` 3. **配置 Debezium Source Connector** 下面是一个 JSON 文件 `mysql-source.json` 的例子,它定义了如何配置 Debezium MySQL Connector: ```json { "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "localhost", "database.port": "3306", "database.user": "debezium", "database.password": "dbz", "database.server.id": "184054", "database.server.name": "dbserver1", "database.include.list": "inventory", "table.whitelist": "inventory.customers,inventory.orders", "column.blacklist": "", "snapshot.mode": "initial", "include.schema.changes": "true" } } ``` 4. **提交 Configuration 到 Kafka Connect REST API** 将上述配置文件的内容 POST 至 Kafka Connect 的 RESTful 接口以注册新的 source connector: ```bash curl -X POST http://localhost:8083/connectors/ \ -H 'Content-Type: application/json' \ -d @mysql-source.json ``` 一旦完成以上步骤,Debezium 就会开始监听指定数据库中的任何 DDL/DML 操作,并将它们转换成事件发布到预先设定好的 Kafka topic 上[^3]。 ```python from confluent_kafka import Consumer, Producer import json producer_conf = {'bootstrap.servers': 'localhost:9092'} consumer_conf = { 'bootstrap.servers': 'localhost:9092', 'group.id': 'my-group', 'auto.offset.reset': 'earliest' } def consume_messages(topic_name): consumer = Consumer(consumer_conf) consumer.subscribe([topic_name]) try: while True: msg = consumer.poll(1.0) if msg is None: continue if msg.error(): print(f"Consumer error: {msg.error()}") continue print(json.loads(msg.value().decode('utf-8'))) finally: consumer.close() consume_messages('dbserver1.inventory.customers') ``` 此 Python 脚本展示了怎样利用 Confluent Kafka 库消费由 Debezium 发布的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值