https://help.aliyun.com/document_detail/69055.html?spm=a2c4g.11186623.6.576.3a3d266aXSMKBB 阿里云 logstash-input-jdbc 插件是实现阿里云 Elasticsearch 与 RDS 关系型数据库数据同步的关键,本质是通过 Logstash JDBC 输入插件,运行一个循环来定期对 RDS 进行轮询,从而找到在此次循环上次迭代后插入或更改的记录,如让其正确运行,必须满足如下条件:
1、 在将 RDS 中的文档写入 Elasticsearch 时,Elasticsearch 中的 "_id" 字段必须设置为 RDS 中的 "id" 字段。这可在 RDS 记录与 Elasticsearch 文档之间建立一个直接映射关系,如果在 RDS 中更新了某条记录,那么将会在 Elasticsearch 中覆盖整条相关记录。
注意,在 Elasticsearch 中覆盖文档的效率与更新操作的效率一样高,因为从内部原理上来讲,更新便包括删除旧文档以及随后对全新文档进行索引。
2、在 RDS 中插入或者更新数据时,该记录必须有一个包含更新或插入时间的字段。通过此字段,便可允许 Logstash 仅请求获得在轮询循环的上次迭代后编辑或插入的文档,Logstash 每次对 RDS 进行轮询时,都会保存其从 RDS 所读取最后一条记录的更新或插入时间。在下一次迭代时,Logstash 便知道其仅需请求获得符合下列条件的记录:更新或插入时间晚于在轮询循环中的上一次迭代中所收到的最后一条记录。
注意,Logstash-input-jdbc 插件无法实现“sql delete”操作,需要手动在 Elasticsearch 侧做删除。如果满足上述条件,我们便可配置 Logstash,以定期请求从 RDS 获得新增或已编辑的全部记录,然后将它们写入 Elasticsearch 中。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。