使用Canal同步数据到ES

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、Canal概述

1、Canal是什么?

Canal是阿里巴巴开源的一个组件,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。canal的介绍,在github 上的官方文档介绍的很好,我这边就不介绍了。感兴趣的查看git地址:https://github.com/alibaba/canal

2、Canal版本

Canal 1.1.4版本,迎来最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal动态 管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:Canal Admin Guide。

二、Canal同步到ES

1、服务器规划

本地测试准备2台服务器

服务器部署的服务
a-lf-bigdatamysql、canal-server
b-lf-bigdatamysql、canal-admin、canal-adapter、es、kibana

2、安装mysql

A. 分别在两台机器安装mysql

(1)安装MySQL的yum仓库

yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

(2)安装MySQL

yum -y install mysql-community-server

(3)设置为开机启动

systemctl enable mysqld

(4)启动MySQL

systemctl start mysqld

(5)查看MySQL状态

systemctl status mysqld

(6)查看root临时密码

grep 'temporary password' /var/log/mysqld.log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YEP80Tpf-1631081169438)(/Users/juzi/Library/Application Support/typora-user-images/image-20210907203206489.png)]

(7)修改root密码

mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_12root';
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root%123';
exit
B. MySQL创建用户
1、在a-lf-bigdata的MySQL创建采集数据的用户
mysql -uroot -p
set global validate_password.policy=0;
set global validate_password.length=1;
CREATE USER canal IDENTIFIED BY '2wsxVFR_';
-- GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
exit

在a-lf-bigdata的MySQL开启Binlog格式

vi /etc/my.cnf

增加如下配置

server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
  • log-bin用于指定binlog日志文件名前缀,默认存储在/var/lib/mysql 目录下。

  • server-id用于标识唯一的数据库,不能和别的服务器重复,建议使用ip的最后一段,默认值也不可以。

  • binlog-ignore-db:表示同步的时候忽略的数据库。

  • binlog-do-db:指定需要同步的数据库(如果没有此项,表示同步所有的库)

登录mysql查看:

mysql -uroot -p
show master status;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJwXuft1-1631081115828)(/Users/juzi/Library/Application Support/typora-user-images/image-20210907203938217.png)]

如图,binlog就成功开启了。

禁用explicit_defaults_for_timestamp

mysql -uroot -p
SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';
set persist explicit_defaults_for_timestamp=0;
SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';

重启MySQL

systemctl status mysqld
2、在b-lf-bigdata的MySQL创建用户
mysql -uroot -p
set global validate_password.policy=0;
set global validate_password.length=1;
CREATE USER canaladmin IDENTIFIED BY '2wsxVFR_';
GRANT ALL ON canal_manager.* TO 'canaladmin'@'%';
FLUSH PRIVILEGES;
exit

3、安装ES

1、下载安装包

下载ES:

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.4.0-linux-x86_64.tar.gz
2、安装ES
(1)为服务器创建一个普通用户
useradd hadoop
passwd hadoop

然后赋予sudo权限

(2)安装ES
  1. 解压ES
cd /data/liufei/es
tar -zxf elasticsearch-7.4.0-linux-x86_64.tar.gz
ln -s elasticsearch-7.4.0 elasticsearch
  1. 配置环境变量
# 编辑配置文件
vi /etc/profile
# 新增ES配置
#elasticsearch
export ES_HOME=/data/liufei/es/elasticsearch
export PATH=${ES_HOME}/bin:$PATH
# 是配置生效
source /etc/profile
  1. 基础配置

调整最大虚拟内存

# 编辑配置文件
vi /etc/sysctl.conf
# 增加配置
vm.max_map_count=262144

保存退出后执行命令使配置生效

sysctl -p
  1. 修改权限

将ES目录的所有者赋予给hadoop用户

chown -R hadoop:hadoop elasticsearch
chown -R hadoop:hadoop elasticsearch-7.4.0

切换到hadoop用户

su hadoop
  1. 配置ES
# 编辑配置文件
vi $ES_HOME/config/elasticsearch.yml

# 修改配置
network.host: 0.0.0.0
discovery.seed_hosts: ["b-lf-bigdata"]
  1. 启动ES
$ES_HOME/bin/elasticsearch -d
  1. 确认ES启动成功
curl http://b-lf-bigdata:9200
(2)安装kibana
  1. 解压kibana
cd /data/liufei/es
tar xzvf kibana-7.4.0-linux-x86_64.tar.gz
ln -s kibana-7.4.0-linux-x86_64 kibana
  1. 配置环境变量
# 编辑配置文件
vi /etc/profile
# 新增ES配置
#kibana
export KIBANA_HOME=/data/liufei/es/kibana
export PATH=${KIBANA_HOME}/bin:$PATH
# 是配置生效
source /etc/profile
  1. 配置Kibana
# 编辑配置文件
vi $KIBANA_HOME/config/kibana.yml

# 修改配置
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://b-lf-bigdata:9200"]
  1. 启动Kibana
nohup $KIBANA_HOME/bin/kibana > $KIBANA_HOME/kibana.out 2>&1 &
  1. 查看Kibana状态

http://b-lf-bigdata:5601

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQMttZup-1631081115829)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908105624893.png)]

  1. 新建索引
put /test_test
{
    "mappings": {
        "properties": {
            "name": {
                "type": "text"
						}, 
          	"age": {
                "type": "integer"
            },
            "modified_time": {
                "type": "date"
						} 
        }
		} 
}

4、安装Canal

(1)下载Canal
Canal下载地址:https://github.com/alibaba/canal/releases
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz
(2)安装Canal-admin
  1. 解压
tar -zxf canal.admin-1.1.5.tar.gz
cd canal-admin

目录结构如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S3nD9Cyq-1631081115830)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908111454405.png)]

  1. 配置环境变量
# 编辑配置文件
vi /etc/profile

# 增加配置
#canal-admin
export CANAL_ADMIN_HOME=/data/liufei/cacal/canal-admin
export PATH=${CANAL_ADMIN_HOME}/bin:$PATH

# 使环境变量生效
source /etc/profile
  1. 修改配置
vi $CANAL_ADMIN_HOME/conf/application.yml

# 修改配置如下
server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
spring.datasource:
  address: b-lf-bigdata:3306
  database: canal_manager
  username: canaladmin
  password: 2wsxVFR_
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?
useUnicode=true&characterEncoding=UTF-
8&useSSL=false&allowPublicKeyRetrieval=true
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1
#这里指的是canal-server和canal-admin双线通信的用户名密码 canal:
  adminUser: admin
  adminPasswd: 123456
  1. 替换MySQL驱动包

因为我们使用的是MySQL 5.7,所以需要使用8的驱动

  1. 初始化数据库
mysql -uroot -p
source /data/liufei/canal/canal-admin/conf/canal_manager.sql
  1. 启动canal-admin
sh $CANAL_ADMIN_HOME/bin/startup.sh

查看日志:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lomrs253-1631081115831)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908132642239.png)]

  1. Canal-admin启动成功,访问地址

http://b-lf-bigdata:8089

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6B9Z0jp-1631081115831)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908132827793.png)]

(3)安装Canal-server
  1. 解压
tar -zxvf canal.deployer-1.1.5.tar.gz
cd canal-server
  1. 配置环境变量
vi /etc/profile

# 新增配置
#canal-server
export CANAL_SERVER_HOME=/home/hadoop/app/canal-server
export PATH=${CANAL_SERVER_HOME}/bin:$PATH

# 使环境变量生效
source /etc/profile
  1. 修改配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pyig8ly3-1631081115831)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908133848856.png)]

vi canal.properties

# register ip
canal.register.ip = b-lf-bigdata

# canal admin config
canal.admin.manager = b-lf-bigdata:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster =
canal.admin.register.name =
  1. 更换MySQL 驱动包
  2. 启动
$CANAL_SERVER_HOME/bin/startup.sh
  1. 查看日志
(4)配置Instance
  1. 登录canal_admin
  2. 进入Instance 管理页,新建instance

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z5kin8mL-1631081115832)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908134211085.png)]

  1. 载入模版

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXDUJQII-1631081115832)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908134240376.png)]

  1. 修改模版
canal.instance.master.address=a-lf-bigdata:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=2wsxVFR_
  1. 启动instance,查看日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BeueDOm-1631081115832)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908134456642.png)]

(5)创建调试数据库

在a-lf-bigdata上操作

mysql -uroot -p

# 创建数据
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use test;
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `uid` INT UNSIGNED AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL,
  `age` int(3) DEFAULT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(6)安装ClientAdapter
  1. 解压
tar -zxf canal.adapter-1.1.5.tar.gz
cd canal-adapter
  1. 配置环境变量
vi /etc/profile

# 新增配置
#canal-adapter
export CANAL_ADAPTER_HOME=/data/liufei/cacal/canal-adapter
export PATH=${CANAL_ADAPTER_HOME}/bin:$PATH

# 使环境变量生效
source /etc/profile
  1. 修改服务配置
vi $CANAL_ADAPTER_HOME/conf/application.yml

server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    # canal tcp consumer
    canal.tcp.server.host: a-lf-bigdata:11111
    canal.tcp.zookeeper.hosts:
    canal.tcp.batch.size: 500
    canal.tcp.username:
    canal.tcp.password:

  srcDataSources:
    defaultDS:
      url: jdbc:mysql://a-lf-bigdata:3306/test?useUnicode=true
      username: canal
      password: 2wsxVFR_
  canalAdapters:
  - instance: test_to_es # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
#      - name: rdb
#        key: mysql1
#        properties:
#          jdbc.driverClassName: com.mysql.jdbc.Driver
#          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
#          jdbc.username: root
#          jdbc.password: 121212
#      - name: rdb
#        key: oracle1
#        properties:
#          jdbc.driverClassName: oracle.jdbc.OracleDriver
#          jdbc.url: jdbc:oracle:thin:@localhost:49161:XE
#          jdbc.username: mytest
#          jdbc.password: m121212
#      - name: rdb
#        key: postgres1
#        properties:
#          jdbc.driverClassName: org.postgresql.Driver
#          jdbc.url: jdbc:postgresql://localhost:5432/postgres
#          jdbc.username: postgres
#          jdbc.password: 121212
#          threads: 1
#          commitSize: 3000
#      - name: hbase
#        properties:
#          hbase.zookeeper.quorum: 127.0.0.1
#          hbase.zookeeper.property.clientPort: 2181
#          zookeeper.znode.parent: /hbase
      - name: es6
        hosts: b-lf-bigdata:9300 # 127.0.0.1:9200 for rest mode
        properties:
          mode: transport # or rest
#          # security.auth: test:123456 #  only used for rest mode
          cluster.name: es
#        - name: kudu
#          key: kudu
#          properties:
#            kudu.master.address: 127.0.0.1 # ',' split multi address

修改es6 目录下的配置,新建test_to_es.yml

dataSourceKey: defaultDS
destination: test_to_es
groupId: g1
esMapping:
  _index: test_test
  _type: _doc
  _id: _id
  upsert: true
  sql: "select a.uid as _id, a.name, a.age, a.modified_time from test a"
  commitBatch: 2
  1. 替换MySQL驱动包
  2. 启动adapter
$CANAL_ADAPTER_HOME/bin/startup.sh
$CANAL_ADAPTER_HOME/bin/stop.sh
$CANAL_ADAPTER_HOME/bin/restart.sh

(7)测试

  1. 新增数据
INSERT INTO test.test (name, age) VALUES ("张三",20); 
INSERT INTO test.test (name, age) VALUES ("李四",21); 
INSERT INTO test.test (name, age) VALUES ("王五",22); 
INSERT INTO test.test (name, age) VALUES ("赵六",23); 
INSERT INTO test.test (name, age) VALUES ("马七",24);
  1. 查看es

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tOpWA0Bh-1631081115833)(/Users/juzi/Library/Application Support/typora-user-images/image-20210908140415725.png)]

canal数据同步es、mq等实践 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。基于日志增量订阅和消费的业务包括数据库镜像数据实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据处理。 阅读详情

相关推荐

利用canal进行MySQLES数据实时同步

项目中业务数据量比较大,每类业务表都达到千万级别,虽然做了分库分表,每张表数据控制在300W以下,但是效率还是达不到要求,为了提高查询效率,打算使用ES进行数据查询。

m0_38004228的博客 2764

使用canal同步数据es

canal同步Mysql数据es,附踩坑记录。

qq_44872331的博客 2929

Canal实现MySQL实时同步数据ES

一、canal简介 canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步MySQL、Elasticsearch、HBase等数据存储中去。 二、canal工作原理 canal会模拟MySQL主库和从库的交互协议,从而伪装成MySQL的从库,然后向MySQL主库发送dump协议,MySQL主库收到dump请求会向canal推送binlog,canal通过解析binlog将数据同步到其他存储中去。...

S&Y_shhy_QQ_1127833416 7343

使用CanalMySQL数据同步ES(Linux)

通过canal实现MySQLES数据同步,同时里面也讲到自己遇到的一些bug,有完整的实现测试的流程

乄bluefox - CSDN博客 2182

使用canal解决Mysql和ElasticSearch数据同步问题

前言 在上一章《Canal实现Mysql和Redis数据同步》我们使用CanalMysql和Redis进行数据同步,这一章我们学习使用CanalMysql和ElasticSearch进行数据同步 工作原理分析 我不知道你是否了解Mysql主从,根据2/8原则,80%的性能问题都在读上面,当我们数据库的读并发较大的时候,我们可以使用Mysql主从来分担读的压力。它的原理是所有的写操作在主库上,读操作在从库上,当然主库也可以承担读请求,而从库的数据则通过主库复制而来,Mysql自带主从复制的功能。如下图

墨家巨子@俏如来 1万+

使用canal实时同步MySQL数据到Elasticsearch

使用canal实时同步MySQL数据es软件版本信息安装 elasticsearch安装 kibana下载和安装canal1、下载canal2、配置MySQL3、配置 canal-server (canal-deploy)4、配置 canal-adapter5、配置canal-admin同步MySQLes1、创建es索引 软件版本信息 由于不同版本的MySQL、Elasticsearch和canal会有兼容性问题,所以我们先对其使用版本做个约定。 软件 版本 操作系统 windows 1

zh1998wx的博客 1万+

使用canal同步MySQL数据到Elasticsearch(ES)

1、功能及使用场景 1.1、功能介绍 canal是阿里巴巴开源的mysql数据传输组件,基于mysql binlog,提供了准确、实时数据传输服务。有关binlog介绍,参见binlog介绍。 以下来自官方GitHub介绍。GitHub地址 canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,

m0_38089214的博客 2336

使用canal增量同步mysql数据库信息到ElasticSearch

本文介绍如何使用canal增量同步mysql数据库信息到ElasticSearch。(注意:是增量!!!) 1.简介 1.1 canal介绍 Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数据管道,github地址:https://github.com/alibaba/ca...

大老杨的博客 4480

使用canal和rocketmq同步mysql数据到elasticsearch中【canal,rocketmq,elasticsearch】

canal-deployer:主要用来监控mysql数据变化canal-adapter:主要用来将监控的数据同步到其他应用canal-admin:相当于操作控制台,可安可不安。

qq_41444892的博客 3465

使用canal同步MySQL数据ES

文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1. 操作系统2. mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1 修改启动配置2 配置映射文件3 启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin 一、概述 简介 canal是Alibaba旗下的一款开源项目,Ja

学习笔记 3986

使用canal同步mysql数据至elasticsearch

使用canal同步mysql数据es的特点如下: 使用mysql的binlog(中性) 支持增量更新(优点) 配置可用(优点) 实时性高(优点) 需要预先在es中创建mapping关系(缺点) 每个索引都需要定义一个配置(中性) 下载 下载&&编译 git clone git@github.com:alibaba/canal.git cd canal; 切换至最新版本1....

JustPlay1994的专栏 3988

使用canal+rocketmq实现将mysql数据同步es

canal同步mysql数据放入rocketmq中,消费后放入es

qq_37247664的博客 5319

使用canal同步MySQL数据ES的有序性保证

最近在做的项目中有用到canal实时同步MySQL数据,并且写入es的场景,总结了一些心得,以备后查。 总体同步的流程图如下: MySQL-es process.png 链路中的环节稍微解释下: binlog MySQL的自身的操作日志,用来记录数据的变更操作及变更后的数据。需要开启并配置 binlog-format 为 ROW 模式。具体可查看canal文档。 ...

东境物语 3098

ElasticSearch 使用 canal 同步数据

ElasticSearch 使用 canal 同步数据 配置Canal 服务器 配置Canal 客户端 解决方案 数据同步测试 Canal 管理页面搭建

Vincent Vic 1871

【技术派后端篇】使用 Canal 实现 MySQLES 数据同步的技术实践

通过本文,我们详细了解了使用 Canal 实现 MySQLES 数据同步的全过程,包括基础知识、软件安装、Canal 配置以及全量和增量数据同步实战。希望这些内容能为大家在实际项目中应用该技术提供帮助。如果项目中遇到类似场景,基本可以直接参考本文的方法进行操作。

专注Java和MySQL领域知识分享 2326

使用canal同步mysql数据es

安装方法与简单示例 文档地址:https://github.com/alibaba/canal canal client demo: package com.canalclient.process; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.ca

microcosm1994的博客 1840
上一篇: Kafka基本使用
下一篇: 使用OpenFeign 进行RPC调用
I_absolutely
博客等级 码龄12年 1粉丝 32原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值