前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我在做数据同步时候遇到的几个问题

我在做数据同步时候遇到的几个问题

作者头像
名字是乱打的
发布2022-05-13 10:33:58
5010
发布2022-05-13 10:33:58
举报
文章被收录于专栏:软件工程
1.我在同步时候只能进行数据添加和修改,查看,无法把数据库没有的数据删除掉

查看了一下GitHub大牛的解决方法: 同步删除操作改为同步update更新操作实现。

第一步:进行软件删除,而不是物理删除操作。 先不物理删除记录,而是软件删除,即新增一个 flag 列,标识记录是否已经被删除(默认为false,设置为true或者deleted代表已经被删除,业界通用方法),这样,通过已有的同步机制,相同的标记记录该行数据会同步更新到Elasticsearch。

第二步:ES中检索flag标记为true或者deleted的字段信息。 在ES可以执行简单的term查询操作,检索出已经删除的数据信息。

第三步:定时物理删除。 设置定时事件,间隔一段时间物理删除掉mysql和ES中的flag字段标记为true或deleted的记录,即完成物理删除操。

2对于全量更新,不用考虑数据更新的问题,但是数据量大的话需很长时间(我所描述的是每次都从elasticsearch删除数据从零的更新,否则就会有数据重复的问题了)

3 在本地使用java连es9300端口没问题.访问docker容器中es9300端口不行

原因:

logstash5后默认不开启远程端口连接,我们需要修改docker里的elasticsearch.yml,但是docker容器内不能使用vi,我们需要删除原容器创建新容器挂载自己的yml并修改来覆盖自身的yml让其支持远程访问,另外放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。修改/etc/security/limits.conf,追加内容增大连接数 * soft nofile 65536 * hard nofile 65536

这里我的具体修改步骤是:

(1)我们进入容器 docker exec ‐it 容器名/ID /bin/bash 该指令可以让我们进入指定容器的物理位置 (2)此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch,进入config看到了配置文件 elasticsearch.yml (3)我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令,咋办?我们需要以文件挂载的方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置文件的修改 (4)拷贝配置文件到宿主机 首先退出容器,然后执行命令: docker cp tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml 将docker容器内部的elasticsearch.yml拷贝到/usr/share (5)原容器不带挂载的,需要停止和删除原来创建的容器 docker stop tensquare_elasticsearch docker rm tensquare_elasticsearch (6)重新执行创建容器命令 docker run ‐di ‐‐name=tensquare_elasticsearch ‐p 9200:9200 ‐p 9300:9300 ‐v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch .yml elasticsearch:5.6.8 (7)修改/usr/share/elasticsearch.yml将transport.host: 0.0.0.0前的#去掉后保存文件退出。其作用是允许任何ip地址访问elasticsearch.开发测试阶段可以这么做,生产环境下指定具体的IP (8)重启启动 docker restart tensquare_elasticsearch 重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为 elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存 区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。 (9)系统调优 我们一共需要修改两处 修改/etc/security/limits.conf,追加内容 * soft nofile 65536 * hard nofile 65536 nofile是单个进程允许打开的最大文件个数softnofile是软限制hardnofile是硬限制 修改/etc/sysctl.conf,追加内容 vm.max_map_count=655360 限制一个进程可以拥有的VMA(虚拟内存区域)的数量 执行下面命令修改内核参数马上生效 sysctl ‐p (10)重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

4 考虑一个问题,我们在用logstash更新时候还是设置的定时器更新难免有延迟.那么怎么实现实时更新呢??

其实如果一定要实时更新我觉得可以这样,当我们在做数据库修改时候可以在写代码时候也写一个操作到消息队列中,通过消息队列去执行同步语句(比如模拟我们直接写数据到ES)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.我在同步时候只能进行数据添加和修改,查看,无法把数据库没有的数据删除掉
  • 3 在本地使用java连es9300端口没问题.访问docker容器中es9300端口不行
    • 4 考虑一个问题,我们在用logstash更新时候还是设置的定时器更新难免有延迟.那么怎么实现实时更新呢??
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档