概要
学到使用maxwell模拟mysql主从复制的slave机,获取master机的bin-log日志后在执行一遍,一开始使用maxwell包想在docker里的linux容器直接解压安装使用,结果发现和kafka版本不匹配(个人觉得是这个问题)换了jdk版本和maxwell版本,高的低的版本都换了还是不能传到kafka,但是切换到producer=stdout 即打印在控制台是可以的,说明就是不能匹配上kafka,而且报错还很迷:
ERROR MaxwellKafkaProducer - UnknownServerException @ Position[BinlogPosition[mysql-bin.000002:749271], lastHeartbeat=0]
干脆想着使用独立的容器单独起一个maxwell算了,开始尝试单独起maxwell然后联通mysql和Kafka。
拉取maxwell镜像
docker search maxwell
找到zendesk/maxwell 然后pull
添加容器卷修改配置文件
要使用maxwell连接mysql和kafka集群 需要在配置文件里面添加mysql服务器ip/端口号/用户名/密码
要连接Kafka集群也需要指定Kafka集群的host:port
其中连接mysql还需要单独为maxwell进程创建一个远程访问用户,高版本mysql不支持一键创建远程用户了:可以参考这篇文章:MySQL ERROR 1064 (42000)——不管怎样grant总是报错,怎么回事?
daemon=true
# 第一次启动时建议改为debug,可以开到mysql数据与kafka请求,稳定后再改为info
log_level=info
producer=kafka
kafka.bootstrap.servers=IP1:9092,IP2:9092,IP3:9092
# 会往 kafka下主题为'test'的分区下推送数据
kafka_topic=topic_db
#当producer_partition_by设置为table时,Maxwell会将生成的消息根据表名称进行分区,不同的表将会被分配到不同的分区中,默认为database
producer_partition_by=primary_key
client_id=maxwell_1
# mysql login info 需要先在mysql创建maxwell用户
host=IP
port=3306
user=maxwell
password=Admin123@qwe
schema_database=maxwell
启动maxwell容器
docker run --name maxwell --net spark-cluster-1 \
-v ./:/etc/maxwell/ \
zendesk/maxwell bin/maxwell --config /etc/maxwell/config.properties
指定容器名 网络 挂载数据卷
镜像名 启动容器的时候终端需要执行的命令(即启动maxwell进程)
启动后info里没有warn/error等报错警告信息说明成功!
检查连接情况
创建的maxwell库里生成了maxwell元数据表说明连接mysql成功!
Kafka集群里生成了topic_db主题目前说明maxwell与kafka连通 但是还没有传输数据,接下来修改mysql指定监控database里的tables,来看看maxwell是否能够将bin-log日志成功传给kafka。PS:之前在linux环境容器里就是这一步出错,maxwell可以收到bin-log日志 但是无法传给kafka。
修改tables:
发现kafka这次成功得到数据(bin-log日志就是json格式),成功!