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版本;

    1. docker下搭建ES集群,超简单,亲测完美可用

https://blog.csdn.net/qq_43308337/article/details/90237696

或者这个:

  • 2.docker简易搭建ElasticSearch集群

https://blog.csdn.net/belonghuang157405/article/details/83301937

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