一、功能整合

1、各功能如何实现?

离线同步:可理解为将根据一个sql查询出的数据同步到其它目标存储上;

实时订阅:通过实时解析mysql-binlog,将数据的变动封装成事件存于消息队列,供用户订阅消费;

实时同步:提供一些常见的订阅客户端料现,实时消费消息,将数据的变动应用于目标存储上。

2、如何将三个功能集成在一个平台架构下?

将离线同步,实时订阅,实时同步三个需求抽象为三种作业,分别为BatchJob,StreamJob,PieJob。

i. BatchJob参考Sqoop的模式,将需同步的数据先根据指定的规则进行分片,然后将作业根据分片拆分成多个任务,每个任务只同步本分片的数据,多个任务可同时运行,以加快同步效率;

ii. 以BatchJob的模式为基础,StreamJob也可根据需要采集的mysql实例分成多个任务,每个任务负责采集解析一个mysql的binlog,并将解析后的事件封装成消息存于本地供订阅者消费;

iii. PieJob是对订阅客户端的封装,每一个订阅客户端即可看作一个任务。

三种不同的作业最终都可以通过分片分成多个任务去运行,使用统一的模型。

二、任务细节

以下为各个Job进行分片后生成的Task内部具体实现细节

1、BatchTask

Fetcher负责抽取数据,Sinker负责写入数据,Storage为缓存层。

2、StreamTask

RelayLogTask负责拉取binlog;HHLTask负责解析Binlog,并将解析出的数据变更事件封装为易使用的消息体,最后存入hhl中。

hhl的实现借鉴了Kafka,可看作一个简易版的消息队列。消息使用protobuf序列化,压缩后顺序写入文件。同时提供了指定大小的索引块。

在StreamTask中提供了一个ClientServer负责处理客户端的订阅请求,细节如下图:

当收到指定位点的订阅请求后先通过索引快速定位对应的数据块,然后扫描数据块定位对应的消息,将该位点之后的所有消息通过指定的过滤器过滤,最终推送给客户端。

消息订阅的服务端并不维护客户订阅的状态,即不存储客户端的位点,交由客户端自行处理。服务端只负责将指定的位点之后的消息不断的推送给用户。

3、PieTask

PieTask实际是对客户端的封装,这里主要介绍一下客户端的实现。

客户端采用并发处理的模式,connector负责接收消息,paritioner负责分发消息交给不同的Processor(线程)处理。

因客户端需自己记录当前处理的位点,但又要保障在并发场景下记录的位点之前的消息都已被正确处理。为了减少线程间阻塞,使用了环形数组的提交方式(记录位点)。

三、集群

使用Master-Slave结构,如下图所示:

Master这里称之为Queen;Slave这里称之为Bee。

Queen负责作业的分片,调度;Bee负责任务的具体执行(任务由作业分片后得到)。

1、高可用

i.Mysql:mysql的高可用由dba维护,但mysql主从切换后对应的位点会不同,此处通过监测serverId的变更来发现主从切换,主机切换后通过时间在新实例上查找对应位点;

ii.Queen:通过zookeeper来实现Active与StandBy的切换

iii.Bee:宕机后Queen会将该主机上运行的所有任务切换到其它机器上

2、数据本地性

每一台Bee都有自己的机柜,机架,机房,分组信息。作业运行时可以指定自己的喜好,任务会优先分到指定的机器分组上

3、负载均衡

Bee在运行时会通过心跳汇报自己负载情况,当一个任务需要调度时,Queen会在满 足数据本地性的前提下优先将任务分发到负载低的主机上。

阅读原文:

https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247485060&idx=1&sn=2d374061f2f85c453cc27d092a5354ad&chksm=fbf7b66bcc803f7dde316a4edbb40d9e6074640ef95ca7b1095b3d885433c991115ac00f1d9b&scene=21#wechat_redirect

转载于:https://www.cnblogs.com/iCheny/p/11056558.html

《数据蜂巢架构演进之路》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. Rank() over()的用法
  2. Floyed-Warshall算法
  3. 计算机用户账户无法打开浏览器,请问怎么样禁止一个电脑用户使用IE浏览器
  4. 【CComPtr】CComPtr和CComQIPtr的区别
  5. matlab2c使用c++实现matlab函数系列教程-log函数
  6. [转]我不敢!⋯⋯⋯⋯致所有拼搏的年輕人。
  7. SCT2450QSTE 国产车规AEC-Q100 3.8V-36V 5A 高效同步降压 DCDC 转换器 替代TSP54540
  8. win10升级后 IE 火狐 谷歌浏览器 不能上网 解决办法
  9. 经纬财富:沧州散户炒白银必读
  10. YiDB在翼支付账单业务的应用实践
  11. MATLAB中readtimetable函数用法
  12. dr.fone使用教程:如何修复iOS
  13. 身份信息认证服务器,在线身份认证解决方案
  14. 零样本学习和小样本学习(转)
  15. matlab进行数值积分的主要函数使用方法
  16. 这些片子你猜到结局了吗?
  17. 微整理IDEA快捷键
  18. 计算机基础知识与公文写作,公文写作与计算机基础知识.doc
  19. Linux下修复U盘坏块,DiskGenius修复U盘坏块问题巧借
  20. 怎样使html兼容各个浏览器,怎样使CSS兼容浏览器?

热门文章

  1. 网线的交叉线和直通线原理
  2. 如何利用MATLAB做非线性一元回归,Matlab一元非线性回归分析
  3. 开发工具篇——常用开发工具分享
  4. php 判断百度蜘蛛抓取,百度蜘蛛抓取不存在目录 对应的解决方法
  5. PHP入门-运算符与操作符
  6. netcfg android
  7. 华尔街追逐中国机遇,阿里巴巴收盘价创下历史新高
  8. [bib]论文参考文献的获取方式(持更)
  9. 2021北京高考成绩查询教育在线,关注 | 多省公布2021高考成绩查询时间!
  10. GEC6818开发板使用和配置