实现Oracle12.1.0.1 到Elasticsearch7.4的动态增量更新

本人在前面写的《通过Logstash实现Oracle数据到Elasticsearch的批量导入》一文中介绍的方法适用于在搭建初始环境时,把原始数据一次性导入到Elasticsearch中。但是实际生产过程中,往往是需要实现Oracle到Elasticsearch的实时同步。下面我就来介绍一下借助Logstash7.4实现Oracle12.1.01到Elasticsearch7.4的动态增量更新的方法。

一、实践环境

1、Oracle所在操作系统:Linux redhat enterprise 6.8
2、Oracle版本:12.1.0.1
3、Oracle集群:2个节点的RAC
4、Logstash、elasticsearch所在操作系统:centos 7
5、logstash版本:7.4.2,IP地址:192.168.100.156
6、elasticsearch版本:7.4.2,IP地址:192.168.100.155
7、logstash、elasticsearch为独立部署单机模式。
8、logstash_input_jdbc版本:v4.3.16
9、logstash-output-elasticsearch版本:10.1.0

至于logstash、elasticsearch的搭建,可以参照本人的相关博文。

二、具体实现

1、根据批量导入的方式,修改logstash配置文件。输入组件为logstash-input-jdbc。输出组件为logstash-output-elasticsearch。

input {
	stdin{
	}
	jdbc{
		jdbc_connection_string=> "jdbc:oracle:thin:@192.168.100.53:1521/gis01"
		jdbc_user=> "**"
		jdbc_password=> "**"
		jdbc_driver_library=> ""
		jdbc_driver_class=> "Java::oracle.jdbc.driver.OracleDriver"
		statement=> "select t.id,t.bsm,t.mc,t.jzxttl,t.gshttl,t.ytshttl,sde.st_astext(t.shape) as location from 港口分布 t"
		jdbc_fetch_size=>50
	}
}

output {
  elasticsearch {
    hosts => ["http://192.168.100.155:9200"]
    index => "test_oracle"
    #user => "elastic"
    #password => "changeme"
  }
   stdout{ codec=> rubydebug}
}

2、配置logstash-input-jdbc的预定义参数实现增量更新
sql_last_value参数:是一个预定义参数,这个值用来标记需要检索的行。在查找开始之前,该值被设置为1970年1月1日,星期二。如果use_column_value设置为true时,并且tracking_column设置为sql语句中的某个字段名称后,该值默认为0。当SQL语句开始执行后,该值就会动态更新。
在jdbc{}体中增加以下内容

use_column_value => true
tracking_column => "id"

上面的“id”是sql语句中的字段名称,在Oracle中是数值型。建议tracking_column中使用的字段为关键字段,且随着数据变化该值进行增长的日期型或是数值型字段。
同时修改jdbc{}中的SQL语句为:

statement=> "select t.id,t.bsm,t.mc,t.jzxttl,t.gshttl,t.ytshttl,sde.st_astext(t.shape) as location from 港口分布 t where t.id >  :sql_last_value"

三、配置定时任务

logstash-input-jdbc组件可以实现定时任务,定时任务的配置语法可以参照“rufus-scheduler”。这个语法类似于cron中的定时任务。
在这里插入图片描述
在本例中,在jdbc{}体中增加schedule配置信息,表示logstash每秒发起一次查询:

schedule => "* * * * *"

完整的配置文件如下:

input {
	stdin{
	}
	jdbc{
		jdbc_connection_string=> "jdbc:oracle:thin:@192.168.100.53:1521/gis01"
		jdbc_user=> "**"
		jdbc_password=> "**"
		jdbc_driver_library=> ""
		jdbc_driver_class=> "Java::oracle.jdbc.driver.OracleDriver"
		statement=> "select t.id,t.bsm,t.mc,t.jzxttl,t.gshttl,t.ytshttl,sde.st_astext(t.shape) as location from 港口分布 t where t.id > :sql_last_value"
		use_column_value => true
		tracking_column => "id"
		jdbc_fetch_size=>50
		schedule => "* * * * *"
	}
}

output {
elasticsearch {
hosts => [“http://192.168.100.155:9200”]
index => “test_oracle”
#user => “elastic”
#password => “changeme”
}
stdout{ codec=> rubydebug}
}

启动logstash

至此,动态增量更新Oracle数据到elasticsearch中的配置完成,接下来用配置文件启动Logstash即可。
以配置文件的方式启动logstash。

cd /usr/local/logstash-7.4.2
bin/logstash -f logstash-simple.conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值