Otter数据同步原理

news2024/12/25 9:34:33

       otter是阿里巴巴的开源的一款数据数据同步工具,它基于对数据库增量日志解析,准实时同步到本机房或者异地机房的mysql/oracle/mq等,是一个分布式数据同步系统。otter第一版本可追溯到04~05年,开发时间从2011年7月份一直持续到现在;当时因阿里巴巴的业务特点,买家主要集中在国外,卖家在国内,因此诞生了杭州和美国异地机房,同时为了提升用户体验,整个机房是一个双A架构,两边均可写,由此诞生了otter这样一个产品;2019年otter更新版本为4.2.19-SNAPHOST后未再做大的版本更新。

      otter的主要的使用场景有:

    (1)异构库同步:mysql -> mysql; mysql -> oracle; mysql -> mq

    (2)单机房同步:单机房内部数据同步,数据异构;

    (3)数据迁移:历史数据迁移,全量迁移/增量迁移

    (4)异地机房同步:异步机房同步支持,用于容灾

    (5)双向同步:支持双向同步 A -> B; B -> A;同时避免双向回环

    (6)文件同步

        在讲otter同步原理前需要提一下mysql的日志,otter是基于mysql的增量日志解析来实现数据同步的,这里的日志就是mysql二进制日志——binlog日志,该类型日志详细记录了所有修改的数据的sql,当某一时刻的数据误操作导致问题,或者数据库当即数据丢失,就可以通过binlog日志完成数据的找回。同时binlog日志用于mysql主从数据同步的桥梁,从库通过监控主库的binlog日志,同步主库的所有数据修改。

       otter是通过cannal获取并解析mysql的binlog日志,cannal模拟Mysql slave的交互协议,伪装自己为Mysql的slave,向Mysql master发送dump请求,Mysql master收到dump请求后开始推送binlog日志给slave既cannal,cannal解析binlog日志,解析完成后将数据推送给otter的node节点,然后进行后续的处理。

        otter由cannal、manager、node、zookeeper几部分构成:

     (1)其中cannal负责获取并解析binlog日志。

     (2)manager负责维护系统配置、node节点信息、告警、同步channel任务、数据源等内容,同时同步任务统计数据全部都是在manager展示查阅;  

     (3)node节点主要是从cannal获取解析后的binlog信息,主要经过SETL四个阶段处理,重新组装sql并执行,完成数据的增量同步、存量数据的修改,同时还可以自定义逻辑(实现EventProcessor,详情见:otter 扩展-CSDN博客)完成特殊逻辑的处理。

     (4)zookeeper 主要是完成分布式协调任务,存储节点临时信息,节点状态存储,存储中间数据等。

       otter获取到cannal解析的binlog信息后,由node节点经过SETL四个阶段的处理,最后将数据同步至目标库。otter采用的SEAD的模型将binlog数据信息分成了四个阶段处理,每个阶段完成自身处理的逻辑后将数据推送至下一个阶段,阶段的处理顺序:S -> E -> T -> L,四个阶段的处理顺序不能乱。

      (1)S 阶段的处理由SelectTask任务处理,主要从cannal获取数据并组装成EtleventDate对象,整个SETL阶段都是通过将数据封装成EtleventDate进行传递。

      (2)E阶段处理由ExtractTask任务处理,主要完成数据提取,数据过滤,执行自定义的EventProcess。

      (3)T阶段处理由TransformTask任务处理,主要完成数据转换。

      (4)L阶段处理由LoadTask任务处理,完成数据载入,主要就是组装sql,完成sql执行。

       otter使用的SEAD模型完成数据流的处理,SEAD模型共享thread pool,解决流控机制;提升资源利用率统一编程模型。otter内部为完成数据流的不同状态扭转,提供了三种仲裁器实现,基于memory的仲裁、基于zookeeper的仲裁器、基于Rpc的仲裁器;基于memory的仲裁器,数据传递在内存中,传递数据快,但是存在单点问题;基于Zookeeper仲裁器,将数据存在Zookeeper的持久节点上,可多节点协调处理;基于Rpc仲裁器,在通知下一个阶段处理时会携带需要处理的数据信息;

         上图是基于memory的仲裁器实现的数据扭转时许图,数据在经过SETL四个阶段完成数据处理,每个数据阶段处理完成将数据推送至下一个阻塞队列由下一个阶段的任务处理器完成数据处理再推向下一个阶段。基于memory仲裁实现的过程中数据一直在process中,S阶段处理完后数据存入process的Map结构中,key为processId,E阶段处理完后重新再将数据放入process中,替换掉原来的EtlEventData;中间阻塞队列是存储与processId信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已解决】黑马点评项目中-实战篇11-状态登录刷新章节设置RefreshTokenInterceptor拦截器后登录异常的问题

黑马点评项目中-实战篇11-状态登录刷新章节设置RefreshTokenInterceptor拦截器后登录异常的问题 在 MvcConfig 文件中添加好RefreshTokenInterceptor拦截器 出现异常情况 按照验证码登录后,进入主页面,再点击“我的”,又跳入登录界面 原因…

AI - RAG中的状态化管理聊天记录

AI - RAG中的状态化管理聊天记录 大家好,今天我们来聊聊LangChain和LLM中一个重要的话题——状态化管理聊天记录。在使用大语言模型(LLM)的时候,聊天记录(History)和状态(State)管理是非常关键的。那我们先…

记一次跑前端老项目的问题

记一次跑前端老项目的问题 一、前言二、过程1、下载依赖2、启动项目3、打包 一、前言 在一次跑前端老项目的时候,遇到了一些坑,这里记录一下。 二、过程 1、下载依赖 使用 npm install下载很久,然后给我报了个错 core-js2.6.12: core-js…

