有关将事件从Redis移至kafka的问题

时间:2018-09-30 07:11:19

标签: redis apache-kafka kafka-producer-api event-sourcing distributed-transactions

我有一个与事件驱动系统中棘手的情况有关的问题,我想请教。情况如下:

在我们的系统中,我将redis用作内存缓存数据库,并将kafka a用作消息队列。为了提高redis的性能,我使用lua scripting处理数据,同时将事件推送到redis的阻止列表中。然后将有一个过程来从该阻止列表中选择Redis事件并将其移至kafka。因此,在此过程中,共有3个步骤:

1)从Redis列表中读取事件
2)批量生产卡夫卡
3)删除redis中的相应事件

不幸的是,如果进程死于2到3之间,这意味着在将所有事件生成到kafka中之后,它不会删除redis中的相应事件,然后在该进程重启后,它将生成重复的事件到kafka中,这就是不可接受的。任何人对这个问题都有任何解决方案。预先感谢,我非常感谢。

1 个答案:

答案 0 :(得分:0)

即使仅编写一次,Kafka仍倾向于重新处理事件。几乎可以肯定,重新处理客户端将导致重新处理。重新平衡可能是由以下原因触发的:

  • 修改主题上的分区。
  • 重新部署服务器并随后导致客户端暂时不可用。
  • 消息消耗缓慢,代理随后重新创建客户端。

换句话说,如果您需要确保只对消息进行一次处理,则需要确保在客户端进行处理。您可以通过设置分区键来确保相关消息被同一客户端按顺序使用,从而做到这一点。然后,该客户可以维护其已处理内容的数据库记录。