返回到文章

采纳

编辑于 3年前

kafka作为任务队列,如何配置可以支持处理长任务?

kafka

问题

用户在前端提交计算任务,后端将计算任务提交到kafka(全局只有一个topic,多个分区),告诉前端任务提交成功。后端有一个线程一直不断从kafka拉取任务处理,但是这个任务可能比较大(达数小时),只有一个消费者的情况下,可以正常执行任务(执行了4个小时),最终也commit了,但是多个消费者情况下(同属于一个消费者组),一个消费者拉取任务执行一段时间后,任务又被其他的消费者拉取执行了,过一会儿又会转移,就这样任务被踢来踢去,尝试了更改消费者配置,但没有解决,也是不熟悉参数之间的约束关系。由于线上是有多个实例的,所以这个问题必须解决。

临时处理方案

因为单消费者消费任务目前看起来是没有问题的,我们用了redis实现一个锁,保证只有一个实例(消费者)消费任务,实际可行。如果kafka的话有没有更好的处理方式呢?比如更改配置让它支持长任务处理