实时数据同步工具<Maxwell 操作案例>

文章目录

  • 案例一:监控MySQL中的数据并输出到控制台
  • 案例二:Maxwell监控mysql的数据输出到kafka
  • 案例三:监控MySQL指定表的数据并输出到kafka

案例一:监控MySQL中的数据并输出到控制台

  1. 运行Maxwell来监控mysql数据的更新

    [root@bigdata01 maxwell-1.29.2]# bin/maxwell --user='maxwell' --password='123456' --host='bigdata01' --producer=stdout
    
  2. 向mysql的test_maxwell数据库中创建表test

    mysql> CREATE TABLE test(`name` VARCHAR(30),sex VARCHAR(10),score INT);
    

    Maxwell控制台的输出内容如下:

    11:20:31,509 INFO  AbstractSchemaStore - storing schema @Position[BinlogPosition[mysql-bin.000002:67898], lastHeartbeat=1664594424396] after applying 
    "create table test(
    `name` varchar(30),
    sex varchar(10),
    score int)" 
    to test_maxwell, new schema id is 2
    
  3. 向表test中插入一条数据

    mysql> INSERT INTO test VALUES('ZhangSan','male',28); 
    

    向test表中插入数据时在maxwell控制台输出的数据如下:

    {
    	"database":"test_maxwell", //数据库名字
    	"table":"test", //表名
    	"type":"insert", //操作类型
    	"ts":1664594529, //操作时间
    	"xid":1403, //操作id
    	"commit":true, //提交状态
    	"data":   //数据
    		{"name":"ZhangSan",
    		"sex":"male",
    		"score":28
    		}
    }
    

    当插入2条数据时Maxwell控制台的输出内容:
    实时数据同步工具<Maxwell 操作案例>_第1张图片
    说明:当我们对表test插入两条数据,控制台就会有两个json日志,说明Maxwell是以数据行为为单位进行进行日志的采集

  4. 当我们修改test表中的一条数据时,

    mysql> UPDATE test SET score=26 WHERE  NAME='lisi';
    

    Maxwell控制台的输出如下:

    {
    	"database":"test_maxwell",
    	"table":"test",
    	"type":"update",  //对数据的操作类型
    	"ts":1664594697, //操作的时间
    	"xid":1855,   //操作id
    	"commit":true,  //任务提交状态true表示成功
    	"data":  //修改后的数据
    		{
    		"name":"lisi",
    		"sex":"male",
    		"score":26
    		},
    	"old":    //原来数据
    	{
    		"score":19
    	}
    }
    
  5. 删除test表中一条数据

    mysql> delete from test where name='lisi';
    

    maxwell 的控制台输出:

    {
        "database":"test_maxwell",
        "table":"test",
        "type":"delete",
        "ts":1664595306,
        "xid":3458,
        "commit":true,
        "data":
        {
            "name":"lisi",
            "sex":"male",
            "score":26
        }
    }
    

