ELK增量同步数据【MySql->ES】

一、前置条件

        1.  linux,已经搭建好的logstash+es+kibana【系列版本7.0X】,es 的plugs中安装ik分词器

ES版本:

 Logstash版本:

 (以上部署,都是运维同事搞的,我不会部署,同事给力)

二、编写Logstash.sh 执行文件

1、在Logstash安装目录下【/usr/share/logstash】,新建XX.sh,内容如下:

/usr/share/logstash/bin/logstash --path.data /usr/share/logstash/case-conf -e 'input {jdbc {jdbc_driver_library => "/var/local/logstash/etc/lib/mysql-connector-java-8.0.15.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://IP:端口号/数据库?serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useSSL=false&tinyInt1isBit=false"jdbc_user => "用户名"jdbc_password => "密码"schedule => "* * * * *"use_column_value => truetracking_column => "update_at"tracking_column_type => "numeric"last_run_metadata_path => "/usr/share/logstash/case-last"
statement_filepath => "/usr/share/logstash/case_.sql"}
}output {elasticsearch {hosts => ["es1:9206","es2:9207","es3:9208"]action=>"index"index => "case"document_id => "%{case_id}"template => "/usr/share/logstash/template-case.json"template_name=>"template-case.json"template_overwrite=>true}
}'

2. 在Logstash安装目录下【/usr/share/logstash】,新建case.sql文件:查询字段,根据业务要求书写,不需要全字段查询

SELECT * FROM 表名称 where update_at > :sql_last_value

where条件中的,update_at 是表更新时间,与case.sh 中的 tracking_column 强关联;默认logstash 每分钟执行一次case.sql ,执行后会生成一个case-last文件,里面记录最后一次执行时间;

3.  关于output,配置项,使用了自定义创建索引的模板方式,在表中有数据为前提,执行case.sh 会用到模板创建索引;如果不配置,es会默认给创建mapping,默认的话,分词都是英文分词器; 执行效果如下:sh  case.sh后:

 注意细节: 

output {
  elasticsearch {
    hosts => []
    action=>"index"
    index => "case"   //索引名称
    document_id => "%{case_id}"  //动态数据,数据ID
    template => "/usr/share/logstash/template-case.json"   //模板文件路径
    template_name=>"template-case.json"            //模板名称
    template_overwrite=>true                                 
    }
}

4. 在Logstash安装目录下【/usr/share/logstash】,新建template-case.json,内容如下:

{"template" : "case*","settings" : {"index.refresh_interval" : "5s","number_of_replicas":"1","number_of_shards":"1"},"mappings": {"date_detection": false,"numeric_detection": false,"dynamic_templates": [{"integers": {"match_mapping_type": "long","mapping": {"type": "integer"}}},{"strings": {"match_mapping_type": "string","unmatch": "*_en","mapping": {"type": "text","analyzer":"ik_max_word","search_analyzer": "ik_smart","fields": {"raw": {"type":  "keyword","ignore_above": 100}}}}}]}
}

注意:

1、模板名称和case.sh 中的index 匹配;模板中的名称后必须带个*:  "template" : "case*",

2、模板比较简单,关闭了日期动态检测和数字格式动态检测;不然创建索引的时候格式会乱;尤其是日期;比如数据库中字段是varchar,但是存的是yyyy-MM-dd hh:mm:ss 日期格式的话,es创建索引是date格式的;

    "date_detection": false,
    "numeric_detection": false,

3、string格式的字段,默认给转出text, 并且使用ik分词器;排除了_en结尾的字段,存英文的字段建表的时候注意下,使用默认分词就好;

   "unmatch": "*_en"

三、Kibana验证

1、GET case_/_mapping:

{"case" : {"mappings" : {"dynamic_templates" : [{"integers" : {"match_mapping_type" : "long","mapping" : {"type" : "integer"}}},{"strings" : {"unmatch" : "*_en","match_mapping_type" : "string","mapping" : {"analyzer" : "ik_max_word","fields" : {"raw" : {"ignore_above" : 100,"type" : "keyword"}},"search_analyzer" : "ik_smart","type" : "text"}}}],"date_detection" : false,"numeric_detection" : false,"properties" : {"@timestamp" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"@version" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"apply_education" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},  "apply_major_en" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"apply_school_name" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"apply_school_name_en" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"begin_learn_time_at" : {"type" : "integer"},"case_id" : {"type" : "integer"},     "case_result_time_at" : {"type" : "integer"},"country_name" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"school_id" : {"type" : "integer"},"update_at" : {"type" : "integer"}}}}
}

