项目场景:

logstash某个topic最近消费总是延迟


问题描述:

logstash某个topic消费总是延迟,数据量15k每秒,调整了topic partition和消费进程数之后 改善也不大

logstash xiaofeikafka报错 logstash消费kafka数据慢_kafka


原因分析:


逐项排查:

  1. 排查kafka机器的磁盘和网卡是否瓶颈
    磁盘
    iostat -d -k 1 10 #查看TPS和吞吐量信息
    iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
    iostat -c 1 10 #查看cpu状态


    根据磁盘io util和await判断磁盘应该没有瓶颈
    网卡:
    查看网卡信息

    万兆网卡,无瓶颈
  2. logstash配置
    消费配置设置
    pipeline.workers: 40 跟宿主机cpu核数一样
    pipeline.batch.size: 1024 单条数据大,尝试过调整更大,调整会频繁出现单次消费超时,导致kafka offset提交失败
  3. 消费者所在机器的cpu、内存和io情况

    内存无压力,cpu id空余,load负载也不高 消费者所在机器资源无压力
  4. es:
    es集群机器 磁盘 util和await正常
    队列recject数正常
    初步观察es问题不大

解决方案:



  1. logstash消费者配置调整
    pipeline.batch.delay: 10 让logstash消费提交更加频繁 吃cpu
    配置调整后消费速度少量提升
  2. 调整topic partition 由80到160 增加消费能力

    发现调整之后,作用不明显,是因为延迟的数据都在老的partition里,这里没做重分配,所以消费速度没提升,明早再观察下
  3. es 索引分片数提升 因为这个topic消费出来后会根据字段生成很多个索引,这里把所有的索引分片数都增加了,索引是每天生成的,数据量也是每天早上增多,调整完 明早看看情况
  4. 其他es侧的参数优化等确认消费情况之后在做调整

第二天
消费速度提升,消息基本无延迟
主要调整:
1、logstash消费者配置新增 pipeline.batch.delay: 10
2、调整topic partition 由80到160 增加消费能力
3、es 索引分片数提升