关于将事件从redis转移到kafka的问题

hpcdzsge  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(417)

我有一个关于事件驱动系统中一个棘手情况的问题,我想寻求建议。情况如下:
在我们的系统中,我使用 redis 作为memcached数据库 kafka 作为消息队列。为了提高redis的性能,我使用 lua scripting 处理数据,同时将事件推送到redis的阻塞列表中。然后,将有一个过程来选择该阻止列表中的redis事件,并将它们移动到Kafka。所以在这个过程中,有3个步骤:
1) 从redis列表读取事件
2) 批量生产成Kafka
3) 删除redis中相应的事件
不幸的是,如果进程在2到3之间死亡,也就是说在将所有事件生成到kafka之后,它不会删除redis中相应的事件,那么在该进程重新启动之后,它会将重复的事件生成到kafka中,这是不可接受的。那么有谁能解决这个问题呢。提前谢谢,我真的很感激。

m0rkklqb

m0rkklqb1#

Kafka倾向于重新处理事件,即使只写了一次。再加工几乎肯定是由重新平衡客户造成的。重新平衡可能由以下因素触发:
修改主题上的分区。
服务器的重新部署以及随后客户端的暂时不可用。
缓慢的消息消耗和随后由代理重新创建客户端。
换句话说,如果您需要确保消息只被处理一次,那么您需要在客户端确保这一点。您可以通过设置一个分区键来实现这一点,该分区键确保相关的消息以顺序的方式被同一个客户机使用。然后,这个客户机就可以维护他已经处理过的内容的数据库记录。

相关问题