• 《数据蜂巢架构演进之路》阅读笔记


    一、功能整合

    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

  • 相关阅读:
    stanford nlp 3.8.0 parser输出的问题
    stanford nlp 3.8.0 parse中通过java程序获取root节点
    spring boot 项目中hanlp的配置(可增加自定义词典)
    springmvc jsonp 跨域调用的例子
    滚动字幕Marquee
    table-列组
    限时抢购-倒计时
    canvas基础绘制-绚丽时钟
    canvas基础绘制-绚丽倒计时
    JS进阶-闭包的几种常见形式
  • 原文地址:https://www.cnblogs.com/iCheny/p/11056558.html
Copyright © 2020-2023  润新知