https://mp.weixin.qq.com/s/1h942YAcS6fhO5C43hGX-w

什么是数据异构?简单讲,就是将数据进行异地数据异构存储。

数据异构

服务市场使用 BinLake(京东 MySQL 的 Binlog 日志实时采集、统一分发、消息订阅和监控服务)进行数据异构,即通过订阅 MySQL 的 Binlog 日志,通过接收 JMQ 进行数据异地构建存储。

数据异构主要有两种方式,一种是顺序消费、另一种是并行消费。其中,在进行订单、订购的数据异构时是要求保证严格的顺序性的,因为并行消费是无法保证订单的先后顺序的,所以可能造成数据不一致。

但顺序消息的问题主要是单点消费效率慢的问题,以及消费出了问题就会造成阻塞,之前使用服务器进行消费,通过 ip 限制保证单点,后期切换到流式计算平台(strom/flink)进行处理,流式计算在并行写 es 和 jimdb 有天然的优势,但如果异常情况下出现写操作失败,对于 JMQ 的重试系统要做好幂等操作的处理。

订单数据同构

订单数据为顺序消费,一条订单数据,在插入 MySQL 时通过订阅 Binlog,通过 Flink 异构到 Elasticsearch 中。由于是单条记录,不涉及并发消费,可以订阅 Master MySQL。

订购数据异构

订购数据的数据异构有些不同,订购数据分为主表和扩展表,在 MySQL 中两张表的数据需要整合异构成一条记录存储到 Es 中。如果采用并行消费,则会出现 Flink 接收消息先后问题,简单说,就是有可能先接收到扩展表的 binlog 后接收到主表的 binlog。

所以改造的方案是,只订阅主表的 binlog,接收到消息后,通过反查 MySQL 的方式,进行数据整合,然后进行数据异构。考虑到对 MySQL 的压力,不能反查 Master MySQL,需要订阅 Slave MySQL。所以,这个方案的缺点是,不仅增加了 IO 的交互,而且数据异构的延迟较大。

商品数据异构

而商品数据异构是使用并发消费的,因为商品数据不需要保证严格的顺序,所以,商品数据异构的方式采用和订购数据同样的模式,由于商品数据需要缓存,所以,不仅要 Elasticsearch,还要写 redis,这样的架构设计使用 Flink 也很简单。

总结

Flink 被越来越多业务所使用,作为高性能的分布式流处理平台,不断的改进我们所使用的技术,以及不断突破我们原有的固化思维。其实,最早的设计方案是在系统里接收 Binlog 消息,然后处理,再异构存储写入 Elasticsearch。而采用 Flink,逐步理解流处理模式,我认为更在于思想理念上的改变。

最新文章

  1. Codeforces #364 DIV2
  2. cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)
  3. 关于移动开发的一些想法和认识--Android和iOS
  4. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度
  5. asp Gridview绑定形式获取行号
  6. 文件I/O
  7. POJ 1704 Staircase Nim 阶梯博弈
  8. select的option异常的总结
  9. PHP中获取中英文混合字符串长度[主要是指个数,而不是字符串长度](转)
  10. Node.js 实现简单小说爬虫
  11. jQuery插件slides实现无缝轮播图特效
  12. ejabberd聊天室离线消息
  13. js基础---cookie存储
  14. allegro把formate symbol文件从一个文件拷入另一个文件的方法
  15. 转载 * jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小
  16. Intellij idea使用过程中遇到的一些问题
  17. 我的第一个flutter程序
  18. [SDOI2016]游戏 树剖+李超树
  19. html页面嵌套---分享功能
  20. hdu6365 2018 Multi-University Training Contest 6 1004 Shoot Game

热门文章

  1. [archlinux][tls] archlinux下使curl支持sslv3的方法
  2. openwrt配置strongswan对接hillstone ipsec的笔记
  3. 191010 python3分解质因数
  4. QT5无法定位程序输入点 于动态链接库QtCore5.dll的解决
  5. 批处理引擎MapReduce程序设计
  6. suse12安装详解
  7. LeetCode - 206、反转链表
  8. Linux postfix配置方法
  9. vscode常用快捷键总结
  10. c++中形参为引用和非引用时调用构造函数