使用ElasticSearch同步postgreSql数据

时间:2016-03-05 12:08:33

标签: postgresql elasticsearch logstash

最终,我希望为PostgreSql中的数据提供可扩展的搜索解决方案。我的发现指出我使用Logstash将写入事件从Postgres发送到ElasticSearch,但是我还没有找到可用的解决方案。我发现的解决方案涉及使用jdbc-input在一个时间间隔内查询来自Postgres的所有数据,并且不会捕获删除事件。

我认为这是一个常见的用例,所以我希望你们能与我分享你的经验,或者给我一些指导。

3 个答案:

答案 0 :(得分:12)

如果您还需要通知DELETE并删除Elasticsearch中的相应记录,Logstash jdbc输入确实无效。您必须使用围绕binlog的解决方案suggested here

但是,如果您仍想使用Logstash jdbc输入,那么您可以做的只是在PostgreSQL中软删除记录,即创建一个新的BOOLEAN列,以便将您的记录标记为deleted。然后,Elasticsearch中会存在相同的标记,您可以使用term字段上的简单deleted查询将其从搜索中排除。

每当您需要执行一些清理时,您可以删除PostgreSQL和Elasticsearch中标记为deleted的所有记录。

答案 1 :(得分:9)

您还可以查看PGSync

类似于Debezium,但更容易启动和运行。

PGSync是一个变更数据捕获工具,用于将数据从Postgres迁移到Elasticsearch。 它允许您将Postgres保留为事实来源,并公开结构化非规范化 Elasticsearch中的文档。

您只需定义一个JSON模式来描述其中的数据结构 Elasticsearch。

这是一个示例架构:(您也可以有嵌套的对象)

例如

{
    "nodes": [
        {
            "table": "book",
            "columns": [
                "isbn",
                "title",
                "description"
            ]
        }
    ]
}

PGsync即时为您的文档生成查询。 无需编写类似Logstash的查询。它还支持并跟踪删除操作。

它同时运行轮询和事件驱动模型,以捕获迄今为止所做的更改 并通知在某个时间点发生的更改。 自上次守护程序以来,初始同步轮询数据库是否有更改 已运行并随后发生事件通知(基于触发器并由pg-notify处理) 用于更改数据库。

它的开发开销很小。

  • 如上所述创建架构
  • 将pgsync指向您的Postgres数据库和Elasticsearch集群
  • 启动守护程序。

您可以轻松地创建一个包含多个关系作为嵌套对象的文档。 PGSync会为您跟踪所有更改。

有关更多详细信息,请查看github存储库。

您可以从PyPI

点安装软件包

答案 2 :(得分:3)

请查看Debezium。这是一个变更数据捕获(CDC)平台,可让您提取数据

我创建了一个简单的github repository,展示了它的工作原理

enter image description here