开发者学堂课程【如何将PolarDB-X与大数据等系统互通:如何将 PolarDB-X 与大数据等系统互通】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/984/detail/14937
如何将 PolarDB-X 与大数据等系统互通
内容介绍
一、环境准备
二、演示内容
一、环境准备
本节内容会讲如果将 PolarDB-X 与下游的一些数据的系统比如说大数据等,进行一个互通,其实就是讲一下 PolarDB-X 提供一个全新变化的一个能力。
首先它还是围绕 PolarDB-X 的社区版,也就是开源的版本来进行一个讲解,那么它对应的是在阿里云上的 PolarDB-X 商业版的一个2.0,面向群体就是主要应用开发者、架构师、 DBA、DevOps、SRE 和学生等等。
主要的内容就是围绕在使用 PolarDB-X 的整个生命周期的过程当中所有的场景,这样一个场景化的介绍会有一些动手的实践的一个过程。
那么这个课程大概会覆盖这些 topic , topic 在后面也可能会有所增加或者是调整,比如说第一期讲了如何一键部署 PolarDB-X ,那么第二期讲了如果使用 PolarDB-X ,那今天按照这个顺序,应该是讲数据导入或者是水平或缩容,但是目前这两个功能依赖于最近即将发的一个新的版本,所以那就把它调整到这个画板之后再进行讲解,所以这一讲需要有这样一些基础的准备。
第一个就是系统,首先需要有一台 CentOS7、CentOS8、macOS等等。 Windows 没测过,但希望它可以完成。配置就稍微好一点的配置,那么这个环境里面需要装上像 Docker、MySQL ,还有一个可使用的 PolarDB-X ,还有今天演示所依赖的一个阿里开源的工具。
那么按照惯例,首先回来看一下 PolarDB-X 的一个架构,那理解这个架构会有助于理解后面的很多实践动手过程当中的一些细节,所以首先还是来看一下 PolarDB-X 的一个的基础架构,它是一个分布式的一个水库,那么在系统组建实际上它也是个分布式的一种方式。最前面也就是跟应用的交互这边有吸引的一个组件,也是分布式计算的节点,那么后面紧跟的就是 DN ,它是数据存储的一个节点, DN 是一个 MySQL 的一个本质,所以为了方便理解可以简单的把它理解成是一个定制化的 MySQL ,那么最上面的是元数据中心 Gms,那它其实也是一种 DN ,只不过扮演了特殊的角色,它会保存整个系统的元数据,同时提供一个全局式的授时服务,那最后也是跟今天内容相关的 CDC 这样的一个全局日志生成的一个组件,这是整个系统的架构
二、演示内容
第一部分来演示一下PolarDB-X 作为一个圆,中间用上开源的 Canal,作为增量的一个数据的订阅,也就是消费全级 Binlog ,那最后把 Canal 的数据本来计划是投递到 kafka 当中,因为分析的系统比较热门,所以把数据就都投递到 Kinkhouse 里面,第一个要演示的场景就是 PolarDB-X +Canal+Kafka ,最终的目标是跑起一个 PolarDB-X 或者搭建一条同步列路,然后在 PolarDB-X 里面写一些数据,实际上是在做一个数据库当中常用的一个测试场景,它叫转账测试。希望这个同链路能够把这些数据正常的同步到下游的 PolarDB-X 里面。
第二个场景是 PolarDB-X 提供了与 MySQL 完全兼容的一个能力。那么作为一个验证也会把 MySQL 作为 PolarDB-X 的一个备库,然后直接用 MySQL 的change master指令来连到 PolarDB-X 里面,同时在 PolarDB-X 这边再次跑一个转账测试,希望转账测试里面的数据能够正常的同步到MySQL 这个备库里面。首先来进行第一个演示,也就是 PolarDB-X +Canal+Kafka。用了阿里云上的一台 ecs ,把这些链路搭建起来,同时因为中间有一段需要写代码的,也就是Kinkhouse 消费到 PolarDB-X 中的 Binlog 之后,它需要用 Canal的 Kink 去消费增量。
同时再把它写到Kinkhouse 里面。这段代码直接把它放在那个 idea 本地建了一个工程,所以这次演示首先 PolarDB-X +Canal+Kafka,更精确的来说以及Kinkhouse 。
这三个都是以一个 docker 容器跑在了一个远程的 ecs 的远程服务器上,然后 Kinkhouse 是跑在个人电脑。那么接下来首先登录远程演示的服务器,这是一直以来用来演示的服务器,那么接下来先来看一下,可以看到远程的服务器上,目前一个容器都没有所以全新来建几个容器,第一个需要把 PolarDB-X 建立好,这是之前已经测试过的,所以这个电脑上会有之前敲过的一些命令的记录,有的用户可能看得比较清楚,发现之前执行的命令直接补全掉,那如果不知道,给大家推荐一个比较好用的 shell 叫 fish ,然后它还是比较好用的,大家可以去用一下,这样就把 PolarDB-X 给解决掉,这个容器是用我最近打包的一个新的 PolarDB-X 的一个 one 的一个形象iPod,那它里面启动 PolarDB-X 需要一点点的时间,那用这点时间来讲一下把那个我的client,也就是我消费 clinicnk server里面增量数据写到Kinkhouse 那段代码,它的基本都是怎么样的?
昨天我在 Idea 里面建了一个工程,然后这个工程很简单,它就一个类,这个类就是为了演示,从clinicnk server里面拉到增量数据,我是把它投递到Kinkhouse 里面,首先是从给它们 Kink的那个官方的例子里面直接把那段代码给拷贝过来的,也就是那个 example 拷贝下来的,然后做了稍微的一个修改。
那前面就是连接 clinicnk server 一个过程,尝试连接去获取消息。如果没有就等待一秒之后再去尝试获取的这么一个循环,然后一旦获取到数据之后,它就是在控制台。
这个方法就把这些获取到的增量的数据打印出来,那么在 example 里面,这个代码就算完成。
那我做的修改的部分就是在它打印的时候,我同时去建了一个到一个 Kinkhouse 连接,可以看到这里是用 Kinkhouse 提供的一个标准的 gbc 连接的一个方式,首先搞了一个Kinkhouse ,然后再写一个connection,然后写一statement ,之后会在这些里面的记录的时候,在这里获取达到每一行变更,如果发现里面是 insert 或者是 update 的实践,那我会尝试把它投递到Kinkhouse 。