在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引. 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tree))的索引结构. 下面,我们就结合HBase的实现,来深入了解HBase的核心数据结构与算法,包括索引结构LSM树,内存数据结构跳表.文件多路归并.读优化的布隆过滤器等. 1.LSM树 LSM树和B+树.哈希索引一样,是一种索引结构,那它们有什么区别呢? 哈希存储引擎是哈希表的持久化实现,支持增…
在前面两篇中,我们从基本概念理解了canal是一个什么项目,能应用于什么场景,然后通过一个demo体验,有了基本的体感和认识. 从这一篇开始,我们将从源码入手,深入学习canal的实现方式.了解canal相关功能的实现方式,其中有很多机制是非常值得深入了解的,从代码实现角度去学习实时数据订阅与同步的实现与核心技术点.当然,如果要在生产中使用这个开源项目,了解源码更是必不可少,是解决问题和新特性定制的前提条件. 本文使用的版本是1.1.4,这也是笔者写这篇博客时的最新稳定版. 1.准备工作 下载源…
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal 本文将对canal的启动模块deployer进行分析. Deployer模块(绿色部分)在整个系统中的角色如下图所示,用来启动canal-server. 模块内的类如下: 为了能带着目的看源码,以几个问题开头,带着问题来一起探索deployer模块的源码. CanalServer…
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal 本文将对canal的server模块进行分析,跟之前一样,我们带着几个问题来看源码: CanalServer有几种使用方式? 控制台Admin.客户端client是如何与CanalServer交互的? CanalServerWithNetty和CanalServerWithEmb…
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal instance模块比较简单,我们重点了解以下几个问题 instance配置模式有哪几种,如何根据配置创建instance? 远端配置如何覆盖本地配置的? instance实例内部有哪些组件? 1.基本结构 instance模块下面也分为三个子模块,core.manager.sp…
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal 本文将对canal的binlog订阅模块parser进行分析. parser模块(绿色部分)在整个系统中的角色如下图所示,用来订阅binlog事件,然后通过sink投递到store. parser模块应该来说是整个项目里面比较复杂的模块,代码非常多. 因此,本文根据过程中的主线来…
1.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Service)的开源版本. 2.提供的能力 Canal与DTS提供的功能基本相似: 1)基于Mysql的Slave协议实时dump binlog流,解析为事件发送给订阅方. 2)单Canal instance,单DTS数据订阅通道均只支持订阅一个RDS,提供给一个消费者. 3)可以使用canal-clien…
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Service)的开源版本,开源地址:https://github.com/alibaba/canal. canal从1.1.4版本开始引入了admin控制台,有了很多不一样的配置方式.在搭建过程中如果仅仅按照wiki的用户手册,还是容易踩很多坑的.因此,将笔者在搭建过程中的步骤记录下来,作为官方wiki的 补充,希望…
前面,我们已经打下了很多关于HBase的理论基础,今天,我们主要聊聊在实际开发使用HBase中,需要关注的一些最佳实践经验. 1.Schema设计七大原则 1)每个region的大小应该控制在10G到50G之间: 2)一个表最好保持在 50到100个 region的规模: 3)每个cell最大不应该超过10MB,如果超过,应该有些考虑业务拆分,如果实在无法拆分,那就只能使用mob: 4)跟传统的关系型数据库不同,一个HBase的表中列族最多不超过3个,列族中的列可以动态添加的,不要设计过多列族:…
Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引.当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告诉你. 1.什么是Phoenix Phoenix完全使用Java编写,将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集.Phoenix主要能做以下这些事情: 将SQL查询编译为HBase扫描scan 确定scan的开始和停止位置 将scan并行执行 将where子句中…