【问题标题】:Kafka instead of Rest for communication between microservicesKafka而不是Rest用于微服务之间的通信
【发布时间】:2018-05-07 03:57:57
【问题描述】:

我想将(微)服务之间的通信从 REST 更改为 Kafka。 我不确定这些主题,想听听一些意见。

考虑以下设置: 我有一个 API 网关,它通过 REST 为 Web 应用程序提供 CRUD 功能。所以我有 4 个用户可以调用的端点。 API-Gateway 将产生请求并使用来自第二个服务的响应。 第二个服务消费请求,访问数据库以对数据库执行 CRUD 操作并产生结果。

我应该创建多少个主题? 我必须创建 8 个(每个端点 2 个(请求/响应))还是有更好的方法?

想听听一些经验或有关这方面的讨论/文档的链接。

【问题讨论】:

    标签: rest apache-kafka microservices


    【解决方案1】:

    这个问题的简短答案是;这取决于您的设计。

    您可以只为所有操作使用一个主题,也可以为不同的操作使用多个主题。但是你必须知道;

    您必须按照它们创建的顺序向 kafka 生成消息,并且您必须以相同的顺序使用这些消息以提供一致性。发送到 kafka 的消息在主题分区中排序。不同主题分区中的消息不按 kafka 排序。可以说,您创建了一个项目,然后删除了该项目。如果您尝试在与创建操作相关的消息之前使用与删除操作相关的消息,则会出现错误。在这种情况下,您必须将这两条消息发送到同一个主题分区,以确保删除消息在创建消息后被消费。

    请注意,始终需要在一致性和吞吐量之间进行权衡。在这种情况下,如果您使用单个主题分区并将所有消息发送到同一个主题分区,您将提供一致性,但您无法快速消费消息。因为你会从同一个主题分区中一一获取消息,而当上一条消息被消费时你会得到下一条消息。为了增加这里的吞吐量,您可以使用多个主题,也可以将主题划分为分区。对于这两种解决方案,您必须在生产者端实现一些逻辑以提供一致性。您必须将相关消息发送到同一主题分区。例如,您可以将主题划分为不同实体类型的数量,并将相同实体类型的 crud 操作的消息发送到同一个分区。我不知道它是否能确保您的场景的一致性,但这可以作为替代方案。您应该找到与多个主题或主题分区提供一致性的逻辑。这取决于你的情况。如果你能找到逻辑,你就提供了一致性和吞吐量。

    对于您的情况,我将使用具有多个分区的单个主题,并且在生产者端,我会将相关消息发送到同一主题分区。

    --问候

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 2018-07-19
      • 2016-06-10
      • 2021-02-05
      • 1970-01-01
      • 2016-03-05
      • 2018-01-22
      • 1970-01-01
      相关资源
      最近更新 更多