利用maxwell 解析binlog 教程 CDC

下载安装

  1. 下载
wget https://github.com/zendesk/maxwell/releases/download/v1.39.6/maxwell-1.39.6.tar.gz
  1. 配置脚本 由于 下载的版本 要求 jdk11,maxwell.sh
#!/bin/bash

export JAVA_HOME=/opt/zulu18.32.13-ca-jdk18.0.2.1-linux_x64
MAXWELL_HOME=/opt/maxwell-1.39.6/
case $1 in
    start)
         $MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --filter = 'exclude: *.*,include: xl_vip.*'
    ;;
    stop)
        ps -ef | grep maxwell | grep -v grep|awk '{print $2}'|xargs kill
    ;;
esac
  1. mysql 需是开启了 binlog ,也配置了个库给 maxwell 存放元数据管理
# /etc/my.cnf

[mysqld]
# maxwell needs binlog_format=row
binlog_format=row
server_id=1 
log-bin=master
CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456';
CREATE USER 'maxwell'@'localhost' IDENTIFIED BY '123456';
GRANT ALL ON maxwell.* TO 'maxwell'@'%';
GRANT ALL ON maxwell.* TO 'maxwell'@'localhost';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'localhost';

配置文件详解

  1. 元数据管理

#     *** mysql ***

# 本身 元数据 数据存在 这个 mysql  内,同时也可以监听本 实例的binlog
host=hostname

# 端口
port=3306

# 用户名
user=maxwell

# 密码
password=maxwell

# 其他jdbc 连接参数
jdbc_options=opt1=100&opt2=hello

# 元数据存储所在库
schema_database=maxwell

# 如果mysql  binlog 开启了GTID 就打开这个
gtid_mode=true
  1. 生产者 ,可以打印到屏幕 或者 文件,也剋以输出到kafka 以及 redis
#stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis|bigquery
producer=stdout

redis 输出配置

## redis
# redis 连接地址
redis_host=192.168.12.197
# redis 端口
redis_port=6379
# 认证信息
#redis_auth=redis_auth
# 选择数据库
redis_database=0

# redis key 可以动态配置:%{database}数据库:%{table}表:%{type}(插入/更新/删除)
redis_key=maxwell:%{database}:%{table}

# this can be static, e.g. 'maxwell', or dynamic, e.g. namespace_%{database}_%{table}
# redis_pub_channel=namespace_%{database}_%{table}
# this can be static, e.g. 'maxwell', or dynamic, e.g. namespace_%{database}_%{table}
#redis_list_key=maxwell
#redis_list_key=maxwell:%{database}:%{table}
# this can be static, e.g. 'maxwell', or dynamic, e.g. namespace_%{database}_%{table}
# Valid values for redis_type = pubsub|lpush. Defaults to pubsub

# 模式可以发布订阅 ,或者 list  (pubsub|lpush)
redis_type=lpush

kafka 输出配置

# kafka 服务地址
kafka.bootstrap.servers=192.168.12.222:9092,192.168.12.223:9092,192.168.12.224:9092
# 动态根据 库表名生成topic
kafka_topic=topic_cdc_%{database}_%{table}
# 选择kafka分区时使用的哈希函数 [default, murmur3] 
kafka_partition_hash=murmur3
# 数据分区 根据 ,因为kafka 同一topic 并不能保证不同分区 数据顺序一致性 [database, table, primary_key, transaction_id, thread_id, column]
producer_partition_by=table
# 提供高吞吐量性能。
kafka.compression.type=snappy
kafka.retries=0
kafka.acks=1
#kafka.batch.size=16384

# 至少一次交付, 最好配上重试 ,可能会导致 消息重复
kafka.acks = all
kafka.retries = 5 

输出字段解析

# kafka 服务地址

你可能感兴趣的:(数据库,java,redis,kafka)