【问题标题】:How can I reach real-time index updating using ES + Logstash + MySQL when data was updated, added or deleted?如何在数据更新、添加或删除时使用 ES + Logstash + MySQL 实现实时索引更新?
【发布时间】:2018-02-16 03:28:48
【问题描述】:

我有一个带有 ~1 亿行的没有连接的表的 MySQL 数据库。这些项目可以更新或删除,并且新记录也会定期保存到 MySQL DB 中,例如每一分钟。如何在 Elasticsearch 中更新索引

when data is updated/changed/deleted in MySQL DB?

实现数据对我来说是必须的,与 MySQL 保持同步非常重要。可能吗?谢谢。

我也尝试了schedule => "* * * * *" and updated_at > :sql_last_value 的解决方案,但速度很慢。

【问题讨论】:

  • 这个答案可能会有所帮助:stackoverflow.com/questions/34477095/…
  • 对于您提到的大小的表格,将时间框架放在您的“最新”规范周围会很有帮助。例如,你能指定这个吗? ElasticSearch 必须很少落后 MySQL 超过 60 秒,并且永远不会落后超过 300 秒?如果您有这样的规范,您可以实施和测试它。
  • @O.Jones 在“最新”下我的意思是尽可能快,趋向于零。一次可以更新大约 50k 行。我想要理想的实时,但我知道这是不可能的。我希望尽可能将我的数据保存在 Elastic 中。我尝试了updated_at > :sql_last_value 的解决方案,但即使在 MySQL 中通过 updated_at 建立索引,它也很慢。
  • @Val 感谢您的回复,我会检查 Logstash JDBC 输入

标签: mysql elasticsearch indexing logstash


【解决方案1】:

不确定“非常慢”是什么意思,但如果是关于采样频率,那么表达式:schedule => "/2 * * * * *" 例如,将执行您在 .config 文件中的语句变量中定义的查询两秒钟。

【讨论】:

  • 这正是我想要的!
【解决方案2】:

感谢大家的回复,感谢 Aaron Mildenstein 在 Discussion.elastic.co 上帮助我,我找到了解决方案。 See the thread here.

答案:

为了实现这一点,您将需要一个单独的进程来监控 binlog 事务并启动对 Elasticsearch 端的更新。 Elastic 目前不提供执行此操作的任何工具,因此您必须找到有人开源的工具,或者自己编写。

为了解析二进制日志,我使用了这个库:https://github.com/siddontang/go-mysql-elasticsearch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多