案例二:Maxwell监控mysql的数据输出到kafka

  1. 普通输出到kafka
    (1)此案例需要先启动zookeeper和kafka

    启动zk,启动kafka
    [root@bigdata01 maxwell-1.29.2]# xcall.sh jps
    ---------------------bigdata01----------------
    3648 Jps
    2947 QuorumPeerMain
    3331 Kafka
    ---------------------bigdata02----------------
    2378 QuorumPeerMain
    2939 Jps
    2764 Kafka
    ---------------------bigdata03----------------
    2965 Jps
    2760 Kafka
    2381 QuorumPeerMain
    

    (2)启动Maxwell监控binlog

    bin/maxwell --user='maxwell' --password='123456' --host='hadoop102'--producer=kafka --kafka.bootstrap.servers=bigdata01:9092 --kafka_topic=maxwell
    
    [root@bigdata01 ~]# xcall.sh jps
    	---------------------bigdata01----------------
    	4688 Maxwell
    	2947 QuorumPeerMain
    	3331 Kafka
    	4781 Jps
    	---------------------bigdata02----------------
    

    (3)打开 kafka的控制台的消费者消费maxwell主题

    bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --topic maxwell
    
    [root@bigdata01 ~]# jps
    4688 Maxwell
    2947 QuorumPeerMain
    3331 Kafka
    5195 Jps
    4812 ConsoleConsumer
    

    (4)对test_maxwell库中的test表进行操作
    插入一条数据

    mysql> INSERT INTO test VALUES('sisi','famale',100);
    

    (5)kafka消费者端的输出

    {
    	"database":"test_maxwell",
    	"table":"test",
    	"type":"insert",
    	"ts":1664595971,
    	"xid":4331,
    	"commit":true,
    	"data":{
    		"name":"wangwu",
    		"sex":"male",
    		"score":80
    	}
    }
    

    注意:kafka 消费者端输出结果与我们使用maxwell监控mysql时输出到maxwell控制台的json数据:格式相同

  2. Maxwell配置监控实现kafka分区控制

    在公司生产环境中,我们一般都会用 maxwell 监控多个 mysql 库的数据,然后将这
    些数据发往 kafka 的一个主题 Topic,并且这个主题也肯定是多分区的,为了提高并发度。
    那么如何控制这些数据的分区问题,就变得至关重要,实现步骤如下:

    (1)创建一个具有三个分区的topic

    [root@bigdata01 kafka]# bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 3 --replication-factor 3 --topic maxwell3
    

    (2)修改Maxwell的配置文件config.properties
    生产者环境设置为kafka,本文选择的分区模式是按数据库进行分区,控制分区模式包括 库名,表名,列名,主键

    producer=kafka
    kafka.bootstrap.servers=bigdata01:9092
    
    # mysql login info
    host=bigdata01
    user=maxwell
    password=123456
    
    kafka_topic=maxwell3
    producer_partition_by=database
    

    (3) 使用Maxwell的配置文件config.properties启动Maxwell进程

    [root@bigdata01 maxwell-1.29.2]# bin/maxwell --config ./config.properties
    

    (4)向Maxwell监控的数据库test_maxwell和test_maxwell3中分别插入一条数据,我们观察kafka的变化

    maxwell监控哪些数据库可以再my.cnf文件中进行配置
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    binlog_format=row
    binlog-do-db=test_maxwell
    binlog-do-db=test_maxwell2

    • 向test_maxwell库中的test表插入一条数据

    INSERT INTO test VALUES(‘wangwu’,‘male’,80);

    在kafka tool中查看kafka的状态
    实时数据同步工具<Maxwell 操作案例>_第2张图片

    • 向test_maxwell2库中的test表插入一条数据
    mysql> INSERT INTO test VALUES('sisi','famale',100);
    

    在kafka tool查看kafka状态
    实时数据同步工具<Maxwell 操作案例>_第3张图片

    注意:我们可以看见对test_maxwell库的操作传输到了kafka中主题maxwell3的1号分区,而对test_maxwell2中表的操作传输到了2号分区,证实了我们定制的安装数据库进行分区的规则。

案例三:监控MySQL指定表的数据并输出到kafka

(1)运行zookeeper和kafka

[root@bigdata01 maxwell-1.29.2]# xcall.sh jps
	---------------------bigdata01----------------
	3648 Jps
	2947 QuorumPeerMain
	3331 Kafka
	---------------------bigdata02----------------
	2378 QuorumPeerMain
	2939 Jps
	2764 Kafka
	---------------------bigdata03----------------
	2965 Jps
	2760 Kafka
	2381 QuorumPeerMain

(2)通过配置config.properties,定制化启动Maxwell并指定监控test_maxwell下的test表,并将数据传给kafka的maxwell3主题

  • 配置config.properties文件中的filter参数,指定监控某个表
filter = exclude: *.*, include: test_maxwell.test

注意:还可以设置 include: test_maxwell.*,通过此种方式来监控 mysql 某个库的所有
表,也就是说过滤整个库。读者可以自行测试。

  • 启动Maxwell,在Maxwell的目录下
    bin/maxwell --config ./config.properties
    

(3)向test表中插入一条数据,看kafka tool的变化和kafka消费者端控制台的输出情况

mysql> INSERT INTO test VALUES('lili','famale',100);
  • 在kafka tool查看
    实时数据同步工具<Maxwell 操作案例>_第4张图片

  • 在kafka消费者端控制台查看
    在这里插入图片描述

你可能感兴趣的:(数据同步工具,数据库,mysql,java,maxwell)