查看,映射字段是否满足要求;

2.  验证索引分词结果:

GET case/_analyze
{
  "field": "apply_education",
  "text": "马斯特里赫特大学" 
}

分词结果:

{"tokens" : [{"token" : "马斯特里赫特","start_offset" : 0,"end_offset" : 6,"type" : "CN_WORD","position" : 0},{"token" : "马斯","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 1},{"token" : "特里","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 2},{"token" : "赫","start_offset" : 4,"end_offset" : 5,"type" : "CN_CHAR","position" : 3},{"token" : "特大","start_offset" : 5,"end_offset" : 7,"type" : "CN_WORD","position" : 4},{"token" : "大学","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 5}]
}

验证完成;

四、相关资料

1. Elastic:开发者上手指南_elastic.show_Elastic 中国社区官方博客的博客-CSDN博客

2. Mutate filter plugin | Logstash Reference [8.8] | Elastic

五、注意事项

1. 此种方法,只能针对表数值为逻辑删除的情况,若业务是物理删除,则需要同步删除索引中的数据;

2. 所有update 操作,都需要同时修改 update_at 字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7987.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021)

Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021) 摘要 在本文中,我们解决了新类发现(NCD)的问题,即给定一个具有已知类的有标签数据集,在一组未标记的样本中揭示新的类。我们利用ncd的特性构建了一个新的框架&am…

JMeter之事务控制器实践

目录 前言 事务控制器 JMeter控制器添加路径: Generate parent sample 1、不勾选任何选项: 2、勾选【Generate parent sample】 3、Include duration of timer and pre-post processors in generated sample 小结 前言 在JMeter中,事…

Linux下GO IDE安装和配置(附快捷键)

目前,GoLand、VSCode 这些 IDE 都很优秀,但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后,开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE,这里我选…

基于免疫优化算法的物流配送中心选址规划研究(Matlab实现)

目录 1 概述 2 物流配送中心选址规划研究 3 Matlab代码 4 结果 1 概述 影响物流配送中心选址的因素有很多,精确选址优化问题亟待解决。通过充分考虑货物的配送时间,将免疫算法加入其中,介绍了物流配送选址模型的构建以及免疫算法实现的相关步骤,最后利用matlab软件进行分析,提出…

UE5.2 LyraDemo源码阅读笔记(二)

UE5.2 LyraDemo源码阅读笔记(二) 创建了关卡中的体验玩家Actor和7个体验玩法入口之后。 接下来操作关卡中的玩家与玩法入口交互,进入玩法入口,选择进入B_LyraFrontEnd_Experience玩法入口,也就是第3个入口。触发以下请…

web学习1--maven--项目管理工具

写在前面: 这学期搞主攻算法去了,web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

算法的时间复杂度

算法的时间复杂度 什么是时间复杂度 时间复杂度是衡量算法执行时间随输入规模增长而增长的度量标准。它描述了算法运行时间与问题规模之间的关系,用于评估算法的效率和性能。 通常情况下,时间复杂度表示为大O符号(O)&#xff0…

限时等待的互斥量

本文结束一种新的锁&#xff0c;称为 timed_mutex 代码如下&#xff1a; #include<iostream> #include<mutex> #include<thread> #include<string> #include<chrono>using namespace std;timed_mutex tmx;void fun1(int id, const string&a…

C/C++的发展历程和未来趋势

文章目录 C/C的起源C/C的应用C/C开发的工具C/C未来趋势 C/C的起源 C语言 C语言是一种通用的高级编程语言&#xff0c;由美国计算机科学家Dennis Ritchie在20世纪70年代初期开发出来。起初&#xff0c;C语言是作为操作系统UNIX的开发语言而创建的。C语言的设计目标是提供一种功…

基于Springboot+Vue的手机商城(源代码+数据库)081

基于SpringbootVue的手机商城(源代码数据库)081 一、系统介绍 本项目前后端分离&#xff08;该项目还有ssmvue版本&#xff09; 本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 登录、注册、商品搜索、收藏、购物车、订单提交、评论、退款、收货地址管…

【C++】vector模拟实现

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…

比亚迪车载Android开发岗三面经历~

前言 首先&#xff0c;我想说一下我为什么会想去比亚迪这样的车企做车载Android开发。我是一名有5年经验的Android开发工程师&#xff0c;之前一直在互联网软件公司工作&#xff0c;做过移动端App和IoT产品的开发。但我一直对汽车领域很感兴趣&#xff0c;也希望自己的技术能应…