我正在查看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还利用我机器的所有核心或者这个单线程阶段?
答案 0 :(得分:1)
Logstash输入管道传输中有一些怪癖。它可以是多线程的,但需要一些配置。有两种方法可以做到:
workers
参数,但不是很多。input {}
块将在其自己的线程上运行。因此,如果您正在运行缺少worker配置选项的file {}
输入插件,则您定义的每个文件都将由一个且仅一个线程提供服务。
编解码器在调用它们的插件的上下文中运行,每次调用通常都是单线程。
我遇到的大多数Logstash部署最终都使用了很多内核,它位于管道的filter {}
阶段,而不是输入。这就是为什么Logstash提供了一种配置管道工作者数量的方法。对于一个输入或一组输入,每秒抽取数千个事件,您只需在filter {}
到output {}
管道上加载一个框。