Maxwell

3/4/2022 Maxwell

# Maxwell 介绍

Maxwell 是由美国 zendesk 开源,用 java 编写的 Mysql 实时抓取软件,其抓取的原理也是基于 binlog。

# Maxwell 和 canal 工具对比

Maxwell 没有 canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列或 redis。如果需要多个实例,通过指定不同配置文件启动多个进程。

Maxwell 有一个亮点功能,就是 canal 只能抓取最新数据,对已存在的历史数据没有办法处理。而 Maxwell 有一个 bootstrap 功能,可以直接引导出完整的历史数据用于初始化,非常好用。

Maxwell 不能直接支持 HA,但是它支持断点还原,即错误解决后重启继续上次点儿读取数据。

Maxwell 比 Canal 更加轻量级

# 安装 Maxwell

  1. 上传解压文件

  2. 在数据库(ha01)中建立一个 maxwell 库用于存储 Maxwell 的元数据

    CREATE DATABASE maxwell
    
    1
  3. 分配一个账号可以操作该数据库

    set global validate_password_length=4;
    
    set global validate_password_policy=0;
    
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO'maxwell'@'%' IDENTIFIED BY 'maxwell' ;
    
    1
    2
    3
    4
    5
  4. 分配这个账号可以监控其他数据库的权限

    GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
    
    1
  5. 使用 Maxwell 监控抓取 MySQL 数据

    cp config.properties.example  config.properties
    
    1
  6. 修改配置文件

    producer=kafka
    kafka.bootstrap.servers=ha01:9092,ha02:9092,ha03:9092
    #需要添加
    kafka_topic=gmall2020_db_m
    # mysql login info
    host=ha01
    user=maxwell
    password=123456
    #需要添加 后续初始化会用
    client_id=maxwell_1
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    注意:默认还是输出到指定 Kafka 主题的一个 kafka 分区,因为多个分区并行可能会打乱binlog 的顺序

    如果要提高并行度,首先设置 kafka 的分区数>1,然后设置 producer_partition_by 属性可选值 producer_partition_by=database|table|primary_key|random| column

  7. 在/home/damoncai/bin 目录下编写 maxwell.sh 启动脚本

    vim /home/damoncai/bin/maxwell.sh
    
    /opt/module/maxwell-1.25.0/bin/maxwell --config /opt/module/maxwell-1.25.0/config.properties >/opt/module/maxwell-1.25.0/maxwell.log 2>&1 &
    
    1
    2
    3
  8. 授予执行权限

  9. 执行脚本

  10. 启动 Kafka 消费客户端,观察结果

    bin/kafka-console-consumer.sh --bootstrap-server ha01:9092 --topic gmall2020_db_m
    
    1
  11. 向bin-log中配置的数据库添加数据

Last Updated: 3/14/2022, 1:43:10 PM