栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Canal binlog 日志管理器与GTID简介,java程序设计基础课后答案

Canal binlog 日志管理器与GTID简介,java程序设计基础课后答案


1.1 类图

整个日志管理器由接口 CanalLogPositionManager定义,主要定义两个方法:

  • LogPosition getLatestIndexBy(String destination)

根据destination获取同步位点,即在Canal Instance 中同步进度是以源实例为最小维度的。

  • void persistLogPosition(String destination, LogPosition logPosition)

持久化同步位点。

Canal 中提供了7种位点管理机制,分别如下:

  • MemoryLogPositionManager

同步位点存储在内存中,即存放在 Map positions 中,通常用于测试或结合其他位点管理,用来提高性能。

  • ZooKeeperLogPositionManager

同步位点存储在zookeeper中,是主流的分布式存储方案。

  • metaLogPositionManager

Canal中的元数据存储方式,即位点信息与元数据存放在一起。

  • MixedLogPositionManager

混合日志位点管理器,主要是内存与Zookeeper的混合方式,在存储位点时先存入内存,然后用线程池异步存储到zookeeper中。

  • FileMixedLogPositionManager

基于内存与本地文件的混合日志管理器,存储位点时首先存入内存,然后定时同步到文件中。

  • PeriodMixedLogPositionManager

带定时功能的基于内存与zookeeper的混合日志管理器,存储位点时先写入内存,然后定时同步到zookeeper。

  • FailbackLogPositionManager

待failback机制的日志位点管理器,即可以创建准备两种日志管理器,例如在构建时可以将 ZooKeeperLogPositionManager 当为主管理器,基于 FileMixedLogPositionManager 当备用日志位点管理器,在写入日志位点时,尝试写入主日志管理器,如果抛出异常,则使用备用日志管理器;查询位点时先查主日志

管理器,如果未查到,则查备用日志管理器。

1.2 日志管理器使用方法

由于Canal日志管理器的实现比较简单,这里就不一一去看源码了,那这里就重点介绍一下其使用方法。

CanalInstanceWithManager#initLogPositionManager

从这里可以看到,Canal 提供了 indexMode 属性来指定使用哪种日志管理器,其可选项:

  • MEMORY

内存

  • ZOOKEEPER

基于zookeeper,使用该模式还需要通过 zkClusters 设置 zk 集群的地址。

  • MIXED

混合模式,基于内存+Zookeeper + Period,即定时存储到 zookeeper 中,使用的实现类为MixedLogPositionManager,默认为每隔1s持久化一次。

  • meta

基于元数据的管理模式。

  • MEMORY_meta_FAILBACK

基于内存与元数据的fallback,其中主日志管理器为 MEMORY。

在生产环境,通常建议使用 MIXED,基于内存与Zookeeper的混合模式。

2、MySQL GTID 扫盲


在MySQL5.6.x中引入了GTID机制,用于优化主从同步机制,本文不打

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

算详细介绍GTID的方方面面,只是初步认识GTID,方面在后续实现数据同步方面思考数据一致性如何保证等方案时具备必要的基础。

首先我们可以通过如下命令查看与gtid相关的属性。

主要的变量的含义如下:

  • gtid_executed

当前MySQL实现已经执行过的事务。在开启GTID模块时每执行一个事务会产生一个全局唯一的事务ID。再每一台MySQL实例上执行的事务何止上亿,这个字段要存储所有已执行的的事务ID,怎么存储能节省空间就是一个需要解决的问题,稍后再进行展开说明。

  • gtid_executed_compression_period

在MySQL5.7版本专门引入了一个系统表:mysql.gtid_executed,gtid_executed_compression_period 参数就是设置每执行多个事务,对这个表进行压缩,默认值为1000。

  • gtid_mode

是否开启gtid模式。

  • gtid_purged

已不在binlog日志中的事务ID,Mysql并不会永久存储binlog日志,而是通过 expire_logs_days 设置过期时间,单位为天,默认为10天。

一个GTID由两部分组成:server id uuid 与递增序号,两者之间用英文冒号隔开,例如上图中的:1f0eee4c-a66e-11ea-8999-00dbdfe417b8:1。

再来回到 gtid_executed 的存储问题上,为了减少存储空间,连续的gtid可以用进行合并,例如 1f0eee4c-a66e-11ea-8999-00dbdfe417b8:1-10,表示连续代表1-10个事务。

GTID的生成有自动递增与手动执行模式,自动递增模式可以在单个Server集群中保证有序,即GTID值越大,说明事务越后执行,但如果进行了人工干预,GTID就不是越大越先执行了,举例如下:

通过如下命令手动指定gtid:

set gtid_next=‘1f0eee4c-a66e-11ea-8999-00dbdfe417b8:10’;

begin;

commit;

set gtid_next=‘AUTOMATIC’;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号