Maxwell监控MySQL的增量数据
前置条件
1.Kafka能正常使用
2.Mysql能正常使用
开启Mysql的binlog
如何开启binlog:
https://blog.csdn.net/qq_41489540/article/details/112709210
怎么配置binlog看上面的帖子,my.cnf内容换成下面的内容
my.cnf内容
#设置binlog清理时间
expire_logs_days = 5
#binlog每个日志文件大小
max_binlog_size = 50m
server-id=1
log-bin=master
binlog_format=row
# 这个数据库发生数据改变就产生binlog日志
binlog-do-db=gmall202004
给maxwell分配用户和创建存储maxwell数据的数据
在数据库中建立一个 maxwell 库用于存储 Maxwell 的元数据:
$ mysql -uroot -proot
mysql> CREATE DATABASE maxwell ;
# 分配一个账号可以操作该数据库
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456';
# 分配这个账号可以监控其他数据库的权限
mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
启动maxwell测试是否好用
启动命令:
bin/maxwell --user='maxwell' --password='123456' --host='zjj101' --producer=stdout
# --user:上述创建的用户
# --password:maxwell对应的密码
# --host:mysql的ip
# --producer:生产者,即将数据写入到哪里。stdout表示将数据输出到控制台,kafka表示写入到kafka.
在gmall202004 数据库里面随便创建一个表并且进行增删改查数据操作,然后能就能看到下面maxwell有输出json.
说明maxwell和之前binlog是好用的.
[root@zjj101 maxwell-1.25.0]# bin/maxwell --user='maxwell' --password='123456' --host='zjj101' --producer=stdout
Using kafka version: 1.0.0
16:11:12,343 WARN MaxwellMetrics - Metrics will not be exposed: metricsReportingType not configured.
16:11:12,857 INFO SchemaStoreSchema - Creating maxwell database
16:11:12,991 INFO Maxwell - Maxwell v1.25.0 is booting (StdoutProducer), starting at Position[BinlogPosition[master.000001:120], lastHeartbeat=0]
16:11:13,144 INFO AbstractSchemaStore - Maxwell is capturing initial schema
16:11:13,698 INFO BinlogConnectorReplicator - Setting initial binlog pos to: master.000001:120
16:11:13,789 INFO BinaryLogClient - Connected to zjj101:3306 at master.000001/120 (sid:6379, cid:38)
16:11:13,789 INFO BinlogConnectorLifecycleListener - Binlog connected.
{
"database":"gmall202004","table":"z_user_info","type":"delete","ts":1610784697,"xid":1540,"commit":true,"data":{
"id":30,"user_name":"zhang3","tel":"13810001010"}}
maxwell整合kafka
拷贝maxwell根目录下的config.properties.example 改名字为config.properties
cp config.properties.example config.properties
修改 config.properties
producer=kafka
# 因为你要把读到的数据发送到Kafka,所以这里需要Kafka地址
kafka.bootstrap.servers=hadoop202:9092,hadoop203:9092,hadoop204:9092
#将数据放到哪个Kafka的topic里面.
kafka_topic=gmall2020_db_m
# mysql 登录账号密码啥的
host=zjj101
user=maxwell
password=123456
#需要添加 后续初始化会用
client_id=maxwell_1
注意:数据默认还是输出到指定 Kafka 主题的一个 kafka 分区,因为多个分区并行可能会打乱binlog 的顺序(就是业务数据插入的顺序)
如果要提高并行度并且不考虑binlog的顺序(就是业务数据插入的顺序),首先设置 kafka 的分区数>1,然后设置 producer_partition_by 属性
可选值 producer_partition_by=database|table|primary_key|random| column
启动maxwell
编写maxwell脚本
maxwell.sh
/root/soft/maxwell-1.25.0/bin/maxwell --config /root/soft/maxwell-1.25.0/config.properties >/dev/null 2>&1 &
运行启动脚本
sh maxwell.sh
查看是否启动
发现已经启动了maxwell
[root@zjj101 bin]# jps
123016 Maxwell
启动消费者
kafka-console-consumer.sh --bootstrap-server zjj101:9092 --topic gmall2020_db_m
开始测试
在gmall202004 数据库里面随便创建一个表并且进行增删改查数据操作
此时发现kafka消费者已经数据json格式的数据
[root@zjj101 bin]# kafka-console-consumer.sh --bootstrap-server zjj101:9092 --topic gmall2020_db_m
{
"database":"gmall202004","table":"z_user_info","type":"delete","ts":1610785227,"xid":2119,"commit":true,"data":{
"id":31,"user_name":"li4","tel":"1389999999"}}
{
"database":"gmall202004","table":"z_user_info","type":"insert","ts":1610785232,"xid":2141,"xoffset":0,"data":{
"id":30,"user_name":"zhang3","tel":"13810001010"}}
{
"database":"gmall202004","table":"z_user_info","type":"insert","ts":1610785232,"xid":2141,"commit":true,"data":{
"id":31,"user_name":"li4","tel":"1389999999"}}