elk消费kafka数据延迟过大的问题
elk消费kafka数据延迟过大的问题1.问题现象表述:当前elk作为日志系统消费kafka日志数据有很大的延迟,即elk的消费kafka中日志的速度(200条/s)远远低于maplearning生产日志的速度(平均3000条/s)(吐出的日志topic:log_trialproducetion);导致从kibana中查询最新的es日志数据的时间远远低于当前时间,在实际生产环境或【预上线】...
elk消费kafka数据延迟过大的问题
1.问题现象表述:
当前elk作为日志系统消费kafka日志数据有很大的延迟,即elk的消费kafka中日志的速度(200条/s)远
远低于maplearning生产日志的速度(平均3000条/s)(吐出的日志topic:log_trialproducetion);
导致从kibana中查询最新的es日志数据的时间远远低于当前时间,在实际生产环境或【预上线】环境
中,导致查询不到最新的业务/统计日志;
图1 ELK消费kafka架构流程
logstash消费kafka数据有延迟,见下图2
图2 logstash消费kafka数据有延迟图
3 kibana中检查到logstash的消费速率;(200条/秒)
查看相关kafka中日志的生成速度是,每秒钟3000条
图4 kafka中日志速率
同时,查看elk的业务日志时间为:
2.问题总结
当前实际上有两个问题:
第一:我们使用logstash消费kafka中的数据,虽然设置的是auto_offffset_reset => “latest”,但是似乎消
费者的offffset没有生效;
第二.ml向kafka中吐出日志的速度约为3000条/秒;但是logstash的消费速度却只有约200条/秒;差距
巨大导致巨大的延迟;
3.技术思路与结果
3.1 优化方向1:
logstash配置项优化
logstash.yml的原始配置信息:
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: 172.19.32.68:9200
修改之后的配置如下
vim logstash.yml的配置信息
如图5, logstash消费提高明显;从速度上来说应该是由原来的250条/秒,提升到后来的1000条/s,说
明logstash消费速率提升明显;但是es的存储效率仍然不理想;
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: 172.19.32.68:9200
pipeline.workers: 24
pipeline.output.workers: 24
pipeline.batch.size: 10000
pipeline.batch.delay: 10
图5 kafka生产与消费监控
提示:到目前为止,我们的es仍然是单点的,我们希望的是构建一个es的集群来使用,增加吞吐量;也
可以增加高可用性和横向扩展能力;
关于es集群的docker搭建方式,详见其他文章;
3.2 优化方向2:
logstash输出日志影响
(注意:本次两轮的优化,分别在独立的两个环境,只保持单一变量)
1.logstash消费kafka的配置文件logstash_kafka.conf;其中logstash消费并不停打印出日志。
input {
kafka{
bootstrap_servers =>
["172.19.32.xxx:9292,172.19.32.xxx:9292,172.19.32.xxx:9292"]
client_id => "clientid-trial-ml-fct2"
group_id => "groupid-trial-ml-fct2"
auto_offset_reset => "earliest"
consumer_threads => 6
decorate_events => true
topics => ["log_trialproduction"]
type => "statisticalanalysis"
}
}
filter{
if [type] == "statisticalanalysis"{
csv{
columns=>
["time","level","host","location","module","param0","param1","param2","param3","
param4","param5","param6","param7","param8","param9","param10","param11","param1
2","param13","param14"]
separator=>"@#"
}mutate{
convert => ["param14","float"]
}
}
date{
match=>["time","yyyy-MM-dd HH:mm:ss.SSS 'GMT+8'"]
target=>"@timestamp"
}
}
output {
elasticsearch {
hosts =>
["172.19.32.xxx:9202","172.19.32.yyy:9202","172.19.32.zzz:9202"]
index => "statisticalanalysis_%{+YYYY-MM-dd}"
}
stdout { codec => rubydebug}
}
stdout { codec => rubydebug}
是logstash打印日志的语句
去掉:stdout { codec => rubydebug}之后,效率提升十几倍。
查看logstash消费kafka的监控:
优化方向3:
构建es集群
es集群已经初步搭建完成,后期经过验证之后,年后会迁移到es的集群中,保证可靠新和吞吐量!
=========我是分割线
附件:
搭建es集群
基于docker搭建elasticSearch集群的方式相对简单,注意host的网络模式,我是使用bridge的桥接模式
出现失败的情况。切记!我是用的版本是6.5.1的es和kibana版本;
-
- docker下搭建ES集群,超简单,亲测完美可用
https://blog.csdn.net/qq_43308337/article/details/90237696
或者这个:
- 2.docker简易搭建ElasticSearch集群
https://blog.csdn.net/belonghuang157405/article/details/83301937
更多推荐
所有评论(0)