Canal或maxwell实时采集MySQL数据到Kafka

Maxwell 数据采集工具详解 Maxwell是一款用于MySQL数据库的开源实时变更数据捕获(CDC)工具。它能够读取MySQL的binlog,将数据变更捕获并以JSON格式推送到Kafka、Kinesis等目标系统,广泛应用于数据同步、实时处理、审计日志等场景。Maxwell具备实时性强、开源免费、多目标支持等优点,但也存在配置复杂、依赖binlog等限制。通过合理的部署和优化,Maxwell可以在复杂的数据处理系统中提供高效的实时数据捕获和推送服务。 阅读详情

MySQL的binlog

  • 二进制日志
  • 以事件形式记录了所有的DDL和DML,还包含语句所执行的消耗的时间
  • MySQL的binlog是事务安全型的
  • 开启binlog会有1%左右的性能损耗
  • 一般场景:MySQL主从复制

MySQL主从复制原理图

1、编辑MySQL配置

sudo find / -name my.cnf
sudo vim /etc/my.cnf

添加如下内容

server-id=1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=b1
参数说明
server-idMySQL主从复制时,主从之间每个实例都有独一无二的ID
log-bin生成的日志文件的前缀
binlog_formatbinlog格式
binlog-do-db指定哪些库需要写到binlog;如果不配置,就会是所有库
binlog_format参数值参数值说明空间占用数据一致性
statement语句级:记录每次一执行写操作的语句小如果用binlog进行数据恢复,执行时间不同可能会导致数据不一致
row行级:记录每次操作后每行记录的变化大绝对支持
mixedstatement的升级版小极端情况下仍会造成数据不一致

2、重启MySQL

sudo systemctl restart mysqld

3、检测配置是否成功

mysql -uroot -p123456
show variables like'%log_bin%';

查看log_bin相关变量

sudo ls -l /var/lib/mysql | grep mysql-bin

查看binlog文件

4、MySQL数据准备

被监控的MySQL数据

DROP DATABASE IF EXISTS b1;
CREATE DATABASE b1;
CREATE TABLE b1.t11 (f1 INT PRIMARY KEY,f2 INT);
CREATE TABLE b1.t22 (f1 INT PRIMARY KEY,f2 INT);
INSERT b1.t11 VALUES (1,10);
INSERT b1.t22 VALUES (1,10);

插入数据(数据同步时才插入)

INSERT b1.t11 VALUES (2,20),(3,NULL),(4,40);
INSERT b1.t22 VALUES (2,20),(3,NULL),(4,40);

5、Kafka准备

创建Kafka的主题

kafka-topics.sh \
--delete \
--zookeeper hadoop102:2181/kafka \
--topic t1

kafka-topics.sh \
--create \
--zookeeper hadoop102:2181/kafka \
--replication-factor 1 \
--partitions 2 \
--topic t1

起一个终端消费者,用于检测MySQL数据是否同步到Kafka

kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic t1

Canal

  • Canal是Java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件
  • 使用场景:实时采集MySQL数据到Kafka
  • 工作原理:
    1、Canal伪装自己为MySQL的Slave,向MySQL的Master发送dump协议
    2、MySQL的Master收到dump请求,推送binary log给Canal
    3、Canal解析binary log

1、下载Canal

下载地址:https://github.com/alibaba/canal/releases

wget http://github.com/alibaba/canal/releases/download/canal-1.1.6-alpha-1/canal.deployer-1.1.6-SNAPSHOT.tar.gz

2、解压

mkdir $B_HOME/canal
tar -zxvf canal.deployer-1.1.6-SNAPSHOT.tar.gz -C $B_HOME/canal/
cd $B_HOME/canal

3、修改配置

Canal配置有2种级别:server级别和instance级别
server级别:全局性的配置,一个sever可配置多个instance
instance级别:最小订阅MySQL

cd $B_HOME/canal

server配置

vim ./conf/canal.properties
# Canal服务器绑定ip地址和端口
canal.ip = hadoop102
# 服务模式:tcp、kafka、RocketMQ…
canal.serverMode = kafka
# Kafka地址
kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092

instance配置

canal.destinations可配置多个实例,默认有个example

vim ./conf/example/instance.properties
# 要监控的MySQL地址
canal.instance.master.address=hadoop102:3306
# 监控哪些【库.表】(转义符需要双斜杠)
canal.instance.filter.regex=b1\\.t1.*

# 消息队列的主题
canal.mq.topic=t1
# 散列模式的分区数, 要和Kafka主题的分区数保持一致
canal.mq.partitionsNum=2

