数据同步canal 疑点——内存

       canal 内存实现的方式是环形数组,这个是非常高效的,可以减少内存分配,在堆栈中分配内存挺耗时间的。何况,如果不使用环形数组的话的,消息有点折扣,很多开源的项目有实现了类似的环形数组。
       在公司的某一段时间,在日常批量更改时间,发现 canal 挂掉了,当初得到的原因是:内存消耗完毕,被 Linux 干掉了 canal 进程了。可以在 /var/logs 目录下,找找相应的文件就知道了。
       canal 内存的分配模型如下:
       这里写图片描述

       在使用 canal 的时候,记得 把 canal.instance.memory.buffer.size 属性的值设置小点。这个是前提哦!!!不然,海量数据过来的话,就有问题了。canal 是吃内存的。
       canal 是吃内存的,万一海量数据涌过来的话,canal 是不是挂掉了?很大情况下不会的!且看一下分析。
       这里写图片描述
       – 这个是我自己写的分析注释。哈哈哈!!
       我们可以点击 eventStore.tryPut(events) 这个进去看看。点击进去的时候,写着 如下箭头指示的类哦!
       这里写图片描述
       在看如下的分析:
       这里写图片描述
      
       经过上面的,我们知道,canal 在 没有足够的内存了,就会一直等待,知道有剩余的空位才 put 数据过来的。这个 我们的代码表示形式!在 发送 DUMP 协议给 MySQL 后,MySQL 会不断把 binlog 日志流推送给 canal ,如果 canal 这边 就会一直等待,知道有空间了,才 put 数据进去。但数据会一直停留在 TCP 缓存区的。这个属于内核的一部分,协议栈嘛。如果 canal 内存中的数据还没有消费的话。部署 canal 的进去会最终全部 kill 掉所有程序的。但不要害怕!只要我们 ack 了。同步数据的节点位置才能写到 zk 中。默认是 1 分钟刷一次 zk 的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现MySQL数据实时同步到Elasticsearch可以使用Canal工具。 Canal是阿里巴巴开源的一套基于数据库增量日志解析的数据同步和逆向解析工具,可以实时获取数据库的变更日志,然后将这些变更日志解析成数据并发送到指定的目的地。在实现MySQL数据实时同步到Elasticsearch中,可以使用Canal来实现以下步骤: 1. 安装配置Canal:首先,需要下载并安装Canal,并配置Canal的参数,如MySQL的地址、端口、用户名、密码等。 2. 创建Canal实例:根据实际需求,可以创建一个或多个Canal实例来监控和同步MySQL的变更日志。 3. 配置Elasticsearch目的地:配置Canal将变更日志发送到Elasticsearch作为同步的目的地。 4. 启动Canal实例:通过命令行或脚本启动Canal实例,让Canal开始监控MySQL的变更日志。 5. 解析并同步数据:Canal实时监控MySQL的变更日志,一旦有变更,就解析并发送到Elasticsearch。在Elasticsearch中,可以根据业务需求进行相应的处理,比如数据转换、数据筛选、数据拆分等,并将处理后的数据存储到Elasticsearch中。 通过以上步骤,就可以实现MySQL数据的实时同步到Elasticsearch中。Canal工具可以很好地解析MySQL的增量日志并将数据发送到Elasticsearch,保证数据的实时性和一致性。同时,Canal还支持分布式部署和高可用性,可以满足大规模数据同步的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值