Kafka而不是Rest用于微服务之间的通信

Pet*_*tig 8 rest apache-kafka microservices

我想改变从REST到Kafka的(微)服务之间的通信.我不确定这些主题,并希望听到一些有关这方面的意见.

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

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

希望听到一些经验或与会谈/文件相关的链接.

Ali*_*lam 5

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

您只能为所有操作使用一个主题,或者可以将多个主题用于不同的操作.但是你必须知道;

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

请注意,始终存在一致性和吞吐量之间的交易.在这种情况下,如果您使用单个主题分区并将所有邮件发送到同一主题分区,则会提供一致性,但您无法快速使用邮件.因为您将逐个从同一主题分区获取消息,并且在上一条消息消耗时您将收到下一条消息.要在此处增加吞吐量,您可以使用多个主题,也可以将主题划分为多个分区.对于这两种解决方案,您必须在生产者端实现一些逻辑以提供一致性.您必须将相关消息发送到同一主题分区.例如,您可以将主题划分为不同实体类型的数量,并将相同实体类型crud操作的消息发送到同一分区.我不知道它是否确保您的方案的一致性,但这可以是一种替代方案.您应该找到提供与多个主题或主题分区一致性的逻辑.这取决于你的情况.如果您可以找到逻辑,则可以提供一致性和吞吐量.

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

- 问候