logstash输入阶段是多线程的吗?

时间:2017-02-22 12:10:46

标签: logstash

我正在查看logstash pipeline.workers 选项,其中说明

  

-w, - pipeline.workers COUNT

     

设置要运行的管道工人数。此选项设置将并行执行管道的过滤器输出阶段的工作人员数量。如果发现事件正在备份,或者CPU未饱和,请考虑增加此数量以更好地利用机器处理能力。默认值是主机CPU核心的数量。

我想知道logstash输入阶段是否也使用了我机器的所有内核:

input {
  kafka {
    bootstrap_servers=>"kfk1:9092,kfk2:9092"
    topics => ["mytopic"]
    group_id => "mygroup"
    key_deserializer_class => "org.apache.kafka.common.serialization.ByteArrayDeserializer"
    value_deserializer_class => "org.apache.kafka.common.serialization.ByteArrayDeserializer"
    codec => avro {
      schema_uri => "/apps/schema/rocana3.schema"
    }
  }
}

此输入是否> kafka>编解码器> avro还利用我机器的所有核心或者这个单线程阶段?

1 个答案:

答案 0 :(得分:1)

Logstash输入管道传输中有一些怪癖。它可以是多线程的,但需要一些配置。有两种方法可以做到:

  • 输入插件有一个workers参数,但不是很多。
  • 每个input {}块将在其自己的线程上运行。

因此,如果您正在运行缺少worker配置选项的file {}输入插件,则您定义的每个文件都将由一个且仅一个线程提供服务。

编解码器在调用它们的插件的上下文中运行,每次调用通常都是单线程。

我遇到的大多数Logstash部署最终都使用了很多内核,它位于管道的filter {}阶段,而不是输入。这就是为什么Logstash提供了一种配置管道工作者数量的方法。对于一个输入或一组输入,每秒抽取数千个事件,您只需在filter {}output {}管道上加载一个框。