加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

如何基于日志,同步实现数据的一致性和实时抽取?

发布时间:2021-01-07 10:51:23 所属栏目:安全 来源:网络整理
导读:副标题#e# 《如何基于日志,同步实现数据的一致性和实时抽取?》要点: 本文介绍了如何基于日志,同步实现数据的一致性和实时抽取?,希望对您有用。如果有疑问,可以联系我们。 作者:王东 宜信技术研发中心架构师 目前就职于宜信技术研发中心,任架构师,负责

消息中schema部分,定义了namespace 是由 类型+数据源名+schema名+表名+版本号+分库号+分表号?能够描述整个公司的所有表,通过一个namespace就能唯一定位.

  • _ums_op_ 表明数据的类型是I(insert),U(update),D(删除);
  • _ums_ts_ 发生增删改的事件的时间戳,显然新的数据发生的时间戳更新;
  • _ums_id_ 消息的唯一id,保证消息是唯一的,但这里我们保证了消息的先后顺序(稍后解释);

payload是指具体的数据,一个json包里面可以包含1条至多条数据,提高数据的有效载荷.

UMS中支持的数据类型,参考了Hive类型并进行简化,基本上包含了所有数据类型.

全量和增量的一致性

在整个数据传输中,为了尽量的保证日志消息的顺序性,kafka我们使用的是1个partition的方式.在一般情况下,基本上是顺序的和唯一的.

但是我们知道写kafka会失败,有可能重写,Storm也用重做机制,因此,我们并不严格保证exactly once和完全的顺序性,但保证的是at least once.

因此_ums_id_变得尤为重要.

对于全量抽取,_ums_id_是唯一的,从zk中每个并发度分别取不同的id片区,保证了唯一性和性能,填写负数,不会与增量数据冲突,也保证他们是早于增量消息的.

对于增量抽取,我们使用的是MySQL的日志文件号 + 日志偏移量作为唯一id.Id作为64位的long整数,高7位用于日志文件号,低12位作为日志偏移量.

例如:000103000012345678. 103 是日志文件号,12345678 是日志偏移量.

这样,从日志层面保证了物理唯一性(即便重做也这个id号也不变),同时也保证了顺序性(还能定位日志).通过比较_ums_id_ 消费日志就能通过比较_ums_id_知道哪条消息更新.

其实_ums_ts_与_ums_id_意图是类似的,只不过有时候_ums_ts_可能会重复,即在1毫秒中发生了多个操作,这样就得靠比较_ums_id_了.

心跳监控和预警

整个系统涉及到数据库的主备同步,Canal Server,多个并发度Storm进程等各个环节.

因此对流程的监控和预警就尤为重要.

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!