需要环境
- Linux环境
- MySQL (版本:5.7.19)
- kafka (版本:kafka_2.11-1.0.0)
- zookeeper (版本:zookeeper-3.4.10)
- Maxwell (版本:maxwell-1.17.1)
配置Linux环境下MySQL
开启Binlog
- 我的MySQL版本是5.7.19
- 开启Binlog,修改 /etc/my.cnf 配置文件(打红对勾的三处)
配置Binlog之后,见下图↓↓↓
配置Binlog之前,见下图↓↓↓
配置Maxwell数据库权限
CREATE USER 'maxwell_sync'@'%' IDENTIFIED BY 'maxwell_sync';
-- Maxwell需要在待同步的库上建立schema_database库,将状态存储在`schema_database`选项指定的数据库中(默认为`maxwell`)
GRANT ALL on maxwell.* to 'maxwell_sync'@'%';
-- 把maxwell数据库的所有表授权给maxwell_sync用户
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'maxwell_sync'@'%';
FLUSH PRIVILEGES;
---------------------
创建数据库
create database test_maxwell;
use test_maxwell;
create table if not exists `user_info`(
`userid` int,
`name` varchar(100),
`age` int
)engine=innodb default charset=utf8;
---------------------
配置Kafka并启动Maxwell
说明(以下我的kafka是安装在主机名叫bigdata11,注意kafka里的配置文件端口号要和命令行里给的端口号一致)
- 启动zookeeper
[root@bigdata11 ~]# zkServer.sh start
- 启动kafka
[root@bigdata11 kafka_2.11-1.0.0]# bin/kafka-server-start.sh config/server.properties
- 创建一个主题叫maxwell以便于接受数据
注意:bigdata11是安装kafka的那台主机名。kafka生产者配置的端口号要与maxwell配置的kafka.bootstrap.servers端口号一致
bin/kafka-topics.sh --create --zookeeper bigdata11:2181 --replication-factor 1 --partitions 3 --topic maxwell
- 启动生产者
bin/kafka-console-producer.sh --broker-list bigdata11:9092 --topic maxwell
- 启动消费者
bin/kafka-console-consumer.sh --bootstrap-server bigdata11:9092 --topic maxwell
- 开启maxwell命令行
注意,如果没有设置,maxwell默认是把监听的mysql的binlog日志发送到kafka的主题叫maxwell的topic上的
[root@bigdata11 maxwell-1.17.1]# bin/maxwell \
> --host='localhost' \
> --user='maxwell_sync' \
> --password='maxwell_sync' \
> --kafka_topic=maxwell \
> --port=3306 \
> --producer=kafka \
> --kafka.bootstrap.servers=bigdata11:9092
host参数是安装mysql的那台主机,最后的kafka.bootstrap.servers是安装kafka集群的节点主机名和端口号
开始测试
- 第一步:依次把zookeeper启动,kafka启动,创建好主题topic,然后启动生产者,启动消费者,最后在启动Maxwell
- 第二步:进入mysql,然后use test_maxwell数据库;进入后,开始执行操作,如果前面都配置好的话,你执行一个sql语句,kafka消费者那边是会自动监听到对应数据的。
mysql> update user_info set name='name312',age=23 where userid=1;
见下图↓↓↓