Los datos de Logstash se escriben en ES en orden

Escena aplicable

La empresa necesita ejecutar múltiples comandos que operan ES, como insertar y luego actualizar, eliminar y luego insertar, etc., y el intervalo de ejecución de múltiples comandos es muy corto. Dado que Logstash envía eventos en lotes, Elasticsearch es procesado por un grupo de subprocesos asíncronos y la naturaleza transaccional de los datos no se puede garantizar en el uso normal.

Mecanismo de bloqueo optimista de Elasticsearch

Elasticsearch tiene control de versión para cada dato almacenado, y cada adición, eliminación o modificación de un registro aumentará el número de versión del registro en 1. Si durante una determinada operación, verifique primero el número de versión, si el número de versión actual no es el número de versión esperado, la operación se cancelará.

Después de eliminar un registro, la información de la versión del registro se guardará durante 1 minuto de forma predeterminada.

Ejemplo de configuración de Logstash

Agregue el campo dataVersion a dos solicitudes de operación con intervalos muy cercanos. Este campo puede ser una marca de tiempo y los valores de campo en las dos operaciones deben ser los mismos

input {
  kafka {
    bootstrap_servers => "192.168.x.x:9092,192.168.x.x:9092,192.168.x.x:9092"
    topics => "synclogs"
    group_id => "logstash-sync"
    consumer_threads => "1"
    max_partition_fetch_bytes=> "5242880"
    codec => "json"
  }
}

output {
  if [dataVersion] {
    if [action] and [action] == "delete" {
      elasticsearch {
        hosts => ["192.168.x.x:9200","192.168.x.x:9200"]
        index => "sync_test"
        document_type => "test"
        action => "delete"
        codec => "json"
        document_id => "%{id}"
        version => "%{dataVersion}"
        version_type => "external"
        retry_on_conflict => 4
      }
    } else {
      elasticsearch {
        hosts => ["192.168.x.x:9200","192.168.x.x:9200"]
        index => "sync_test"
        document_type => "test"
        action => "index"
        codec => "json"
        document_id => "%{id}"
        version => "%{dataVersion}"
        retry_on_conflict => 4
      }
    }
  }else {
    elasticsearch {
      hosts => ["192.168.x.x:9200","192.168.x.x:9200"]
      index => "sync_test"
      document_type => "test"
      action => "index"
      codec => "json"
      document_id => "%{id}"
    }
  }
}

Supongo que te gusta

Origin blog.csdn.net/yml_try/article/details/108648546
Recomendado
Clasificación