docker创建 Maxwell容器 并连通Kafka

3 篇文章 0 订阅
1 篇文章 0 订阅

概要

学到使用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格式),成功!

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值