使用Goland对6.5840项目进行go build出现异常

使用Goland对6.5840项目进行go build出现异常 Lab地址: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html项目地址: git://g.csail.mit.edu/6.5840-golabs-2024 6.5840运行环境: mac系统 goland git clone git://g.csail.mit.edu/6.5840-golabs-2024 6.5840 cd 6.5840/src…

Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度

GY-302是一款基于BH1750FVI光照强度传感器芯片的模块。该模块能够直接测量出环境中的光照强度,并将光照强度转换为数字信号输出。其具体参数如下表所示。 参数名称 参数特性 测量范围 0-65535 LX 测量精度 在环境光下误差小于20%,能够自动忽略50/60…

网站打开速度测试工具:互联网优化的得力助手

在信息飞速流转的互联网时代,网站如同企业与用户对话的窗口,其打开速度直接关乎用户体验,乃至业务的成败。所幸,一系列专业的网站打开速度测试工具应运而生,它们宛如幕后的技术侦探,精准剖析网站性能&#…

2024数字科技生态大会 | 紫光展锐携手中国电信助力数字科技高质量发展

2024年12月3日至5日,中国电信2024数字科技生态大会在广州举行,通过主题峰会、多场分论坛、重要签约及合作发布等环节,与合作伙伴共绘数字科技发展新愿景。紫光展锐作为中国电信的战略合作伙伴受邀参会,全面呈现了技术、产品创新进…

Matlab R2024b 中文版 下载及安装教程

点击下方链接下载安装包 Matlab R2024b 中文版安装包点击下载https://mp.weixin.qq.com/s/Kq2j1dQLdULOVV9vrA6pkA 安装教程 1.通过上方链接下载软件,鼠标右键【MATLAB R2024b(64bit)】压缩包,选择解压到MATLAB R2024b(64bit)。 2.双击进入解压后的文…

输入法:点三下输入一个汉字

作者常用的双拼输入法,需要26键。虽然也有9键的方案,但重码率较高。计算一下,9键点2下,共81种排列组合。而汉字的读音,不计声调,有400多个。相差甚多。 所以,设计了“三拼输入法”,…

Windows设备go环境安装配置

一、下载go安装包 官网链接:All releases - The Go Programming Language (google.cn) 安装过程比较简单,这里不再赘述,可参考这位博主的文章。本文重点在环境配置。golang环境详细安装、配置_golang安装-CSDN博客 二、环境变量配置 1.添…

简易图书管理系统

javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…

电子信息工程自动化 单片机自动门控制系统设计

摘 要 伴随着社会经济的发展进步、科学技术的发展进步以及人民群众日常生活质量的逐渐提升,自动门开始全面进入人民群众的生活,逐渐发展成为了宾馆、大型超市、政府等当代建筑里必须配备的设备,是建筑自动智能化综合水平的主要标准之一。它具…

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)

文章目录 一、ansible的主要组成部分二、安装三、相关文件四、ansible配置文件五、ansible 系列 一、ansible的主要组成部分 ansible playbook:任务剧本(任务集),编排定义ansible任务集的配置文件,由ansible顺序依次执…

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…

# issue 8 TCP内部原理和UDP编程

TCP 通信三大步骤: 1 三次握手建立连接; 2 开始通信,进行数据交换; 3 四次挥手断开连接; 一、TCP内部原理--三次握手 【第一次握手】套接字A∶"你好,套接字B。我这儿有数据要传给你,建立连接吧。" 【第二次…

Dubbo应用篇

文章目录 一、Dubbo简介二、SSM项目整合Dubbo1.生产者方配置2.消费者方配置 三、Spring Boot 项目整合Dubbo1.生产者方配置2.消费者方配置 四、应用案例五、Dubbo配置的优先级别1. 方法级配置(Highest Priority)2. 接口级配置3. 消费者/提供者级配置4. 全…

Vulnhub---kioptirx5 超详细wp

个人博客 WuTongSec 欢迎大佬指点 打点 nmap 192.168.128.0/24 -sP 找ip nmap 192.168.128.137 --min-rate 10000 -p- 简单全端口扫描 nmap 192.168.128.137 -sC -sV -O -sT 详细 脚本 版本 系统 扫描 dirsearch -u http://192.168.128.137 目录扫描 PORT S…

JAVA八股文-运行篇-创建项目运行(1)

前置环境搭建:jdk、maven、idea、linux环境 一、创建一个java项目 File->New->Project 二、填写基本信息 三、完成,写了一段代码 四、打包 五、本地运行,运行和debug二选一 六、上传至linux环境 七、linux环境下命令执行 7.1 指定Main方法类 …

【C++】异常之道,行者无疆:解锁 C++ 的异常捕获哲学

文章目录 C语言处理错误C异常异常的抛出与捕获基本语法catch 的匹配原则函数调用链中的匹配原则异常的重新抛出 异常安全异常规范C标准库异常 C语言处理错误 终止程序:利用 assert() 断言去终止程序,当 ()的表达结果为 false 时会终止程序。返回错误码&…

[SWPUCTF 2022 新生赛]Ez_upload 详细题解

知识点: 文件上传 MIME绕过 script版本一句话木马 .htaccess配置文件 蚁剑虚拟终端的使用 打开题目可以文件上传 传入php文件, 提示 后缀不能是ph 所以也不能输入 phtml php3 pht等可以解析为php文件的后缀 bp抓包把传入的php木马文件后缀手动修改为jpg图片格式 提示 你上…