另外一个推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程
在一次上线之后,发现日志大量缺失,缺失率达90%,确认是由上线引起的,但因为当时没立即发现这个问题,所以没有通过回滚解决
上线的内容改动了推荐请求日志,数据格式未变,增加了单条日志的大小,估计有10~20%的增长
推荐日志的整个收集流程如下:
Flume: 未知
Kafka: 2.4.0
ELK: 6.8
在本地启动Logstash过程中发现ES的写入量增加了
于是怀疑是Logstash消费能力不足,于是让DB同学调整了参数Kafka input插件配置consumer_thread,修改后启动报错,于是又改回来
改回来重启之后的Logstash开始消费Kafka的数据,且消费速度很快,因为之前已经堆积了很多消息,但在半个小时之后,消费速度再次降到0附近
后来DB同学在Logstash中看到了报错
Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records.
看起来报错和下面文章中一致,于是按照使用Kafka时一定要注意防止消费速度过慢触发rebalance而导致的重复消费做了下述修改,均无效果
DB同学怀疑是日志格式或者是日志过大的问题,但也没有具体的bad case,后来提出,这个集群的单条日志是比之前排查的集群小很多的,但之前排查的集群数据已无缺失(整体数据量现在排查的集群更大一些)
对比之后发现两个集群ELK版本不同,目前排查的集群版本为6.8,而之前的是7.17,所以想尝试用7.17版本的Logstash写入6.8版本的ES
问题得以解决,虽然解决了问题,但由于Logstash版本跨度太大且Kafka Input插件也跨很多版本,所以无法得知原因
最终通过升级Logstash的版本,从6.8改为7.17,解决了消费速度过慢的问题