gpt4 book ai didi

apache-kafka - 使用Kafka批量发送邮件

转载 作者:行者123 更新时间:2023-12-04 04:50:02 24 4
gpt4 key购买 nike

所以我从第一次听说卡夫卡的想法开始就喜欢它,但直到最近我才有机会接触它。我想我有一个可能适用的用例,但我想从更熟悉它的人那里得到一些意见。

基本上,我正在考虑一个通知系统,它可以在给定的时间段(比如 30 分钟)内批量处理消息,并将它们作为电子邮件、应用程序内通知或其他方式发送出去。我喜欢 Kafka 解决这个问题,主要是因为它固有的耐用性。我曾考虑使用更直接的消息队列,如 RabbitMQ、ActiveMQ、SQS 等,但我不喜欢它会迫使我在消费者端管理缓冲并冒丢失消息的风险。否则,我将不得不在二级持久存储中进行缓冲,这似乎违背了首先拥有队列的目的。

所以我的想法是将通知按用户分组,然后每 30 分钟消费者将读取最后 30 分钟的数据,聚合它,并发送由单个通知组成的摘要通知。

我有几个顾虑:

  • 我是否因为认为这是一个很好的用例而疯狂?通过一点谷歌搜索,我没有看到很多人在谈论使用 Kafka 正是为了这个目的,但它对我来说似乎非常完美。
  • 我应该如何处理个别通知错误?例如,假设用户在 30 分钟的窗口中收到 50 条通知,这些通知将分为 3 条不同的消息分别发送。假设两个成功但一个失败,我应该如何处理重试逻辑?我发现了一些像这样的相对较新/晦涩的东西 https://github.com/softwaremill/kmq这似乎试图解决这个问题,但我有点担心我担心这不适合 Kafka 模型。
  • 我只是在违背常规吗?当然,这是人们每天都在构建的一个已解决的问题。有没有我忽略的更简单、更明显的技术?

  • 感谢您的反馈意见!

    最佳答案

    现在回答这个问题可能为时已晚,我认为您可能已经有了解决方案。对于其他有同样想法的用户,我想说您的想法非常好,尤其是在考虑使用 Kafka Streams 时。我正在构建一个名为 light-email 的项目现在有了 Kafka Streams 和 Kotlin。目前,我正在考虑为每个事件发送电子邮件;然而,在 Kafka Streams 中的一个时间窗口内将多个事件聚合在一起会非常容易。

    从评论中澄清两点。

  • 我们不需要为每个用户创建一个分区。只需要确保属于同一个用户的事件进入同一个分区即可。这只是意味着我们需要散列用户 ID 以在分区之间进行负载平衡。
  • 当消息发送失败时,应将其移至死信主题以稍后处理。这是为了防止当前主题被阻塞。
  • 关于apache-kafka - 使用Kafka批量发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765346/

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