【发布时间】:2017-06-26 23:05:40
【问题描述】:
我正在使用 logstash 解析 csv 文件中的数据并将其推送到 elasticsearch。我有一个包含 600k 行的字典,它使用其中一个字段作为键将其映射到一串值。我目前正在使用这样的翻译插件来实现我所需要的
filter {
translate {
dictionary_path => "somepath"
field => "myfield"
override => false
destination => "destinationField"
}
}
我在destinationField 中得到一个逗号分隔的字符串,我使用
filter{
csv {
source => "destinationField"
columns => ["col1","col2","col3"]
separator => ","
}
}
添加这 2 个块的结果使我的处理时间增加了 3 倍。如果过去需要 1 分钟来处理和推送我的所有数据,现在需要 3 分钟才能完成任务。
这是预期的行为(它是一本大字典)吗?或者有什么办法可以进一步优化这段代码?
【问题讨论】:
-
好吧,如果您在管道中包含额外的处理步骤,您只能期望处理时间增加,对吧?
-
真的!但是处理时间增加了 3 倍似乎很多。很想知道是否有更优化的方法来解决这个问题
-
只需一行,您就可以将其提高 10 倍以上。最后,这一切都取决于这些过滤器是如何实现的。我不太担心
csv一个,但您可能想调查translate一个。 -
感谢您的帮助!我正在研究插件实现,看看我是否能更好地理解它。关于我还能如何实现这一点的任何建议?
-
translate{} 应该是一个哈希查找,它应该有最小的开销。您可以通过注释掉 csv{} 并再次运行测试来确定每个过滤器造成的减速有多少。
标签: elasticsearch logstash logstash-file