当前位置: 首页 > news >正文

做电商必须知道的网站重庆专业微网站建设

做电商必须知道的网站,重庆专业微网站建设,wordpress 角色 功能,功能型网站案例我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL#xff0c;代码网上基本都有#xff0c;都是在引入 debezium-api#xff0c;debezium-embedded 后写 Java 代码#xff0c;做好了基本配置后启动程序#xff0c;Debezium 会自动读取 MySQL 的实时 binlog…        我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL代码网上基本都有都是在引入 debezium-apidebezium-embedded 后写 Java 代码做好了基本配置后启动程序Debezium 会自动读取 MySQL 的实时 binlog然后触发相应的事件让我们处理我们就把事件里的数据读取出来插入到目标库即可。我们的 MySQL 的版本是 5.7 。 但我们在其中发现了一个很奇怪的问题目标库存在多个相同的 sql 我们以为是 Debezium 重复消费了 binlog 里的事件就记录下每个事件的 position 并判重但 sql 还是重复了我们一开始觉得 MySQL 写的 binlog 肯定没问题一个事务对应一个事件。之后我们使用 binlog2sql 这个 python 工具读取了已归档的 binlog 文件发现里面没有重复的 sql 这说明 MySQL binlog 还是没有问题的问题在 Debezium但 Debezium 作为一个成熟的 cdc 工具应该也不会有什么大的问题可能是 Debezium 的配置问题但检查了 Debezium 的所有配置后还是没发现有什么问题配置改了后重新运行结果还是一样。 后面我们怀疑可能和 gtid 有关我们发现 “Insert into xxx values (xxx) ” 会产生一个 binlog 事件因为一个事务会产生一个 binlog 事件但 “Insert into xxx values (xxx)xxx)xxx...” 会产生多个事件但这些事件的 gtid 还是同一个事件里的 query 属性还是同一个事件的 query 属性即原始 sql 这就破案了我们一直消费每个事件的query但可能多个事件里的 query 属性是一样的因为它们的 gtid 属性相同它们属于同一个全局事务。后面我们使用 gtid 过滤相同属性就解决了数据重复问题。至于为什么一个批量插入会产生一个多个事件并且多个事件的 gtid 是同一个我们猜测 MySQL  的 binlog 就是这样写日志的修改一行数据就产生一个事件要是批量修改就产生多个事件但这些批量事件同属于一个全局事务。 怎么过滤重复 gtid 问题因为 gtid 是递增的相同的 gtid 都会一起出现所以可以使用自动老元素的 Map或是设置键过期的 redis或是 带有 gtid 属性的数据库表并设置它是唯一索引或是插入数据之前先检查数据库里是否有本事件的gtid有就跳过没有就插入并把这个过程加锁保证原子性。 核心代码 // 启动 DebeziumEngineChangeEventString, String engine DebeziumEngine.create(Json.class).using(config) .notifying(DataSync::handleChangeEvent).build();ExecutorService executor Executors.newSingleThreadExecutor();executor.execute(engine); private static void handleChangeEvent(ChangeEventString, String event) {JSONObject valueJson JSON.parseObject(event.value());if (valueJson ! null) {JSONObject payload valueJson.getJSONObject(payload);JSONObject source payload.getJSONObject(after);// 原始sqlString query source.getString(data_definition);// 对 sql 字符串进行美化query query.replaceAll([\\n\\r\\t\\s], );String database source.getString(database);String table source.getString(table_name);String gtid source.getString(gtid);synchronized (lock) {// 查询数据库该 gtid 的数量long cnt queryGtid(gtid);if (cnt 0) {// 如果数据库不存在该 sql 就插入save(query, database, table, gtid);} else {System.out.println(gtid 有重复);}} }}
http://www.hkea.cn/news/14424549/

相关文章:

  • python做网站前端装饰公司网站模板
  • 常州网站搭建找哪家wordpress存放的目录在
  • 用jsp做网站默认显示this is my jsp page网站建设及网站推广
  • 用个人的信息备案网站百度大数据搜索引擎
  • 昆明网站优化建设哈尔滨专业网站建设定制
  • 网站怎么做盈利门户网站建设工作室
  • 域名备案期间 网站访问张家界市建设工程造价管理站网站
  • 海南房地产网站企业信息管理系统情况的证明材料
  • 网站的标志可以修改吗和林格尔网站制作
  • 做中东服装有什么网站制作网页总结
  • 网站维护一般需要多久时间推广普通话倡议书
  • 网站建设的理念品牌网站建设有哪些内容
  • 护肤品网站建站模板做网站然后推广
  • 做网站ps图片都是多大设计制作图片
  • 山东做网站的公司有哪些辞职做网站
  • jsp做的求职招聘网站百度云用ps制作网站首页
  • 校园门户网站解决方案雄安专业网站建设方案
  • 一键自助建站昆明建设局网站
  • 网上课程网站商务型企业网站建设
  • 关于网站备案前置审批的相关说明 吉林电商平台制作公司
  • 河北城乡建设厅网站显示不全关键词网站排名顾问
  • 东营建设信息网网站网页设计培训班哪里好
  • 如何做网站超链接团队拓展口号
  • 深圳网站建设联华数字营销成功案例
  • 网站加网页用户登录网站开发
  • 国内简洁网站设计做外贸 网站没有邮箱怎么找
  • 旅游网站设计思路南京哪个网站做物业贷
  • 承德住房和城乡建设局网站关闭了wordpress 移动端页码
  • 自适应网站模板公司wordpress带用户中心主题
  • 三部曲网站建设注册公司需要哪些资料