使用 Logstash JDBC 插件同步 MongoDB 和 Elasticsearch 时避免重复

Avoid duplicates while syncing MongoDB and Elasticsearch with Logstash JDBC plugin

我正在尝试使用 Logstash 使 MongoDB 集合与 Elasticsearch 索引保持同步。

为此,我正在使用带有 DBSchema JDBC 驱动程序库的 Logstash JDBC 插件。

这是我用于 logstash 的配置文件:-

input {
  jdbc{
    jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
    jdbc_driver_library => "/path/to/mongojdbc1.8.jar"
    jdbc_user => ""
    jdbc_password => ""
    jdbc_connection_string => "jdbc:mongodb://127.0.0.1:27017/db1"
    statement => "db.collection1.find({ }, { '_id': false })"
  }
}

output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "testing"
    user => ""
    password => ""
  }
}

这没问题,但是当我 运行 logstash 多次时,记录被多次插入到 Elasticsearch 中。我不想重写记录。此外,如果我再次修改文档和 运行 logstash,它应该会更改 Elasticsearch 中的相同记录,而无需创建新文档。我该如何实现这一目标?

您可以通过 ID 同步您的文档。 这是 link 到 Logstash Elasticsearch output plugin,部分包含您需要的选项。

因此关于文档,您必须将 doc_as_upsert 设置为 true,并在输出中传递 document_id。

output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "testing"
    user => ""
    password => "",
    doc_as_upsert => true,
    document_id => "%{id}"
  }
}

请注意 document_id => "%{id}" - 这里的 id 是您的文档 ID 字段名称。