Mysql 流增量写入 Hdfs(一) --从 mysql 到 kafka
一. 概述
在大数据的静态数据处理中,目前普遍采用的是用 Spark + Hdfs (Hive / Hbase) 的技术架构来对数据进行处理。
但有时候有其他的需求,需要从其他不同数据源不间断得采集数据,然后存储到 Hdfs 中进行处理。而追加(append)这种操作在 Hdfs 里面明显是比较麻烦的一件事。所幸有了 Storm 这么个流数据处理这样的东西问世,可以帮我们解决这些问题。
不过光有 Storm 还不够,我们还需要其他中间件来协助我们,让所有其他数据源都归于一个通道。这样就能实现不同数据源以及 Hhdfs 之间的解耦。而这个中间件 Kafka 无疑是一个很好的选择。
这样我们就可以让 Mysql 的增量数据不停得抛出到 Kafka ,而后再让 storm 不停得从 Kafka 对应的 Topic 读取数据并写入到 Hdfs 中。
二. 基本知识
2.1 Mysql binlog 介绍
binlog 即 Mysql 的二进制日志。它可以说是 Mysql 最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
上面所说的提到了 DDL 和 DML ,可能有些同学不了解,这里顺便说一下:
- DDL:数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER...
- DML:数据操纵语言DML主要有三种形式:插入(INSERT), 更新(UPDATE),以及删除(DELETE)。
在 Mysql 中,binlog 默认是不开启的,因为有大约 1% (官方说法)的性能损耗,如果要手动开启,流程如下:
- vi编辑打开mysql配置文件:
vi /usr/local/mysql/etc/my.cnf
在[mysqld] 区块设置/添加如下,
log-bin=mysql-bin
注意一定要在 [mysqld] 下。
- 重启 Mysql
pkill mysqld /usr/local/mysql/bin/mysqld_safe --user=mysql &
2.2 kafka
这里只对 Kafka 做一个基本的介绍,更多的内容可以度娘一波。
上面的图片是 kafka 官方的一个图片,我们目前只需要关注 Producers 和 Consumers 就行了。
Kafka 是一个分布式发布-订阅消息系统。分布式方面由 Zookeeper 进行协同处理。消息订阅其实说白了吧,就是一个队列,分为消费者和生产者,就像上图中的内容,有数据源充当 Producer 生产数据到 kafka 中,而有数据充当 Consumers ,消费 kafka 中的数据。
上图中的 offset 指的是数据的写入以及消费的位置的信息,这是由 Zookeeper 管理的。也就是说,当 Consumers 重启或是怎样,需要重新从 kafka 读取消息时,总不能让它从头开始消费数据吧,这时候就需要有个记录能告诉你从哪里开始重新读取。这就是 offset 。
kafka 中还有一个至关重要的概念,那就是 topic 。不过这个其实还是很好理解的,比如你要订阅一些消息,你肯定是不会订阅所有消息的吧,你只需要订阅你感兴趣的主题,比如摄影,编程,搞笑这些主题。而这里主题的概念其实和 topic 是一样的。总之,可以将 topic 归结为通道,kafka 中有很多个通道,不同的 Producer 向其中一个通道生产数据,也就是抛数据进去这个通道,Comsumers 不停得消费通道中的数据。
而我们要做的就是将 Mysql binlog 产生的数据抛到 kafka 中充当作生产者,然后由 storm 充当消费者,不停得消费数据并写入到 Hdfs 中。
至于怎么将 binlog 的数据抛到 kafka ,别急,下面我们就来介绍。
2.3 maxwell
maxwell 这个工具可以很方便得监听 Mysql 的 binlog ,然后每当 binlog 发生变化时,就会以 json 格式抛出对应的变化数据到 Kafka 中。比如当向 mysql 一张表中插入一条语句的时候,maxwell 就会立刻监听到 binlog 中有对应的记录增加,然后将一些信息包括插入的数据都转化成 json 格式,然后抛到 kafka 指定的 topic 中。
除了 Kafka 外,其实 maxwell 还支持写入到其他各种中间件,比如 redis。
同时 maxwell 是比较轻量级的工具,只需要在 mysql 中新建一个数据库供它记录一些信息,然后就可以直接运行。
三. 使用 maxwell 监听 binlog
接下来我们将的是如果使用 maxwell ,让它监听 mysql 的 binlog 并抛到 kafka 中。maxwell 主要有两种运行方式。一种是使用配置文件,另一种则是在命令行中添加参数的方式运行。这里追求方便,只使用命令行的方式进行演示。
这里介绍一下简单的将数据抛到 kafka 的命令行脚本吧。
bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \ --producer=kafka --kafka.bootstrap.servers=localhost:9092 --kafka_topic=maxwell --port=3306
各项参数说明如下:
- user:mysql 用户名
- password:mysql 密码
- host:Mysql 地址
- producer:指定写入的中间件类型,比如还有 redies
- kafka.bootstrap.servers:kafka 的地址
- kafka_topic:指明写入到 kafka 哪个 topic
- port:mysql 端口
启动之后,maxwell 便开始工作了,当然如果你想要让这条命令可以在后台运行的话,可以使用 Linux 的 nohup 命令,这里就不多赘述,有需要百度即可。
这样配置的话通常会将整个数据库的增删改都给抛到 kafka ,但这样的需求显然不常见,更常见的应该是具体监听对某个库的操作,或是某个表的操作。
在升级到 1.9.2(最新版本)后,maxwell 为我们提供这样一个参数,让我们可以轻松实现上述需求:--filter。
这个参数通常包含两个配置项,exclude 和 include。意思就是让你指定排除哪些和包含哪些。比如我只想监听 Adatabase 库下的 Atable 表的变化。我可以这样。
--filter='exclude: *.*, include: Adatabase.Atable'
这样我们就可以轻松实现监听 mysql binlog 的变化,并可以定制自己的需求。
OK,这一章我们介绍了 mysql binlog ,kafka 以及 maxwell 的一些内容,下一篇我们将会看到 storm 如何写入 hdfs 以及定制一些策略。see you~~
欢迎关注公众号哈尔的数据城堡,里面有数据,代码,以及深度的思考。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于WebGL架构的3D可视化平台—新风系统演示
新风系统是根据在密闭的室内一侧用专用设备向室内送新风,再从另一侧由专用设备向室外排出,在室内会形成“新风流动场”,从而满足室内新风换气的需要。实施方案是:采用高风压、大流量风机、依靠机械强力由一侧向室内送风,由另一侧用专门设计的排风风机向室外排出的方式强迫在系统内形成新风流动场。在送风的同时对进入室内的空气进过滤、消毒、杀菌、增氧、预热(冬天)。 接下来就用ThingJs平台来搭建一个新风系统第一步,利用CampusBuilder搭建模拟场景。CampusBuilder的模型库有各种各样的模型,使我们搭建出的场景更逼真。 1 //加载场景代码 2 var app = new THING.App({ 3 // 场景地址 4 "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/新风演示2", 5 6 }); 第二步,创建三个数组来保存每个风的模型。 1 var hotWindGroup = []; 2 var coolWindGroup = []; 3 var newWindG...
- 下一篇
PostgreSQL技术周刊第8期:用PostgreSQL 做实时高效搜索引擎
PostgreSQL(简称PG)的开发者们: 云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊将会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊和关注PostgreSQL社区公众号。 活动预告 【直播预约】2018Postgres中国用户大会(大象汇) “Postgres中国技术大会2018(大象汇,第8届)”将于2018年12月15、16日在浙江吉利控股集团有限公司总部(杭州市滨江区江陵路1760号)举行.大会由中国Postgres用户会(China Postgres User Group,简称:CPUG)主办,是一场汇聚各界PostgreSQL大拿、交流最新业界技术动态和真实应用案例的盛宴。PG大象汇的成功举办推动了PostgreSQL数据库在中国的发展,也拉近了中国与世界的距离。 活动详情、参与报名地址:https://yq.aliyun.com/articles/673933 最新动态 PostgreSQL 11 新特性解读:...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6