实例默认的数据库用户及其密码都是canal,所以创建一个同名用户

mysql -uroot -p123456
-- 创建用户canal,%表示所有地址可访问,密码canal,并授予所有库和表的指定权限
GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* to 'canal'@'%' identified by 'canal';

4、启动

./bin/startup.sh

启动后 用jps 可看到CanalLauncher

Maxwell

Java编写的MySQL数据实时抓取软件,其抓取原理基于binlog

1、准备工作

mysql -uroot -p123456
  1. 在MySQL中创建一个用于存储maxwell元数据的数据库
CREATE DATABASE `maxwell` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
  1. 创建可以操作maxwell库的用户,名为maxwell密码为maxwell
GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY 'maxwell';
  1. 给用户maxwell分配操作其他数据库的权限
GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'maxwell'@'%';
FLUSH PRIVILEGES;

2、安装和配置maxwell

下载

wget http://github.com/zendesk/maxwell/releases/download/v1.27.1/maxwell-1.27.1.tar.gz

解压

tar -zxvf maxwell-1.27.1.tar.gz -C $B_HOME/

配置

cd $B_HOME/maxwell-1.27.1
vim ./config.properties
# 日志级别
log_level=info
# 生产者
producer=kafka
# Kafka服务地址
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
# Kafka主题
kafka_topic=t1
# 生产者分区依据:按照主键的hash
producer_partition_by=primary_key

# MySQL登录信息
host=hadoop102
user=maxwell
password=maxwell

启动maxwell

cd $B_HOME/maxwell-1.27.1
./bin/maxwell --config config.properties --filter exclude:b1.t22
可选参数说明
--config配置文件
--filter指定监控的表,建议传参(有语法提示)
--daemon后台运行

比较Maxwell和Canal

1、Canal功能更强大、技术更成熟;Maxwell更轻
2、Maxwell不能直接支持高可用,Canal支持
3、Maxwell只支持JSON格式,Canal可自定义格式

输出格式比较

4、Maxwell可导出完整的历史数据用于初始化,步骤如下:

·4.1、全局配置加入client_id

vim $B_HOME/maxwell-1.27.1/config.properties
# 用于初始化维度表数据
client_id=maxwell_1

·4.2、执行初始化脚本(先重启maxwell,再执行该命令)

cd $B_HOME/maxwell-1.27.1/
./bin/maxwell-bootstrap \
--user maxwell \
--password maxwell \
--host hadoop102 \
--database b1 \
--table t11 \
--client_id maxwell_1

Appendix

en🔉cn
canalkəˈnæln. 运河;[地理] 水道;[建] 管道;灌溉水渠
maxwellˈmæksˌwɛln. 麦克斯韦(磁通量单位)
dumpdʌmpv. 丢弃;倾销;转存(计算机数据);n. 垃圾场;
grantɡræntv. 授予;承认n. 补助金;
bootstrapˈbuːtstræpn. (靴筒后的)靴襻;[计] 引导程序,辅助程序
【实时数仓】业务数据采集之Maxwell的介绍、底层原理、安装及初始化、监控功能、采集服务和MySQL的binlog 将业务数据从MySQL数据库采集到kafka属于CDC(Change Data Capture)操作,实现CDC有两种方式全表扫描:使用sqoop,会丢失一些数据,只能拿到数据的最终状态。如订单状态:待支付、已支付、待发货、已发货、已收货、评价、完成。使用sqoop只会获取“完成”状态的订单,这种现象称为“状态丢失”。对于离线统计没有统计订单状态的需求,只得到最终结果即可,但对实时计算来说,订单的状态变化十分重要。基于Binglog获取新增和变化的数据:常见框架有阿里的canal、maxwell。整体流程如 阅读详情

相关推荐

大数据实战项目 -- 实时数仓

文章目录

L小Ray想有腮 4413

MySQL-To-JSON 的 Kafka 生产者

Maxwell 是一个读取 MySQL binlogs 并将修改行字段的更新写入 Kafka, Kinesis, RabbitMQ, Google Cloud Pub/Sub 或 Redis (Pub/Sub or LPUSH) 以作为 JSON 的应用程序。 Maxwell 拥有可对底层进行操作的操作栏(operational bar),可生成一致、...

weixin_34041003的博客 543

无侵入式的mysql的binlog采集——maxwell采集binlog放到kafka中——成功!

