最近压测测试环境的java后台项目,通过高并发压测关键controller接口。
controller中,为了应对高并发情况,会把请求先扔到kafka的topic,然后由kafkalistener.java进行后续处理。
发现,2万条请求,200并发/秒时,java后台有时会出现不消费kafka队列消息的情况。(假设kafka的topic里有了2万条消息,可能java后台消费一半后,就不消费了)
此时后台日志如下(级别是info):
2022-03-24 14:19:45.647 INFO 3799 --- [ntainer#4-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-6, groupId=commonGroupTest] Attempt to heartbeat failed since group is rebalancing
2022-03-24 13:48:26.724 INFO 3799 --- [ntainer#2-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=con sumer-2, groupId=commonGroupTest] (Re-)joining group
2022-03-24 13:48:26.800 INFO 3799 --- [ntainer#2-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=con sumer-2, groupId=commonGroupTest] Successfully joined group with generation 429
可能是kafka队列数据太多、java后台压力太大时,java后台就会退出kafka的group,停止接收kafka;
等一段时间,java后台会尝试重新加入kafka的group;如果重新加入成功,后台就可以恢复正常(5分钟);
不过也可能java后台被压炸后,日志从无法打印,到时不时打印几句,最终还是无法恢复正常,无法继续处理kafka消息。(等了1个多小时还是不行)
此时就需要重启后台项目了…