前言
最近线上遇到一个问题:在消费kafka
消息的时候如果长时间(大概半天到一天的时间
)队列里没有消息就可能再也消费不了。针对这个问题我们反复调试多次。线下模拟,调整代码,但貌似还是没有找到原因。但是只要重启消费进程就又可以继续消费。
解决方案
由于线上业务非常依赖kafka
的消费,但一时半会也没有找到原因,所以最后只能想一个临时的替换方案:
基于重启就可以消费这个特点,我们在每次消费的时候都记下当前的时间点,当这个时间点在十分钟之内都没有更新我们就认为当前队列中没有消息了,就需要重启下消费进程。
既然是需要重启,由于目前还没有上分布式调度中心
所以需要crontab
来配合调度:每隔一分钟会调用一个shell脚本
,该脚本会判断当前进程是否存在,如果存在则什么都不作,不存在则启动消费进程。
具体实现
消费程序:
需要配合以下这个shell脚本运行
:
|
|
再配合crontab
的调度:
即可。
总结
虽说处理起来很简单,但依然是治标不治本,依赖的东西比较多(shell脚本,调度
)。
所以也问问各位有没有什么思路:
生产配置:
- 三台
kafka、ZK
组成的集群。
其中也有其他团队的消费程序在正常运行,应该和kafka
的配置没有关系。
项目地址:https://github.com/crossoverJie/SSM.git
个人博客:http://crossoverjie.top。