使用kafka代替redis进行队列

r3i60tvu  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(573)

我有一个小项目,它将redis用于任务队列。下面是它的基本工作原理。
我在系统中有两个组件:桌面客户端(可以不止一个)和服务器端应用程序。服务器端应用程序为桌面客户端提供了一系列任务。当一个客户机到来时,从pull中获得的第一个可用任务就被赋予了它。由于任务有一个id,当桌面客户端返回结果时,服务器端应用程序可以通过其id识别任务
将所有任务保持为对象。
将任务队列(池)保留在几个列表中:队列、提供的、处理的。
当任务被提供给桌面客户端时,我使用redis中的rpoplpush将id从队列列表移动到提供的列表中。
当我从桌面客户机得到响应时,我使用lrem从提供的列表中获得给定的任务id(如果失败,我得到的任务没有提供或已经被处理,或者根本不存在-因此,我中断执行)。然后我使用lpush将任务id添加到处理列表中。考虑到我有唯一的任务ID(在我的应用程序级别上控制),我避免了redis列表中的重复项。
当任务完成时(从桌面客户端得到的结果被处理并以某种方式保存),我从处理列表中删除任务,并从redis中删除任务对象。
如果在任何步骤中出现任何错误(即任务卡在处理或提供的列表中),我可以将任务移回队列列表并重新处理它。
现在,问题是:有没有可能在Apache·Kafka身上做类似的事情?我不需要redis中的确切行为-我所需要的只是能够向桌面客户端提供一个任务(不可能两次提供同一个任务),并根据实际处理状态(新的、提供的、处理的)标记/更改其状态,这样我就可以控制进程并恢复由于某些问题而未处理的任务。如果可能的话,谁能描述一下适用的工作流程?

zbwhf8kr

zbwhf8kr1#

Kafka可以充当标准队列。检查消费者组功能。
如果问题是关于适当性的,还请参考apachekafka是否适合用作任务队列?
我们使用kafka作为任务队列,其中一个有利于kafka的考虑是它已经存在于我们的应用程序生态系统中,发现它比添加更多组件更容易。

相关问题