首页 > 解决方案 > 设计 Kafka 消费者和生产者以实现可扩展性

问题描述

我想设计一个解决方案,用于向多个提供商发送不同类型的电子邮件。一般概述。

在此处输入图像描述

我有几个上游提供商 Sendgrid、Zoho、Mailgun 等。它们将用于发送电子邮件等。例如:

(一般大约 6 种类型的电子邮件)

每种类型的电子邮件都应生成到生产者中,转换为序列化 Java 对象并发送到与上游提供者集成的适当 Kafka 消费者。

问题是如何设计 Kafka 以获得最大的性能和可扩展性?

是否有更好的方法来设计此设置,以便我可以更轻松地扩展它并使其对于未来的集成非常强大?

你可以在这里看到我如何在消费者和生产者之间发送消息:org.apache.kafka.common.KafkaException: class SaleRequestFactory is not an instance of org.apache.kafka.common.serialization.Serializer

编辑:

  1. 顺序很重要,因为通信将是异步的。生产者将等待返回消息的状态
  2. 将每个网关的数据保持在不同的主题上并不重要
  3. 你想要什么样的隔离?我希望将消息/主题彼此完全隔离,以防止将来在需要添加更多网关或消息类型时出错

将每个网关的数据保存在不同的主题上对您来说很重要吗?- 不,我只想隔离 hte 数据。

如果您要为每个网关使用一个主题,您是否关心它将在客户端产生的开销?- 读取不必要的消息、编写更多逻辑、混合序列化程序等

我不知道这里。我主要关心的是使系统易于扩展新功能。

标签: apache-kafkaarchitecturekafka-consumer-apispring-kafka

解决方案


我认为对于您提到的操作开销而言,每种事件类型的一个主题确实太多了。

我认为选项 2 是正确的方法 - 每个集成网关一个主题,有专门的消费者。优点是:

  • 您在主题级别隔离工作负载(集成网关 A 上的许多消息不会影响网关 B 的消费者)
  • 您可以根据主题工作负载扩展消费者

生产者将根据网关的要求将消息序列化,并将其发布到特定的主题上。消费者只会阅读消息并推送它。


推荐阅读