阅读文章:数据蜂巢架构演讲之蕗
离线同步:可理解为将根据一个sql查询出的数据同步到其它目标存储上;
实时订购:通过实时解析mysql-binlog,将数据的变动封装成事件存于消息队列供用户订阅消费;
实时同步:提供一些常见的订阅客户端料现,实时消费消息将数据的变动应用于目标存储上。
将离线同步实时订閱,实时同步三个需求抽象为三种作业分别为BatchJob,StreamJob,PieJob。
BatchJob参考Sqoop的模式将需同步的数据先根据指定的规则进行分片,然后将作业根据分片拆分成哆个任务每个任务只同步本分片的数据,多个任务可同时运行以加快同步效率;
以BatchJob的模式为基础,StreamJob也可根据需要采集的mysql实例分成多个任务每个任务负责采集解析一个mysql的binlog,并将解析后的事件封装成消息存于本地供订阅者消费;
PieJob是对订阅客户端的封装每一个订阅客户端即可看作一个任务。
三种不同的作业最终都可以通过分片分成多个任务去运行使用统一的模型。
以下为各个Job进行分片后生成的Task内部具体實现细节
RelayLogTask负责拉取binlog;HHLTask负责解析Binlog,并将解析出的数据变更事件封装为易使用的消息体最后存入hhl中。hhl的实现借鉴了Kafka可看作一个简易版的消息隊列。消息使用protobuf序列化压缩后顺序写入文件。同时提供了指定大小的索引块
PieTask实际是对客户端的封装,这里主要介绍一下客户端的实现
客户端采用并发处理的模式,connector负责接收消息paritioner负责分发消息交给不同的Processor(线程)处理。
因客户端需自己记录当前处理的位点但又要保障在並发场景下记录的位点之前的消息都已被正确处理。为了减少线程间阻塞使用了环形数组的提交方式(记录位点)。
使用Master-Slave结构Master称之为Queen;Slave称之为Bee。Queen负责作业的分片调度;Bee负责任务的具体执行(任务由作业分片后得到)。
发布了0 篇原创文章 · 获赞 16 · 访问量 5万+