mysql+debezium+kafka+logstash+hdfs
利用debezium解析mysql的日志文件,将解析得到的日志文件传到kafka的topic中,最后利用logstash消费kafka中的数据到hdfs中。
首先开启mysql的binlog
修改/etc/my.cnf文件,在里面添加
server-id = 100
log-bin = mysql_bin
binlog_format = ROW
Mysql需要一个有mysql slave权限的账号,如果mysql不在本机,则需要一个远程权限,防火墙放行。
CREATE USER canal IDENTIFIED BY 'root';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
1.安装debezium解析mysql日志信息
1),下载debezium,下载地址:
https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/0.9.5.Final/debezium-connector-mysql-0.9.5.Final-plugin.tar.gz
2). 将debezium解压到confluent的插件目录下,具体目录为{CONFLUENTZ-HOME}/share/java目录下
3)写好配置文件(此处解析的是xx机器上的joinus库中的数据)
name=mysql
connector.class=io.debezium.connector.mysql.MySqlConnector
database.hostname=xx.xxx.xx.xx(此处为数据库所在主机)
database.port=xxxx(数据库的端口号)
database.user=root(用户名)
database.password=xxxx(用户密码)
database.server.id=100
database.server.name=test0530_2(该解析的任务的名称)
database.whitelist=joinus(要解析的数据库的名字)
database.history.kafka.bootstrap.servers=xx.xxx.xx.xx:9092(具体解析到的kafka实例)
database.history.kafka.topic=history.test_0530_2
include.schema.changes=true
include.query=true
time.precision.mode=connect
decimal.handling.mode=string
bigint.unsigned.handling.mode=long
4)以独立模式启动kafka connect,此时kafka会对数据库中的每一个表创建一个topic,消费相应的topic,即可获得binlog解析信息。
2.使用logstash将数据从kafka消费到hdfs中
1),下载安装logstash,(作为ELK中的L,logstash的版本最好和已经安装的elasticsearch和kibana版本一致),此处安装的6.8版本。下载地址如下:
https://artifacts.elastic.co/downloads/logstash/logstash-6.8.0.tar.gz
下载完成后,直接进行解压使用即可。
简单测试使用,在logstash安装目录下,输入
bin/logstash -e 'input { stdin { } } output { stdout {} }'
如果出现以下情况,
在logstash的安装目录下(此处为/etc/software/logstash)/etc/software/logstash-6.8.0/data,在此目录下有一个.lock文件,删除即可。
重新输入上述命令,结果如下
接下来,编辑配置文件实现消费kafka数据到hdfs中(位置为test目录下的hdfs1.conf)
input {
kafka {
auto_offset_reset => "earliest"(从最初的偏移量开始消费,latest是从最新的偏移量开始消费)
codec => "plain"
group_id => "es2"
topics => ["test0530_1.joinus.interviewer"] (要消费的主题)
bootstrap_servers => "192.168.16.32:9092"(消费的kafka实例)
}
}
output {
webhdfs {
codec => plain {
format => "%{message}"
}
host => "192.168.16.40"(hdfs地址)
port => 50070
user => "hdfs"
path => "/mysql-hdfs1/%{+YYYY}-%{+MM}-%{+dd}/mytopic-%{+HH}.log"(存入的文件目录)
flush_size => 500
idle_flush_time => 10
retry_interval => 0.5
}
stdout { codec => rubydebug }
}
执行该配置文件
bin/lobstash -f test/hdfs1.conf