Maxwell解析binlong同步到kafka

一、准备

  1. java JDK 版本:java version "1.8.0_221"

  1. mysql版本:5.6.33-log MySQL Community Server (GPL)

  1. Maxwell下载地址:https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz (注意:Maxwell-1.30.0及以上版本不再支持JDK1.8。)

  1. kafka版本:kafka_2.12-3.4.0.tgz

以上jdk和mysql的安装这里不做详细的介绍了,大家自己去安装一下和查阅相关安装文档

二、mysql开始binlog日志

1.登录mysql

mysql -h 127.0.0.1 -u root -p

2.查看状态

show variables like '%bin%';
Maxwell解析binlong同步到kafka_第1张图片

如果log_bin是OFF我们需要开启binlog

3.查看安装路径

whereis mysql  #查看mysql安装路径命令

4.编辑mysql配置(my.cnf)

vim my.cnf

   # server-id表示单个结点的id,这里由于只有一个结点,所以可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同
   server_id=1
   #日志保存位置,5.5版本不生效 默认与表空间同一目录
   log_bin=mysql-bin
   #binlog的格式也:有三种:STATEMENT,ROW,MIXED。
   binlog-format=row
   #maxwell我们选择row格式比较好
注:MySQL Binlog模式
Statement-based:基于语句,Binlog会记录所有写操作的SQL语句,包括insert、update、delete等。
优点: 节省空间
缺点: 有可能造成数据不一致,例如insert语句中包含now()函数。
Row-based:基于行,Binlog会记录每次写操作后被操作行记录的变化。
优点:保持数据的绝对一致性。
缺点:占用较大空间。
mixed:混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based。
Maxwell要求Binlog采用Row-based模式。

5.重启mysql

第一种方式:service mysql restart #如果不可以

第二种方式:

#先停止mysql服务命令
cd /usr/local/mysql/bin
service mysqld stop
#在启动服务器mysql命令:
cd /usr/local/mysql
./bin/mysqld_safe --defaults-file=/home/mysql/conf/my.cnf &

三、安装kafka

  1. 下载kafka :Apache Kafka

Maxwell解析binlong同步到kafka_第2张图片
wget https://downloads.apache.org/kafka/3.4.0/kafka_2.12-3.4.0.tgz
  1. 解压安装包

tar -xzvf kafka_2.12-3.4.0.tgz
  1. 修改server.properties文件

cd /root/kafka/kafka_2.12-3.4.0/config
vim server.properties
broker.id=0 
port=9092 #端口号 
host.name=localhost #单机可直接用localhost
log.dirs=/opt/monitor/kafka/kafka_dat #日志存放路径可修改可不修改
zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181 

4.修改zookeeper.properties文件

vim  zookeeper.properties
Maxwell解析binlong同步到kafka_第3张图片

5.启动kafka

bin/kafka-server-start.sh -daemon  config/server.properties
或
/root/kafka/kafka_2.12-2.7.0/bin/kafka-server-start.sh /root/kafka/kafka_2.12-2.7.0/config/server.properties &

#创建topic

/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --create --bootstrap-server localhost:9092  --topic maxwell

#启动生产者

/root/kafka/kafka_2.12-3.4.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic maxwell

#启动消费者

/root/kafka/kafka_2.12-3.4.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic maxwell --from-beginning

#删除Topic

/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic maxwell

#查看Topic

/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092

可以开启两个终端,一个发送消息,一个接受消息。效果如下:

Maxwell解析binlong同步到kafka_第4张图片

四、安装配置Maxwell

  1. 下载安装包(Maxwell-1.30.0及以上版本不再支持JDK1.8

https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz

  1. 解压安装

tar -zxvf maxwell-1.29.2.tar.gz -C /root/maxwell/
  1. 拷贝一份原始配置文件

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

vim config.properties
Maxwell解析binlong同步到kafka_第5张图片
配置选项                              配置说明
producer=kafka        #实时监控到的日志发送到kafka生产者
kafka.bootstrap.servers=localhost:9092     #配置的本地kafka节点IP地址以及端口号,kafka默认端口号9092
host=xx.xx.xx.xx      #本地Mysql安装节点IP地址
user=*******           #用户名
password=******        #用户密码(按照自己设置输入)
kafka_topic=maxwell    #实时监控到的日志数据发送kafkaTopic下(默认发送maxwell)
#include_dbs=test        #过滤除test数据库下所有日志数据
#include_tables=         #表名,表名    可以指定不需要过滤日志数据的表名

5.登陆mysql,创建maxwell账号

mysql -uroot -p******
create database maxwell  #创建maxwell数据库
grant all privileges on *.* to maxwell@localhost identified by '123456';  #创建maxwell账户
#修改maxwell账户权限
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@127.0.0.1 IDENTIFIED BY '123456' WITH GRANT OPTION;

刷新配置

flush privileges;

查看权限

SELECT User, Host, authentication_string FROM mysql.user;
Maxwell解析binlong同步到kafka_第6张图片

6、启动maxwell

/root/maxwell/maxwell-1.29.2/bin/maxwell --config /root/maxwell/maxwell-1.29.2/config.properties --daemon

注意:如果maxwell启动报错,看看kafka的topic创建是否成功,还有就是kafka的消费偏移量问题,可以删除mysql中创建的maxwell数据库,重新在创建,然后在启动!

最后测试:

可以开3个命令窗口测试maxwell的binlog日志是否有进入kafka中

Maxwell解析binlong同步到kafka_第7张图片
Maxwell解析binlong同步到kafka_第8张图片

五、maxwell启动脚本

#!/bin/bash
 
MAXWELL_HOME=/opt/module/maxwell
 
status_maxwell(){
    result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`
    return $result
}
 
 
start_maxwell(){
    status_maxwell
    if [[ $? -lt 1 ]]; then
        echo "启动Maxwell"
        $MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon
    else
        echo "Maxwell正在运行"
    fi
}
 
 
stop_maxwell(){
    status_maxwell
    if [[ $? -gt 0 ]]; then
        echo "停止Maxwell"
        ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
    else
        echo "Maxwell未在运行"
    fi
}
 
 
case $1 in
    start )
        start_maxwell
    ;;
    stop )
        stop_maxwell
    ;;
    restart )
       stop_maxwell
       start_maxwell
    ;;
esac

代码解释:

1:

wc -l 统计条数

如果查看进程有则统计结果必然是1,

否则进程死了的话结果就是0

2:

$?就是上面调用status_maxwell方法的结果result的值

-lt 小于

如果值小于1 说明没启动,那么现在启动

否则显示正在运行

3:

同理如上

-gt大于

4:

最后的case in 判断后面的第一个变量值来执行相应命令

参考文档:https://www.cnblogs.com/traditional/p/11709235.html

你可能感兴趣的:(etl,kafka)