索引文档级别差异对比

索引差异对比 #

通过极限网关可以进行索引的文档差异对比,可以对同集群或者跨集群的两个不同的索引进行 diff 比较,对于使用应用双写、CCR 或者其他数据复制方案的场景,可以进行定期 diff 比较来确保数据是否真的一致。

功能演示 #

如何配置 #

设置目标集群 #

修改配置文件 gateway.yml,设置两个集群资源 sourcetarget,增加如下配置:

elasticsearch:
  - name: source
    enabled: true
    endpoint: http://localhost:9200
    basic_auth:
      username: test
      password: testtest
  - name: target
    enabled: true
    endpoint: http://localhost:9201
    basic_auth: #used to discovery full cluster nodes, or check elasticsearch's health and versions
      username: test
      password: testtest

配置对比任务 #

增加一个服务管道配置,用来处理两个集群的索引文档拉取和对比,如下:

pipeline:
  - name: index_diff_service
    auto_start: true
    keep_running: true
    processor:
    - dag:
        parallel:
          - dump_hash: #dump es1's doc
              indices: "medcl-test"
              scroll_time: "10m"
              elasticsearch: "source"
              output_queue: "source_docs"
              batch_size: 10000
              slice_size: 5
          - dump_hash: #dump es2's doc
              indices: "medcl-test"
              scroll_time: "10m"
              batch_size: 10000
              slice_size: 5
              elasticsearch: "target"
              output_queue: "target_docs"
        end:
          - index_diff:
              diff_queue: "diff_result"
              buffer_size: 1
              text_report: true #如果要存 es,这个开关关闭,开启 pipeline 的 diff_result_ingest 任务
              source_queue: 'source_docs'
              target_queue: 'target_docs'

上面的配置中,并行使用了 dump_hash 来拉取集群 sourcemedcl-a 索引和取集群 targetmedcl-b 索引,并以文本结果的方式输出到终端。

输出结果到 Elasticsearch #

如果 diff 结果比较多,可以选择保存到 Elasticsearch 集群,将上面的 index_diff 处理单元的参数 text_report 设置为 false,并增加如下配置:

pipeline:
  - name: diff_result_ingest
    auto_start: true
    keep_running: true
    processor:
      - json_indexing:
          index_name: "diff_result"
          elasticsearch: "source"
          input_queue: "diff_result"
          idle_timeout_in_seconds: 1
          worker_size: 1
          bulk_size_in_mb: 10 #in MB

最后导入 仪表板 到 Kibana 即可看到如下效果: