写个简单的Demo 去监听mysql 数据的变动

Jar包

<dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.3</version>
</dependency>

测试代码

package com.hq.eos.sync.client;import java.net.InetSocketAddress;
import java.util.List;import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.protocol.CanalEntry.Column;
import com.alibaba.otter.canal.protocol.CanalEntry.Entry;
import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;
import com.alibaba.otter.canal.protocol.CanalEntry.EventType;
import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;
import com.alibaba.otter.canal.protocol.CanalEntry.RowData;
import com.alibaba.otter.canal.protocol.Message;public class CanalTest {public static void main(String[] args) throws Exception {CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("10.0.98.186", 11111), "expert", "root", "root");connector.connect();connector.subscribe(".*\\..*");connector.rollback();while (true) {Message message = connector.getWithoutAck(100); // 获取指定数量的数据long batchId = message.getId();if (batchId == -1 || message.getEntries().isEmpty()) {Thread.sleep(1000);continue;}// System.out.println(message.getEntries());printEntries(message.getEntries());connector.ack(batchId);// 提交确认,消费成功,通知server删除数据
// connector.rollback(batchId);// 处理失败, 回滚数据,后续重新获取数据}}private static void printEntries(List<Entry> entries) throws Exception {for (Entry entry : entries) {if (entry.getEntryType() != EntryType.ROWDATA) {continue;}RowChange rowChange = RowChange.parseFrom(entry.getStoreValue());EventType eventType = rowChange.getEventType();System.out.println(String.format("================> binlog[%s:%s] , name[%s,%s] , eventType : %s",entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),entry.getHeader().getSchemaName(), entry.getHeader().getTableName(), eventType));for (RowData rowData : rowChange.getRowDatasList()) {switch (rowChange.getEventType()) {case INSERT:System.out.println("INSERT ");printColumns(rowData.getAfterColumnsList());break;case UPDATE:System.out.println("UPDATE ");printColumns(rowData.getAfterColumnsList());break;case DELETE:System.out.println("DELETE ");printColumns(rowData.getBeforeColumnsList());break;default:break;}}}}private static void printColumns(List<Column> columns) {for(Column column : columns) {System.out.println(column.getName() + " : " + column.getValue() + " update=" + column.getUpdated());}}
}

测试结果

================> binlog[mysql-bin.000017:240485980] , name[xxl_job,xxl_job_registry] , eventType : UPDATE
UPDATE
id : 402 update=false
registry_group : EXECUTOR update=false
registry_key : hq-eos-crawler update=false
registry_value : 172.27.0.1:15674 update=false
update_time : 2019-12-03 17:54:42 update=true
================> binlog[mysql-bin.000017:240486374] , name[xxl_job,xxl_job_registry] , eventType : UPDATE
UPDATE
id : 82 update=false
registry_group : EXECUTOR update=false
registry_key : hq-eos-inf-config update=false
registry_value : 172.18.0.1:15672 update=false
update_time : 2019-12-03 17:54:42 update=true
================> binlog[mysql-bin.000017:240486774] , name[xxl_job,xxl_job_registry] , eventType : UPDATE

注意一下

 CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("10.0.98.186", 11111), "expert", "root", "root");
复制代码

这里的配置来自于 canal.properties 我把这个配置也贴出来吧

canal.id= 8
canal.ip=
canal.port=11111
canal.metrics.pull.port=11112
canal.zkServers=10.0.14.36:2181,10.0.14.39:2181,10.0.14.49:2181
# flush data to zk
canal.zookeeper.flush.period = 1000
canal.withoutNetty = false
# flush meta cursor/parse position to file
canal.file.data.dir = ${canal.conf.dir}
canal.file.flush.period = 1000
## memory store RingBuffer size, should be Math.pow(2,n)
canal.instance.memory.buffer.size = 16384
## memory store RingBuffer used memory unit size , default 1kb
canal.instance.memory.buffer.memunit = 1024
## meory store gets mode used MEMSIZE or ITEMSIZE
canal.instance.memory.batch.mode = MEMSIZE## detecing config
canal.instance.detecting.enable = false
#canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now()
canal.instance.detecting.sql = select 1
canal.instance.detecting.interval.time = 3
canal.instance.detecting.retry.threshold = 3
canal.instance.detecting.heartbeatHaEnable = false# support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery
canal.instance.transaction.size = 1024
# mysql fallback connected to new master should fallback times
canal.instance.fallbackIntervalInSeconds = 60# network config
canal.instance.network.receiveBufferSize = 16384
canal.instance.network.sendBufferSize = 16384
canal.instance.network.soTimeout = 30
# binlog filter config
canal.instance.filter.druid.ddl = true
canal.instance.filter.query.dcl = false
canal.instance.filter.query.dml = false
canal.instance.filter.query.ddl = false
canal.instance.filter.table.error = false
canal.instance.filter.rows = false
canal.instance.filter.transaction.entry = false# binlog format/image check
canal.instance.binlog.format = ROW,STATEMENT,MIXED
canal.instance.binlog.image = FULL,MINIMAL,NOBLOB# binlog ddl isolation
canal.instance.get.ddl.isolation = false# parallel parser config
canal.instance.parser.parallel = true
## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors()
#canal.instance.parser.parallelThreadSize = 16
## disruptor ringbuffer size, must be power of 2
canal.instance.parser.parallelBufferSize = 256# table meta tsdb info
canal.instance.tsdb.enable=true
canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url=jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.dbUsername=root
canal.instance.tsdb.dbPassword=root
# rds oss binlog account
canal.instance.rds.accesskey =
canal.instance.rds.secretkey =#################################################
######### destinations #############
#################################################
canal.destinations= expert
# conf root dir
canal.conf.dir = ../conf
# auto scan instance dir add/remove and start/stop instance
canal.auto.scan = true
canal.auto.scan.interval = 5canal.instance.tsdb.spring.xml=classpath:spring/tsdb/h2-tsdb.xml
#canal.instance.tsdb.spring.xml=classpath:spring/tsdb/mysql-tsdb.xmlcanal.instance.global.mode = spring
canal.instance.global.lazy = false
#canal.instance.global.manager.address = 127.0.0.1:1099
#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
canal.instance.global.spring.xml = classpath:spring/file-instance.xml
#canal.instance.global.spring.xml = classpath:spring/default-instance.xml

