gpt4 book ai didi

apache-kafka - 出于队列目的使用 Kafka 而不是 Redis

转载 作者:行者123 更新时间:2023-12-02 03:07:14 25 4
gpt4 key购买 nike

我有一个小项目使用 Redis 来实现任务队列。这是它的基本工作原理。

我的系统有两个组件:桌面客户端(可以有多个)和一个服务器端应用。服务器端应用程序为桌面客户端提供任务拉动。当客户端到来时,将把拉取中的第一个可用任务交给它。由于任务有一个 id,当桌面客户端返回结果时,服务器端应用程序可以通过它的 id 识别任务。基本上,我在 Redis 中执行以下操作:

  1. 将所有任务作为对象。
  2. 在多个列表中保留任务队列(池):队列提供处理

当向桌面客户端提供任务时,我在 Redis 中使用 RPOPLPUSH 将 id 从队列列表移动到提供列表。

当我收到来自桌面客户端的响应时,我对提供的列表中的给定任务 ID 使用 LREM(如果它失败,我得到一个未提供或已经处理的任务,或者根本不存在 - 所以,我打破了执行)。然后我使用 LPUSH 将任务 ID 添加到 processing 列表中。鉴于我有唯一的任务 ID(在我的应用程序级别控制),我避免了 Redis 列表中的重复。

当任务完成时(从桌面客户端得到的结果被处理并以某种方式保存),我从processing列表中删除任务并从 Redis 中删除任务对象。

如果任何步骤出现任何问题(即任务卡在处理或提供的列表中),我可以将任务移回队列列表并重新处理它。

现在,问题是:是否有可能在 Apache Kafka 中做类似的事情?我不需要像在 Redis 中那样的确切行为——我所需要的只是能够向桌面客户端提供任务(不应该提供两次相同的任务)并根据实际标记/更改其状态处理状态(新的、提供的、处理中的),以便我可以控制流程并恢复由于某些问题而未处理的任务。如果可能的话,谁能描述一下适用的工作流程?

最佳答案

kafka 可以充当标准队列。检查consumer group功能。

如果问题是关于适当性的,也请引用Is Apache Kafka appropriate for use as a task queue?

我们使用 kafka 作为任务队列,支持 kafka 的考虑之一是它已经在我们的应用程序生态系统中,发现它比添加一个组件更容易。

关于apache-kafka - 出于队列目的使用 Kafka 而不是 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com