调研过flume,目前采用datax,但是都是具有侵入式,即使再增量也会影响服务器性能,详细藐视可以查看我以前的文章。 调研flume、cannal、outter、maxwell 最后无侵入式的,实时的。 主要区别: 1、虽然Maxwell不能直接支持HA,但是它支持断点还原,即错误解决后重启继续上次点儿读取数据。 2、Canal是服务端,数据过来了并不能直接写出去,需要一个客户端:s...

大壮的博客 3344

大数据之MaxWell

第1章 Maxwell简介 1.1 Maxwell概述 ​ Maxwell 是由美国Zendesk公司开源,用Java编写的MySQL变更数据抓取软件。它会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台。 ​ 官网地址:http://maxwells-daemon.io/ 1.2 Maxwell输出数据格式 注:Maxwell输出的json字段说明: 字段 解释 da

weixin_47884711的博客 5900

大数据组件工具——实时数据同步 Maxwell

Maxwell是一款轻量级的MySQL数据实时同步工具,通过解析binlog日志生成JSON格式消息,支持发送至Kafka等多种平台。相比Canal,Maxwell具有使用简单、支持bootstrap历史数据初始化等优势。文章详细介绍了MySQL binlog的三种格式(Statement/Row/Mixed)、Maxwell的工作原理(伪装MySQL从库)、安装部署步骤及配置方法,并对比了主流binlog解析工具的差异。使用Maxwell需开启MySQL的binlog功能,配置ROW日志格式和server

yangwei2048的博客 1万+

MySQL Binlog 实时采集全解析:Flink CDC、Canal、Debezium 对比与选型指南

本文对比了四种MySQL Binlog实时采集方案:1)Flink CDC→Kafka(主流推荐,支持多下游消费);2)Flink CDC直写目标存储(简单低延迟);3)Canal/Maxwell→Kafka→Flink(适合已有Canal部署);4)Debezium→Kafka Connect(轻量级)。分析各方案的原理、优缺点及适用场景,建议新项目优先考虑Flink CDC,小型项目可省略Kafka,历史系统可沿用Canal。选型需综合考虑业务规模、延迟要求等因素。

weixin_44519124的博客 2179

Maxwell与Canal

一、Canal和Maxwell对比抉择 Canal(是阿里的一个中间件组件) https://github.com/alibaba/canal(服务端,需要一个客户端来配合) https://github.com/Hackeruncle/syncClient(客户端) Maxwell(一个老外写的,开源的) https://github.com/zendesck/maxwell 官网:...

Allenzyg的博客 5248

数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell

数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell什么是CDC?CDC工具对比实现原理:Mysql binlog 讲解:mysql binlog的三种格式常见的数据采集工具(相关知识):DataX (处理离线数据)Flume(处理实时数据)Logstash(处理离线数据)Sqoop(处理离线数据) 数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell 什么是CDC? CD

weixin_42526326的博客 6254

MySQL数据 实时同步到Kafka --Binlog canal、Maxwell、Kafka Connect 实现MySQL增量同步

一、需求分析 早期业务借助Sqoop将Mysql中的数据同步到Hive、hdfs来进行数据分析,使用过程中也带来了一些问题: 虽然Sqoop支持增量同步但还属于粗粒度的离线同步,无法满足下游数仓实时性的需求(可能一个小时,或者一天) 每次同步Sqoop以sql的方式向Mysql发出数据请求也在一定程度上对Mysql带来一定的压力 同时Hive对数据更新的支持也相对较弱,由于Hive本身的...

. 1万+

利用Maxwell组件实时监听Mysql的binlog日志,并且把解析的json格式数据发送到kafka窗口供实时消费

