您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Elasticsearch的快速使用——Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch的数据

bubuko 2022/1/25 20:09:45 mysql 字数 8344 阅读 1233 来源 http://www.bubuko.com/infolist-5-1.html

如果不是Spring Boot项目,那么根据Elasticsearch的版本选择对应版本的依赖即可。 例:Elasticsearch的版本为5.4.0,那么 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>tr ...

如果不是Spring Boot项目,那么根据Elasticsearch的版本选择对应版本的依赖即可。

例:Elasticsearch的版本为5.4.0,那么

    <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.4.0</version>
        </dependency>

下方开始介绍Spring Boot整合Elasticsearch, 并且如何同步mysql和Elasticsearch的数据。

我的版本(经过我自己的使用,确认没有问题):

  1.电脑:windows10操作系统

  2.Elasticsearch版本:7.0.0

  3.ik分词器版本:7.0.0(必须和Elasticsearch版本一致)

  4.postman:  无版本(这个用来查看indexs的数据)当然,相类似的工具还有curl,  kibana, 当时这两个需要要版本和Elasticsearch一致,相比较麻烦(外国网站,我就普通下载花了1整天才下完,所以不想下载这两个可以选择不下载,对我们写代码没有影响)

  5.elasticsearch-head-master:  无版本的(这个下载源代码后需要编译,启动方式:

    需要先启动Elasticsearch(浏览器输入localhost:9200,出现关于elasticsearch的信息json文本说明成功),再:

    方式1.cmd切换到文件夹后npm run start, 然后浏览器网址处输入localhost:9100

    方式2.或者选择直接双击文件夹中的index.html文件)

  6.Spring Boot版本:2.2.4RELEASE

  若是关于Elasticsearch的一些基础安装和使用不会可以百度,下面正式开始了

 

开始使用:整合方式我了解到的有如下几种

  1.使用elasticsearch官方的logstash进行mysql和Elasticsearch的数据同步, 下面我介绍的就是这种。限制:需要和Elasticsearch版本相同版本的Logstash,  Elasticsearch的官网可以下载Logstash(下载速度也很慢,我下载的是7.0.0,超过100M,  花了一上午时间)

  2.使用Bboss这个开源项目,它的官方说法是兼容所有版本的Elasticsearch. 因此不会出现版本问题,可以点击 开始学习 前往,说明很详细

   3. 使用elasticsearch-river-jdbc,  不推荐。和它类似的还有2种,但是不推荐,原因:支持的Elasticsearch过低。这个似乎是最高支持6.0左右的版本,另外两个的其中一个只支持Elasticsearch2.0版本左右,所以我也记不得了就不介绍了,有兴趣的可以去看看。

 

Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch数据:

1.Spring Boot使用Elasticsearch:

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>   
<!--版本是和Spring Boot的parent同步的,默认2.2.4RELEASE,里面的spring-data-lasticsearch版本为3.2.4.RELEASE,
再里面的elasticsearch-rest-high-level-client和transport版本为6.8.6-->

 具体的整合讲解可以参考这篇文章

2.下载Logstash,我选择的是zip压缩包下载后解压,不能放中文路径(像这种开发用的东西最好全放英文路径下,我上次还碰到过安装路径有符号也会报错的)。

1.判断是否安装成功:命令忘记了,这个不重要,我们直接下一步。

2.进入Logstash的bin目录下,在里面自己创建jdbc.conf文件,文件名随意,后面cmd命令跟着变就行了:注意:我有几行配置打了#是因为这几行有问题,我运行后排错注释了:

