实时项目3(交易额需求)

1.0 采集数据

1.1 框架流程

实时项目3(交易额需求)

1.2 Canal 入门

1.2.1 什么是 Canal

阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。

Canal是用Java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal主要支持了MySQL的Binlog解析,解析完成后才利用Canal Client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基于Canal)。

1.2.2 使用场景

  1. 原始场景: 阿里Otter中间件的一部分
  2. 常见场景1:更新缓存
  3. 场景2:抓取业务数据新增变化表,用于制作拉链表**(没有创建时间的时候只能使用canal)**

拉链表主要是为了更简单的获取历史数据,获取数据最好的方式当然还是全量,但是用户表数据比较庞大,而且它属于缓慢更新维,没有必要用全量,我们用拉链表就可以了.


  1. 场景3:抓取业务表的新增变化数据,用于制作实时统计。

1.2.3 Canal的工作原理

Canal的工作原理很简单,就是把自己伪装成Slave,假装从Master复制数据

1.2.4 MySQL的Binary log

1.2.4.1 什么是Bin log

  • 记录了所有的DDL和DML(除了数据查询语句)语句
  • 使用场景:主从复制和数据恢复

1.2.4.2 Bin log的开启

在MySQL的配置文件(Linux: /etc/my.cnf , Windows: \my.ini)下,修改配置在[mysqld] 区块设置/添加

log-bin=mysql-bin

这个表示binlog日志的前缀是mysql-bin,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。每次mysql重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。

1.2.4.3 Bin log的分类设置

  1. statement:语句类型

    • 记录每次一执行写操作的语句
    • insert into t1 values(“1”,“zhangsan”);
    • 优点:数据量小
    • 缺点:特定情况下,数据的一致性没发保证(譬如随机数)
  2. row:行数据类型

    • 记录每次操作后每行记录的变化
    • “1”,“zhangsan”,DB,t1,insert
    • 优点:数据的一致性
    • 缺点:数据量大
  3. mixed:混合类型

    • statement的升级版,一定程度上解决了,因为一些情况而造成的statement模式不一致问题

在此场景中,canal 没有执行引擎,不能恢复成数据,只能使用row级别


还可以在配置文件中直接传入kafka,但是所有信息糅合在一个topic中,还是需要写代码解析出来然后分发各个topic


1.3 MySQL的准备

1.4 Canal 安装

1.5 数据监控模块—抓取订单数据