所以,自从我第一次听说卡夫卡以来,我一直很喜欢卡夫卡的想法,但直到最近我还没有机会亲自动手。我想我有一个可能适用的用例,但我想从更熟悉它的人那里得到一些意见。
基本上我正在考虑一个通知系统,该系统会在给定的时间段(比如说30分钟)内批量处理邮件,并将其作为电子邮件,应用程序内通知或其他方式发送出去。我喜欢卡夫卡这个问题主要是因为它固有的耐用性。我曾考虑使用像RabbitMQ,ActiveMQ,SQS等更直接的消息队列,但我不喜欢它会迫使我在消费者方面管理缓冲并冒着丢失消息的风险。否则我将不得不缓冲在一个二级耐用商店,这似乎打败了首先拥有队列的目的。
所以我的想法是按用户将通知分组,然后每30分钟,消费者会读取最后30分钟的数据,汇总数据,并发送由各个通知组成的摘要通知。
我有一些顾虑:
感谢您的反馈!
答案 0 :(得分:0)
现在回答这个问题可能为时已晚,我想您可能已经有了解决方案。对于考虑同一件事的其他用户,我想说您的想法非常好,尤其是在考虑使用Kafka Streams时。我现在正在使用Kafka Streams和Kotlin构建一个名为light-email的项目。目前,我正在考虑为每个活动发送电子邮件;但是,在Kafka Streams中的一个时间窗口内将多个事件聚合在一起非常容易。
从注释中澄清两点。
我们不需要为每个用户创建一个分区。只需要确保事件属于同一用户就可以进入同一分区。这只是意味着我们需要对用户ID进行哈希处理以在分区之间进行负载平衡。
当消息发送失败时,应将其移至无用信主题,以便稍后处理。这是为了防止当前主题被阻止。