最近线上遇到一个问题:在消费kafka消息的时候如果长时间(大概半天到一天的时间)队列里没有消息就可能再也消费不了。针对这个问题我们反复调试多次。线下模拟,调整代码,但貌似还是没有找到原因。但是只要重启消费进程就又可以继续消费。

解决方案

由于线上业务非常依赖kafka的消费,但一时半会也没有找到原因,所以最后只能想一个临时的替换方案:

既然是需要重启,由于目前还没有上分布式调度中心所以需要crontab来配合调度:每隔一分钟会调用一个shell脚本,该脚本会判断当前进程是否存在,如果存在则什么都不作,不存在则启动消费进程。

具体实现

消费程序:

在线代码

需要配合以下这个shell脚本运行:

在线代码

再配合crontab的调度:

即可。

总结

虽说处理起来很简单,但依然是治标不治本,依赖的东西比较多(shell脚本,调度)。
所以也问问各位有没有什么思路:

生产配置:

  • 三台kafka、ZK组成的集群。

其中也有其他团队的消费程序在正常运行,应该和kafka的配置没有关系。

原文:大专栏  SSM(十六) 曲线救国-Kafka消费异常


01-18 03:40
查看更多