Pergunta

Estou usando logstash e elasticsearch para construir um sistema de log.RabbitMQ usado para enfileirar mensagens de log entre dois logstashs.

O caminho da mensagem é como abaixo:

source log -> logstash -> rabbitMQ -> logstash(parse) -> elasticsearch

Mas eu descobri que, não importa quanta máquina eu adicionei ao RabbitMQ, ele usa apenas um recurso de máquina para processar mensagens.

Encontrei um artigo que diz que o cluster apenas aumenta a confiabilidade e a redundância para evitar a perda de mensagens.

Mas o que eu quero é aumentar a taxa de transferência (entrada e saída) de todo o cluster RabbitMQ adicionando mais máquinas.

Como configuro meu cluster RabbitMQ para aumentar sua produtividade?

Quaisquer comentários são apreciados.

--

PS.preciso adicionar mais informações aqui.

No limite do meu sistema, o teste é, posso receber mensagens de 7.000/s e gerar mensagens de 1.700/s em um sistema de cluster de 4 máquinas, mas não habilitar HA e apenas vincular 1 troca a 1 fila e a fila apenas vincular a 1 nó.acho que 1 fila vinculada a 1 nó é o gargalo de transferência.E é difícil alterar a chave de roteamento agora, então temos apenas uma chave de roteamento e queremos distribuir mensagens para diferentes nós para aumentar o rendimento de todo o sistema.

abaixo está minha configuração do indexador logstash

rabbitmq {
codec       => "json"
auto_delete => false
durable     => true
exchange    => "logstash-exchange"
key         => "logstash-routingKey"
queue       => "logstash-queue"
host        => "VIP-of-rabbitMQ"
user        => "guest"
password    => "guest"

passive     => false
exclusive   => false


threads     => 4
prefetch_count => 512   }
Foi útil?

Solução

Você precisa adicionar mais filas.Eu acho que você está usando apenas uma fila.Em outras palavras, você está vinculado a um processo erlang.O que você quer é usar várias filas:

Aqui está um exemplo rápido e sujo de como adicionar alguma lógica ao logstash para enviar mensagens para filas diferentes:

filter {

  # check if path contains source subfolder
  if "foo" in [path] {
    mutate { add_field => [ "source", "foo"] }
  }
  else if "bar" in [path] {
    mutate { add_field => [ "source", "bar"] }
  }
  else {
    mutate { add_field => [ "source", "unknown"] }
  }
}

Então na sua saída:

  rabbitmq {
    debug => true
    durable => true
    exchange_type => "direct"
    host => "your_rabbit_ip"
    key => "%{source}"
    exchange => "my_exchange"
    persistent => true
    port => 5672
    user => "logstash"
    password => "xxxxxxxxxx"
    workers => 12
  }

Atualizada:

Dê uma olhada nos repositórios que esse cara tem:https://github.com/simonmacmullen

Acho que você vai se interessar por este:https://github.com/simonmacmullen/random-exchange

This exchange type is for load-balancing among consumers.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top