文档主题: 如何使用Maxwell实时监听Mysql的binlog日志,并且把解析的json格式数据发送到kafka窗口 具体步骤 一:在linux环境下安装部署好mysql 1 开启binlog sudo vi /etc/my.cnf 2 mysql的binlog格式有3种,为了把binlog解析成json数据格式,要设置binlog的格式为row(binlog有三种格式:State...

qq_30921461的博客 2万+

Flume实时采集mysql数据到kafka中并输出

Flume实时采集mysql数据到kafka中并输出。Apache Flume是一个分布式的、可靠的、可用的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储。在大数据生态圈中,flume经常用于完成数据采集的工作。其实时性很高,延迟大约1-2s,可以做到准实时。又因为mysql是程序员常用的数据库,所以以flume实时采集mysql数据库为例子。要了解flume如何采集数据,首先要初探其架构:Flume 运行的核心是 Agent。Flume以agent为最小的独立运行单位。

Alex的博客 6557

实时数据同步之Maxwell和Canal

Maxwell 是由美国 Zendesk 开源,用 Java 编写的 MySQL 实时抓取软件。实时读取MySQL 二进制日志 Binlog,并生成 JSON格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序注意:1.30.0版本后不在支持JDK8Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前。

Shawn的个人博客 2902

maxwell:Maxwell的守护程序,一个从mysql到json的kafka生产者

这是Maxwell的守护程序,该应用程序读取MySQL二进制日志并以JSON格式将行更新写入到Kafka,Kinesis或其他流媒体平台。 Maxwell的操作开销很低,只需要mysql和一个可写的地方即可。 它的常见用例包括ETL,缓存建立/过期,指标收集,搜索索引和服务间通信。 Maxwell为您提供了事件来源的一些好处,而不必重新构建整个平台。 下载: 资源: mysql> insert into `test`.`maxwell` set id = 1, daemon = 'Stanislaw Lem'; maxwell: { "database": "test", "table": "maxwell", "type": "insert", "ts": 1449786310, "xid": 940752, "commit"

实时采集MySQL数据之轻量工具Maxwell实操

一个用于企业应用支持实时增量采集和全量采集MySQL数据开源框架Maxwell,功能强于Canal,比Flink CDC更易用。本篇先了解其定义和原理,然后通过安装和环境准备,了解其启动的两种方式,最后实操演示几个maxwell在企业中常用的场景示例。

itxiaoshen博客 3062

A-Level经济例题解析及练习Opportunity Cost

例题Question: Opportunity CostYou are selling your 1996 Mustang.  You have already spent $1000 on repairs. At the last minute, the transmission dies.  You can pay $600 to have it repaired, or sell the car “as is.”In each of the fol

Alevel3的博客 746

保姆级教程:用达芬奇Configurator配置CAN总线(从DBC导入到Controller设置)

本文详细介绍了使用达芬奇Configurator工具从DBC文件导入到CAN总线控制器设置的全流程配置方法。通过环境准备、CAN控制器模式选择、硬件参数配置、通信参数优化及通信栈集成等关键步骤,帮助开发者高效完成AUTOSAR架构下的CAN总线开发,特别适合汽车电子领域的工程师参考。

weixin_30529023的博客 443

maxwell/canal 对比

maxwell maxwell实现原理其实就是会在数据源端的库默认maxwell生成对应的position信息,通过记录binlog的position位点来实现断点还原。当然我们也可以手动更新数据库position位置。maxwell库中还会有table,schema,bootstrap表,其中bootstrap可以进行表引导操作。 canal 而canal则是单纯的依靠binlog解析将数据发送到kafka或其他组件。(1.1.*已经支持es,redis,kafka,web界面等多功能) c

weixin_40954192的博客 7011

097、Zephyr RTOS驱动开发实战:传感器驱动(陀螺仪)

I2C速率别设太高:LSM6DSO支持最高400kHz,但实际布线有寄生电容时,400kHz容易出错。工业产品我统一用100kHz,稳定压倒一切。FIFO水印值要计算:假设ODR=6.66kHz,每150us产生一组数据,如果水印设32组,则每4.8ms触发一次中断。这个间隔要大于I2C读取耗时(实测约200us),否则中断堆积。电源纹波敏感:陀螺仪对电源噪声敏感,特别是3.3V供电时。我遇到过因为DC-DC纹波太大,陀螺仪输出噪声从0.1dps飙升到2dps。

m0_50546716的博客 118

CDC系列(三)、Debezium 监控MySQL操作日志实时同步到Kafka(对比canal,maxwell)

目录 前言 准备工作 配置Connector 注册启动Connector 验证CDC 尾巴 CDC系列: CDC系列(一)、Canal 集群部署及使用(带WebUI) CDC系列(二)、Maxwell_v1.27.1 监控MySQL操作日志实时同步到Kafka 前言 前两篇我们介绍了CDC工具,以及利用Canal和Maxwell监控mysql操作日志并写入kafka,本篇我们来讲解另一个CDC工具:debezium。debezium不仅仅支持mysql的监控,目前最新版已支持mysql

王义凯 的博客 1万+

鸿蒙开发实战项目(九十二):HUAWEI Health血压测量

是华为开发的用于运动健康领域的一个开放平台, 三方APP可以借助HUAWEI Health开放平台提供的。

斌擎科技 1133

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1140
上一篇: 数据开发【配置文件】和【传参】规范
下一篇: 数据离散化SQL
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值