input {
  stdin {}
  jdbc {
  #mysql的jdbc连接工具jar包
    jdbc_driver_library => "D:\softwareRepository\logstash-7.0.0\config\test-config\mysql-connector-java-5.1.46.jar"
    #jdbc驱动类全类名
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #jdbc连接url
    jdbc_connection_string => "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
    #数据库用户名
    jdbc_user => "root"
    #数据库密码
    jdbc_password => "root"
    #数据同步时间及那个(都是*则每一分钟同步一次)
    schedule => "* * * * *"
    #jdbc分页查询开启
    #jdbc_paging_enabled => "true"
    #查询每页显示数据条数
    #jdbc_page_size => "50000"
    #sql文件路径(就是需要同步的数据)
    statement_filepath => "D:\softwareRepository\logstash-7.0.0\config\test-config\zyl.sql"
    #上次更新位置标记文件路径
    last_run_metadata_path => "D:\softwareRepository\logstash-7.0.0\config\test-config\jobLastInfo.txt"
    #每次启动是否清除上一项配置文件中数据
    clean_run => "false"
    #开启所有字段名转成小写
    lowercase_column_names => "true"
    #解决中文乱码问题
    codec => plain { charset => "UTF-8"}
    #是否记录上次运行的记录
    record_last_run => "true"
    #是否使用其他字段判断进行数据库同步
    use_column_value => "true"
    #数据库中的增量指标字段名
    tracking_column_type => "timestamp"
    tracking_column => "update_time"
  }
}

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}

output {
    elasticsearch {
        index => "zyltest"
        document_type => "%{type}"
        #es服务器
        hosts => "localhost:9200"
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }
}

上面的配置我是参考了三篇文章才明白什么意思:……他们没写全,特别是.sql文件是个问题,我现在开始说明下:

文件复制后,我们到config目录下创建一个文件夹test-config(自己创建的东西文件名都是随意的,配合着配置文件改就是了),里面放入一个jobLastInfo.txt, zyl.sql,以及一个mysql-connector-java的jar包。其中.txt文件我不知道什么作用,创建好就行了,然后最关键的是.sql文件,里面是查询语句,例如

select * from test1;

我看的2篇文章都没有提到sql文件写什么语句……我只测试了一个查询语句,快晚上11点了,明天这篇文章可能不会再改了,你们也可以自己试试执行查询两个表。再然后是jar包,我启动的logstash报了关于jar包的error,问我确定set了jar的位置吗(好像是这个问题)?但是实际上没有问题,照样运行的。

我把我的数据库拿出来: 先执行创建表和insert语句就可以了,增删改到第3步出现图片所示后再进行(然后再在每分钟的00秒看看效果,会发现虽然所有修改的内容都被Logstash查出来了,但是只有增改这两项更新了索引,删除没有效果,并且修改数据即使不对update_time进行修改也会更新索引)

drop table test1;
create table test1(
  id int primary key auto_increment,
  name varchar(10) default "我是笨蛋5号我!…",
  update_time date NOT NULL DEFAULT "2017-3-3 3:3:3"
);
insert into test1() value ();
update test1 set name="bb" where id in (1,2);
update test1 set name="cc",update_time=now() where id in(3,4);
update test1 set name="ddd" where id in (5,6);
delete from test1 where id in (7,8);

需要注意一点:tracking_column_type => "timestamp"这个值必须是timestamp,不然会报错的提醒你改回来的,但是数据库不需要一定是tiemstamp的时间类型,我试了datetime,date,time,timestamp这四种时间类型我都试了,结果都一样成功了。(因为无论是哪种类型,虽然差数据库显示的格式是不一样,但Logstash差数据显示的类型都是下图的那种时间格式)。

3.启动elasticsearch后,可以选择启动postman和elasticsearch-head-master以观察情况。开始启动logstash:  cmd切换到bin目录下执行:logstash -f jdbc.conf。执行命令后效果如图:技术分享图片

4.如果你的配置和我一模一样,那么会在localhost:9100看到有个zyltest的index生成,在postman中通过GET输入http://localhost:9200/zyltest/_search可以查看到生成了索引(额,忘了叫什么,就这样吧)。

5.注意:logstash只可以同步增和改,因此删除是需要自己在代码中同步的,通过deleteXX方法(忘了是什么方法了,不想找了)。也就是说:在开启Elasticsearch和Logstash的服务下,每分钟它会自动的进行增和改的同步,然后代码中自己手动实现删除数据的同步。

就到此结束了

 

额,写到一半切换了下wifi, 内容没有保存草稿,自动刷新界面就没了,累……

 

Elasticsearch的快速使用——Spring Boot使用Elastcisearch, 并且使用Logstash同步mysql和Elasticsearch的数据

原文:https://www.cnblogs.com/woyujiezhen/p/12374402.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