每个用户发送通知的速率限制,例如 X 秒内 1 个通知

问题描述 投票:0回答:1

我有一个用例,队列中有消息流,我想使用具有这些限制的消费者作业将此消息发送给用户

  • 有一个限制,比如我只能在 x 秒内发送 1 个通知,例如每 10 秒发送 1 个通知
  • 用户收到这些消息时的顺序应该相同
  • 消费者作业不应在延迟用户通知的同时阻塞线程 x 秒

例如:Stream 有 100 条来自不同用户的消息,用户 y 在流中收到了 5 条消息,通知限制为每 10 秒 1 条通知,现在这个消费者作业应该从流中读取并将这 5 条通知发送给用户每 10 秒按照流中接收的相同顺序

apache-kafka concurrency queue system-design high-level-architecture
1个回答
0
投票

在使用消息时将消息转储到数据库中,并包含事件的时间戳。这将保留顺序。

否则,每个用户 ID 将映射到 Kafka 中的唯一分区,如果您有数百万用户,这将使 Kafka 代理不堪重负……或者,如果两个用户的数据位于同一分区中,则您仅发送通知“第二个用户”,您应该提交偏移量以不再处理该数据,然后您会丢失“早期用户”的数据

在后台线程中使用计时器来查询数据库,每 10 秒对每个用户的事件进行计数(如果存在),发送通知并从集合中删除这些记录

© www.soinside.com 2019 - 2024. All rights reserved.