Logstash + Elasticsearch吞吐量

时间:2015-07-30 13:21:12

标签: elasticsearch logstash kibana apache-kafka

我们尝试使用2台相同的机器处理5K msgs / sec,但似乎我们最大限度地使用了logstash或elasticsearch。

每个人都有: 64Gb RAM,≈3Ghz至强CPU 已安装Logstash 1.5 Elasticsearch 1.7.8使用第二台机器以集群模式安装。

Logstash配置为从16节点kafka群集接收消息并将其发送到Elasticsearch。

数据为CSV,包含22个字段。这是正常的吞吐量吗?

这是配置:

input{
    kafka {
        type => "api"
        zk_connect => "node1:2181,node2:2181,node3:2181"
        codec => "plain"
        topic_id => "api_events"
        consumer_threads => 8
        queue_size => 10000
        rebalance_backoff_ms => 10000
        rebalance_max_retries => 10
    }
}
filters{
    csv {
        separator => "::"
        columns => [
            "hostname",
            "status",
            "body_bytes_sent",
            "request_time",
            "http_x_forwarded_for",
            "uri",
            "arg_key",
            "http_user_agent",
            "http_deviceid",
            "http_country_code",
            "http_language_code",
            "http_platform",
            "http_versioncode",
            "request_method",
            "http_x_forwarded_proto",
            "upstream_cache_status",
            "upstream_response_time",
            "upstream_header_time",
            "upstream_status",
            "bytes_sent",
            "time_local",
            "upstream_addr"
        ]
        remove_field => [
            "message"
        ]
    }
    mutate {
        convert => {
            "body_bytes_sent" => "integer"
            "request_time" => "float"
            "upstream_response_time" => "float"
            "upstream_header_time" => "float"
            "bytes_sent" => "integer"
            }
        }
    }
}
output{
    elasticsearch {
        cluster => "MyCluster"
        protocol => "node"
        index => "api-%{+YYYY.MM.dd}"
        host => "elasticnode1"
        flush_size => 50000
        workers => 4
    }
}

1 个答案:

答案 0 :(得分:0)

我很惊讶这个问题没有得到回答。已经用过时的logstash版本询问了该问题。由于Logstash进行了多项改进和重构,因此某些参数将有所不同。

每秒至少发送5k条消息听起来很难实现,但是当然,这取决于许多未说明的事情。例如,每条消息哇大吗?它从多少个分区监听?输入中的每个分区是实际接收高吞吐量的消息还是仅聚合吞吐量高?

我建议从一个小批量(例如500个)开始,然后增加1个工人,然后逐渐增加批量直到您看不到任何改善,然后再增加工人以利用机器上的型芯。您可能无法使每个工作人员的每个请求的每个批次都装满。下面的文章显示了如何分析和评估实际到达数据对飞行中请求的影响:

https://www.elastic.co/guide/en/logstash/current/tuning-logstash.html

当然,另一方面是Elasticsearch方面。值得衡量的是,Elasticsearch在处理所有并发请求方面并不落后。有多少个Elasticsearch节点,客户端/数据节点的数量是多少?在进行“大量”索引编制时,在Elasticsearch上也需要注意很多事情:

https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

我希望这对您和其他今天打算这样做的人有所帮助。