在线QQ客服:1922638
专业的SQL Server、MySQL数据库同步软件
模拟的业务场景:
大型电子商务网站需要每天分析每日交易量。如果使用mysql进行分析,它将非常慢,甚至会导致mysql崩溃。要分析海量数据,您需要将mysql中的数据同步到其他海量数据存储介质(HDFS,hbase)。如何出口呢?
sqoop解决方案一:
使用sqoop定期将mysql数据导出到hbase或hdfs
Sqoop导出mysql数据,需要通过sql语句查询数据,然后执行导出
存在的问题
MySQL承受着很大的压力。当sqoop再次执行查询时,它需要执行sql查询。为了增加mysql的压力,mysql的速度较慢
Logstash解决方案二
通过logstash将mysql数据提取到kafka
在logstatsh中编写一条SQL语句,以从mysql查询数据
存在的问题
Logstash还需要在mysql中执行sql语句,这也会增加mysql的压力并降低mysql的速度
渠道解决方案三
运河来解析mysql中的binlog日志以获取数据
无需使用SQL查询mysql,就不会增加mysql的压力
实际步骤:
建议使用sqlyog创建数据库,创建表
创建数据库
创建数据库表
mysql打开binlog
Binlog日志介绍
用于记录mysql中的添加,删除,修改操作
选择操作将不会保存在binlog中
您必须在mysql中打开binlog函数以生成binlog日志
binlog日志是一系列二进制文件
打开binlog
步骤
修改mysql配置文件并添加binlog支持
重新启动mysql并检查binlog是否已成功配置
实施
使用vi打开/etc/my.cnf
添加以下配置
[mysqld]
log-bin =/var/lib/mysql/mysql-bin
binlog-format = ROW
server_id = 1
配置说明
#配置binlog日志到/var/lib/mysql目录的存储路径,文件以mysql-bin开始
log-bin =/var/lib/mysql/mysql-bin
配置mysql中每行记录的更改将详细记录
binlog-format = ROW
配置当前计算机的服务ID(如果它是mysql集群,则无法重复)
server_id = 1
6.重新启动mysql
服务mysql重新启动
7.使用mysql-u root-p登录mysql并执行以下命令
显示类似”%log_bin%”的变量;
8.mysql输出以下内容,表明binlog已成功打开
9.转到/var/lib/mysql,您可以看到已经生成了mysql-bin.000001文件
运河原则
5
10.Canal模拟mysql slave的交互协议,假装是mysql slave
11.发送转储协议给mysql master
12.mysql主服务器接收转储协议,并将二进制日志发送到从服务器(运河)
13.运河解析二进制日志字节流对象
运河获取程序构建
使用Java语言解析运河中的binlog日志并将其写入Kafka
编写配置文件加载代码
创建GlobalConfigUtil工具类,并在application.properties中读取运河和kafka配置
添加main方法以测试是否可以正确读取配置
实施
创建GlobalConfigUtil以读取application.properties中的配置。使用以下代码读取application.properties中的配置
在application.properties中阅读运河和kafka配置
编写主要方法来测试是否可以正确读取配置
参考代码
注意:
使用ResourceBundle.getBundle(”应用程序”,Locale.ENGLISH);读取application.properties即可读取配置文件,无需输入后缀名
编写Kafka工具类代码KafkaSender.java
渠道解析binlog日志工具代码
1.解析mysql中的binlog日志
2.将已解析的数据写入Kafka
测试工具类代码
启动mysql
运河
启动Zookeeper集群
启动kafka集群
在kafka中创建运河主题
bin/kafka-topics.sh-创建–zookeeper cdh1:2181-复制因子2-分区3-主题运河
启动Kafka控制台使用者程序
bin/kafka-console-consumer.sh–zookeeper cdh1:2181–from-beginning–topic运河
启动工具渠道同步程序
打开sqlyog并将一些数据插入mysql
如果您可以看到以下以kafka印刷的消息,则表明运河一直在正常运行
配置文件如下: