canal数据同步 - 灰信网(软件开发博客聚合)


本站和网页 https://www.freesion.com/article/8631610225/ 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

canal数据同步 - 灰信网(软件开发博客聚合)
首页
联系我们
版权申明
隐私政策
搜索
canal数据同步
标签: canal etl java
数据同步方案
前言
针对后续的产品、订单、供应商等服务的开发和产品设计,基于底层的POI信息的要求和依赖性很强,而POI的数据涉及到行政区划、景点、酒店、社会设施、购物、美食等方面。数据面和量都比较大,而且需要支持多关键字的检索,因此,传统的rds满足不了场景应用需求,因此需要使用es的全文检索来满足检索需求,而POI的数据也需要提供人工的渠道来进行补充,这就涉及到mysql到文档数据库es的数据同步的需求了,需要保障初始化数据和后续的维护数据和检索库的数据保持一致。
数据同步方式
基本上,数据同步的方式分为两种,推送和拉取两种方式:
主动推送: 在人工维护入库的同时,主动调用es的api,推送数据到es,达到数据的一致性.这种方式存在的问题在于人工维护的同时还需要考虑es的记录是新增还是修改,api需要进行重构和封装,另外,由于mysql和es不是同一个库,在事务控制上也无法在一个事务中进行控制,而考虑到分布式部署的情况,还需要考虑一致性的复杂性。
被动拉取:考虑到定时任务的方式,按照频率对数据库表进行抽取入库.这种方式有可能出现的情况是定时任务出错以及频率设置的太过于大,导致数据检索不到或者检索的实时性不高.
鉴于此两种方式的问题,我们根据mysql的特性以及消息队列的广泛应用,建议选型采用模拟数据库主从同步方式抓取binlog日志同步到消息队列,然后采用生产者/消费者线程方式实现数据的实时同步。
canal链接方式
1.HA模式
2.单连
3.两个client+两个instance+1个mysql
当mysql变动时,两个client都能获取到变动
4.一个server+两个instance+两个mysql+两个client
5. instance****的standby配置
canal和Maxwell对比
canal和maxwell都是基于mysql的binlog的读取实现数据同步的方式来实现mysql的数据同步,但是canal更轻量级,社区和学习成本更低,且canal是纯java写的,而maxwell是基于lisp描述语言来编写的,从技术生态的支持和扩展性方面,canal更适合。
实现方式
1.mysql-binlog
启用MySQL的binlog
[mysqld]
log-bin=mysql-bin
binlog-format=ROW #选择row模式
server_id=9527 #配置mysql replaction需要定义,不能和canal的slaveId重复
设置以后,重启mysql服务,然后查询mysql的binlog设置是否打开
show variables like'log_%';
当结果是“on”表示binlog模式已经打开
2.canal-server
canal-server可以通过docker和编译方式两种进行部署,我们在这里使用的是docker的部署方式, 相对而言更加简单,部署以后只需要修改容器对应的配置即可。
从仓库拉取最新的canal镜像
docker pull canal/canal-server:v1.1.4
在mysql里创建canal用户和权限分配配置
create user 'canal' identified by 'canal';
grant all privileges on *.* to 'canal'@'%';
flush privileges;
docker容器方式启动canal-server服务
docker run --name canal-server \
-e canal.instance.master.address=192.168.3.26:3306 \
-e canal.instance.dbUsername=canal \
-e canal.instance.dbPassword=canal \
-p 11111:11111 \
-d canal/canal-server:v1.1.4
3.kafka集群搭建
下载镜像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
启动镜像
#zookepper启动
docker run -d --name zookeeper --p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper:latest
#kafka启动
docker run -d --name kafka --p 9092:9092 --link zookeeper
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.189:9092
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
-v /etc/localtime:/etc/localtime wurstmeister/kafka:latest
4.canal-client测试binlog接收情况
5.配置canal的mq推送方式
canal.properties配置
# 默认值tcp,这里改为投递到Kafka
canal.serverMode = kafka
# Kafka bootstrap.servers,可以不用写上全部的brokers
canal.mq.servers = 192.168.1.189:9200
# 投递失败的重试次数,默认0,改为2
canal.mq.retries = 2
instance.properties配置
# 配置监听的数据库地址和端口
canal.instance.master.address=192.168.1.20:3308
# 消息队列对应topic名
canal.mq.topic=example
# 发送到哪一个分区,由于下面用hash做分区,因此不设
canal.mq.partition=2
# 根据正则表达式做动态topic,目前采用单topic,因此也不设
#canal.mq.dynamicTopic=mall\\..*
接收推送消息写入es
接收消息推送es有两种实现方式:
canal-adaptor组件部署实现
方法
自定义kafka-consumer方式写入
es-client写入索引文档实现
此处由于是数据同步的单独服务,尽量少的产生服务依赖,因此,写入es考虑集成es-client处理
版权声明:本文为eddianliu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/eddianliu/article/details/105835285
智能推荐
STL-vector
目录 1.包含头文件 2.vector创建与初始化 3.vector大小及容量 4.vector元素访问 5.添加、插入及删除元素 1.包含<vector>头文件 2.vector创建与初始化 vector<T> vect:创建一个空 vector,没有元素,故不分配内存 vector<T> vect {v0, v1, .....
Inteli IDEA Maven创建Mybatis项目
文章目录 Maven创建java项目 配置pom.xml MyBatis配置文件 1.在/src/main下创建resources文件夹 2.配置SqlMapConfig.xml 3.配置/mapper/UserMapper.xml 4.配置log4j.properties 实例测试 1.创建实体类User 2.创建会话工厂类 3.创建测试类 Maven创建java项目 cmd到目标目录下输入mv...
恢复不小心执行 rm -f 被删除的文件?
模拟场景 1. 删除 误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件: 2. 恢复 1.使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件: 从上面可以看出,当前文件状态为已删除(deleted)。 2.查看是否存在恢复数据: /proc/13067/fd:进程操作的文件描述符目录。 8...
删除数组重复项
删除数组重复项 删除重复值 有一个整数数组, 去掉该数组中重复元素后排序打印, (相同的数字只保留一个, 禁止使用set和语言本身提供的函数) 输入: 第一行: 整数N 表示该数组的长度 第二行: 数组中每个元素的值An (0<N<10000, 0<An<1000) 输出: 去掉重复元素后的有序数组 样例输入: 11 1 3 4 2 6 2 6 2 8 2 6 样例输出: 1 2 3 4 6 8 ...
laravel框架接入图表Charts模块
laravel 图表Charts模版搭建 此功能用到了Charts模块 所以需要使用composer倒入相应的拓展包 开发环境申明 操作系统:Mac 开发环境:vagrant + Nginx -Tengine2.2 + MySQL 5.5 + PHP-7.1 集成环境:宝塔面板 搭建php+宝塔面板+vagrant+laravel+Mac+centos7.2+Composer开发环境 详细操作 打...
猜你喜欢
JAVA线程浅剖析
目录 什么是线程(百度百科) 操作系统(OS)线程状态 java创建线程的方法 JVM线程状态转换 线程数据结构 备注 什么是线程(百度百科) 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行...
过滤器过滤一个包内所有servlet
先看下文件的目录结构: 我们要做的就是用MyFirstFilter过滤servlet包内的所有servlet即DisplayHeader、HelloServlet、SecondServlet。 主要就是两个注意事项: 1: 这里一定要注意就是那个注释部分: 它原来的值是:@WebServlet(&ldquo;/HelloServlet&rdquo;),一定要改成上图所示的才可以 2.就是web.x...
【Write up】bugku--convert
下载附件1.txt,打开看到全是0、1 看到这么多0、1,第一想法就是进行进制转换,将二进制转成10进制或者16进制等,方便下一步操作,由于文件内容较多,在线工具没法转换,写个简单的python脚本跑一下吧: 转成16进制之后,删除开头的0x,然后在进行十六进制转ASCII码操作(可以直接用notepad++的插件) 转成ASCII码之后,看到开头Rar!,很明显的rar文件头,修改...
操作系统笔记之基础
1.进入操作系统 神秘的开机背景后面到底发生了什么? 打开电源,计算机就开始工作了,那计算机怎么工作? 冯。诺依曼存储程序思想:把程序和数据存放在计算机存储器中,计算机在程序的控制下一步一步执行。 设定一个程序指针PC指向指令,由PC指针从存储器中取出指令,交给运算器和控制器,程序指针PC自动指向下一个指令。 那么问题:打开电源以后,计算机执行的第一条指令是什么? x86pc,计算机刚打开时pc ...
Android从零开始:了解视图和视图组
除了少数情况之外,您构建的每个应用程序都具有某种形式的用户界面。 在Android上,这是通过使用View和ViewGroup对象来完成的。 在本文中,您将了解一些可用于显示内容的更常用的View组件,并向您介绍了它们的用法。 1.意见 View对象专门用于将内容绘制到Android设备的屏幕上。 虽然可以在Java代码中实例化View ,但是使用它们的最简单方法是通过XML布局文件。 当您在An...
灰信网(软件开发博客聚合)
程序员专属的优秀博客文章阅读平台
相关文章
数据同步工具--Canal
Canal数据同步
canal实现Elasticsearch数据同步
canal同步数据到redis
Flink结合canal同步数据
数据同步方案canal初探
SpringBoot整合Canal数据同步
Python之django-simple-captcha django简单验证码插件
uniapp省市区街道四级级联动选择器
Python+Paddlehub相片人像抠图精简源码实例
热门文章
Dubbo/Dubbox的服务暴露(三)- 服务的注册
laravel框架中封装公共方法全局调用
【Rt-Thread】STM32输出PWM
操作系统(李治军) L12内核级线程的实现
课文果园机器人这篇课文什么的果子_温儒敏教授:对长课文、难课文教学的思考(文字+视频版)...
Python-Time库
Map集合之HashMap(二)
Web前端入门 HTML基础
kuangbin 简单搜索 - POJ 1321 (dfs模板题)
system 远程创建文件夹失败_macOS:使用Intellij IDEA远程连接Hadoop
推荐文章
sharding-jdbc系列之order by结果归并(八)
卜若的代码笔记-DJAngo系列-第七章:上传资源-后台的处理
String.intern()详解,关于String s2 = new String("ja") + new String("va"); s2.intern();
【达内课程】利用框架volley和gson展示百度音乐列表(上)
pyechart数据可视化11 双坐标轴丨2020年全球智能个人音频设备出货量及增长率
ThinkPHP 5如何接入支付宝支付功能
算法总结 - 爬楼梯问题逐步优化,斐波那契类似问题套路
利用Python与selenium自动化模拟登陆12306官网!
Android消息机制三剑客之Handler、Looper、Message源码分析(二)
Java 指定范围的链表反转
相关标签
架构设计
Redis
redis
mysql
java
数据库
笔记
前端
uni-app
人脸识别
Copyright 2010-2022 - All Rights Reserved - www.freesion.com