如何实现 Logstash/Elasticsearch 与MySQL自动同步 更新操作 和 删除操作 ?
技术背景
我们现在的同步, 是依靠 Logstash
的 input-jdbc-plugin
插件来实现的自动增量更新,这个的方案貌似只能 增量
添加数据而不能修改或者删除数据. 其实不然, 我们根据input-jdbc-plugin
这个插件的一些配置, 是可以实现我们要的效果的.
方案原理:
用一个更新时间
的字段来作为每次Logstash
增量更新的tracking column
, 这样Logstash
每次增量更新就会根据上一次的最后的更新时间
来作为标记
.
索引的document id
必须是 主键
, 这样在每次增量更新
的时候, 才不会只是增加数据, 之前ID
相同的数据就会被覆盖, 从而达到update
的效果.删除
是建立在上面更新
的原理之上, 就是再加一个删除标记
的字段, 也就是数据只能软删除
, 不能直接删除
.
以上就是这个方案的实现原理, 缺点就是要多加一个更新时间
的字段, 并且数据不能直接删除, 只能软删除, 所以这个方案有一定的局限性, 但是对于大部分操作, 应该都是可以妥协的.
实施细节:
第一步: 数据表设计
你的表, 必须要有一个update_time
或同样意思的字段, 表明这条数据修改的时间
如果有删除操作的话, 是不可以直接删除数据的, 必须是软删除,就是还得有一个 delete_time
或者is_delete
或相同意思的字段
第二步: 配置Logstash
input 和output
input { jdbc { ... statement => "SELECT * FROM article WHERE update_time > :sql_last_value ORDER BY id ASC" tracking_column => 'update_time' ... } } output { elasticsearch { ... document_id => "%{id}" ... } }
相关推荐
AFei00 2020-07-26
goodstudy 2020-08-19
weikaixxxxxx 2020-08-01
liulin0 2020-07-26
娜娜 2020-07-20
偏头痛杨 2020-07-18
winxcoder 2020-07-18
superviser000 2020-06-28
liulin0 2020-06-25
liulin0 2020-06-16
wangfengqingyang 2020-06-11
cullinans 2020-06-09
winxcoder 2020-06-08
citic 2020-06-06
goodstudy 2020-06-05
superviser000 2020-05-30
yuzhongdelei0 2020-05-15
wzhwangzhuohui 2020-05-12
李玉志 2020-05-11