技术原理|Hologres Binlog技术原理揭秘

作者:张高迪(花名杳天),Hologres研发。

同传统MySQL数据库,Hologres支持Hologres binlog,记录数据库中所有数据的变化事件日志。通过Hologres binlog,可以非常方便灵活的实现数据之间的复制、同步。同时在大数据场景上,支持Flink直接消费Hologres Binlog,相较于传统数仓分层,Flink+Hologres Binlog可以实现完整的事件驱动,完成ODS向DWD,DWD向DWS等的全实时加工作业,满足分层治理的前提下统一存储,提升数据复用能力,并且大大缩短数据加工端到端延迟,为用户提供一站式的实时数据仓库解决方案。在本文中,我们将会介绍Hologres Binlog技术实现原理以及使用最佳实践。

Hologres Binlog介绍

1、什么是Binlog?

Binlog即二进制日志(Binary Log),这个概念常见于MySQL数据库,是用来记录数据库所有可能引起数据变化事件的日志,比如表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)事件。

MySQL Binlog最初有两个主要用途:

  • 主从复制:主服务器将其Binlog文件中包含的事件发送到从服务器,从服务器执行这些事件以进行与主服务器相同的数据更改,从而保证主从服务器之间的数据一致性。
  • 数据恢复:通过重新执行Binlog文件中记录的事件,使数据库恢复到发生问题之前最新的状态。

Binlog也被用作流式的数据源。用户常常通过Debezium或者阿里开源的 Canal等数据采集工具,采集Binlog作为流式的数据源,从而实现数据从MySQL到其他类型数据库的数据同步,一般先将采集的数据输出到消息中间件如Kafka等,然后通过Flink引擎去消费数据并进行相应计算,最终写入到目的端。目的端可以是各种 DB,数据湖,实时数仓和离线数仓等。

2、Hologres Binlog与传统数据库Binlog的区别

Hologres Binlog与传统数据库Binlog的主要区别在于,前者一般只用于数据同步,而后者还应用于主从实例同步和数据恢复等高可用场景。因此两者的实现也有了一定的差别,主要体现在以下方面:

Hologres的高可用通过基于WAL log复制实现的物理Replication来保证,详见技术揭秘:从双11看实时数仓Hologres高可用设计与实践

  1. Hologres Binlog不会记录DDL操作。

Hologres的Binlog主要面向数据消费,不支持记录表结构变更(如CREATE TABLE、ALTER TABLE 等DDL)操作,只记录数据变更记录(INSERT、UPDATE、DELETE),记录方式类似MySQL Binlog的 ROW(row-based replication)模式,会完整的记录每行数据的变更情况。

  1. Hologres Binlog较为灵活,是表级别的,可以按需打开和关闭,且可以为不同的表设置不同的TTL。

MySQL 开启Binlog是实例级别的,一般会占用比较多的存储,并且打开Binlog往往需要重启集群;而Hologres 的Binlog更加细粒度,可以在使用中按需对某张表进行开启和关闭,并为不同的表设置不同的Binlog存活时间,完全不影响实例中的其他数据库和数据表,打开Binlog只会多出一份表级别的存储。

  1. Hologres Binlog可以非常方便的进行查询。

在使用中,用户可以通过在query中添加 hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timetsamp_us 这三个字段来查询表的Binlog。如果查询的字段包含了上述三个字段之一,如select hg_binlog_lsn, * from test_message_src;便会自动路由到Binlog表进行查询。相对而言,用户在MySQL想要查看Binlog则不够直观,需要通过show binlog events命令或者MySQL Binlog工具去解析Binlog文件。需要注意的是,Hologres Binlog底层采用行存表存储,因此在查询时,推荐过滤条件中包含hg_binlog_lsn字段来保证查询效率,按照其他业务字段查询会演变为全表扫描,表数据量大时查询会比较慢,应该尽量避免。

  1. Hologres作为分布式的实时数仓,Binlog同样也是分布式的。

Hologres Binlog与普通的Hologres表数据一样,分布在不同的shard上,读取Binlog等操作也以shard分片,类似kafka的partition,详细可以看下方的实现原理。

总的来说,Hologres Binlog可以简单的定义为:可以按需开关的,以行为单位记录Hologres某张表数据变更记录(INSERT、UPDATE、DELETE)的二进制日志。可以看到,Hologres Binlog自设计起便是为实时消费和用户使用而生的,相比MySQL Binlog拥有的历史包袱,更加易用和灵活。

3、Hologres Binlog格式

Hologres 的Binlog包含如下字段。

在这里插入图片描述

字段说明:

image.png

说明:

  • UPDATE操作会产生两条Binlog记录,分别为更新前和更新后的记录。订阅Binlog功能会保证这两条记录是连续的且更新前的Binlog记录在前,更新后的Binlog记录在后。
  • 用户字段的顺序与DDL定义的顺序一致。

Hologres Binlog使用场景

1、数据实时复制、同步

Hologres通过Binlog实现了逻辑Replication,从而可以订阅Binlog进行数据的复制和同步。

在这里插入图片描述

典型的逻辑复制使用场景有:

1、把一张Hologres的行存表复制成一张列存表,行存支持点查点写,列存支持多维分析型需求。

比如在阿里CCO的使用场景中,写入Hologres行存表的数据,会通过Hologres Connector Binlog订阅,将公共层明细数据有选择的进行二次计算,并写入回Hologres列存应用层明细表中,提供给不同的应用层分析和汇总场景。Hologres 1.1版本开

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值