这上面很多配置这边就不一一说明了 zookeeper的话是做instance 集群的时候用的。

需要更多教程,微信扫码即可

canal 入门(2)相关推荐

  1. 大数据技术之Canal入门篇

    大数据技术之Canal入门篇 文章目录 大数据技术之Canal入门篇 写在前面 第 1 章 Canal 入门 1.1 什么是 Canal 1.2 MySQL 的Binlog 1.2.1 什么是 Bin ...

  2. canal mysql5.6_超详细的Canal入门,看这篇就够了!

    思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 我们都知道一个系统最重要的是数据,数据是保存在数据库 ...

  3. 超详细的Canal入门,看这篇就够了!

    思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 我们都知道一个系统最重要的是数据,数据是保存在数据库 ...

  4. canal 入门(1)

    canal 搭建 搭建mysql环境 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下 [mysqld] lo ...

  5. 【建议收藏】超详细的Canal入门,看这篇就够了!!!

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 背景 早期,阿里巴巴B2B公司 ...

  6. 【建议收藏】超详细的Canal入门,看这篇就够了。

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 背景 早期,阿里巴巴B2B公司 ...

  7. Canal(1):Canal入门

    1 什么是 Canal 阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了同步杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据 ...

  8. Canal使用入门学习

    canal官方github 超详细的Canal入门,看这篇就够了! 阿里开源Canal–①简介 centos7用tar包安装mysql WINDOWS下MYSQL开启BINLOG 一.简介 canal ...

  9. canal+Kafka实现mysql与redis数据同步

    前言 上篇文章简单介绍canal概念,本文结合常见的缓存业务去讲解canal使用.在实际开发过程中,通常都会把数据往redis缓存中保存一份,做下简单的查询优化.如果这时候数据库数据发生变更操作,就不 ...

最新文章

  1. 业界 |「多巴胺」来袭!谷歌推出新型强化学习框架Dopamine
  2. 【效率】如何有效提问
  3. ccf-csp #201912-1 报数
  4. CBLAS的安装与使用
  5. canvas3:绘制感叹号
  6. 如何修改Win7开机登陆界面背景图片
  7. UpdateData( )
  8. 用Python爬取3万多条评论,看韩国人如何评价电影《寄生虫》?
  9. 磁盘调度算法课程设计(附源代码)
  10. 一篇搞定 Redis6(完整版)
  11. shell实现txt转换excel
  12. Docker下安装Redis超详细步骤
  13. Android mvp 架构的自述
  14. 小坑远程shell工具
  15. 平均数 中位数 四分位数 方差 标准差
  16. 最高分计算机公式,您好,excel怎么用函数公式计算最高分人数!用excle算最高分...
  17. DGL笔记1——用DGL表示图
  18. ChatGPT 使用 拓展资料:使用 HuggingFace+Gradio 部署快速搭建一个ChatGPT的聊天界面
  19. CAD教程:CAD联动模式的使用技巧
  20. 自动化测试金字塔与反模式

热门文章

  1. 阿里发起“0账期”倡议:新增700万网友提前收货
  2. 滴滴公众评议会第十一期:司机也可以评价乘客 你支持吗?
  3. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  4. 取代安卓梦碎!鸿蒙系统不用于手机
  5. 骁龙845重出江湖!iQOO Neo正式发布 售价1798元起
  6. 央视曝光!朋友圈八大骗局正在瞄准你的个人信息 看看你中招没?
  7. 支付宝集五福活动参与人数超4.5亿 你分到了多少?
  8. php使用自定义alert,IOS_iOS自定义alertView提示框实例分享,本文实例为大家分享iOS自定义a - phpStudy...
  9. 基于op07的k型热电偶测量电路_基于OP07和LTC1543温度采集模块的设计
  10. 如何让ul的符号隐藏_如何对文件进行加密?分享一下我对文件进行加密的方法(菜鸟级)...