首页 > 解决方案 > 将数据放在 Kafka 或数据库中?

问题描述

将数据先放入 Kafka 再放入数据库或以其他方式放入数据时,优缺点是什么?

一个示例:用户执行 REST (POST) 调用来存储假设产品。通常我会在后端接听这个电话并将正文保存到数据库中(在验证和所有之后......)。接这个调用并将数据存储在 Kafka 拳头中,然后将其保存到数据库(在这种情况下,数据库是 kafka 消费者)是否是最佳实践。

还是先存入数据库,再发给kafka比较好?

谢谢

标签: databaseapache-kafka

解决方案


让我们用您的用例举例说明这两种情况,用于存储产品的 api 调用让我们说 PRODUCT1:

你的数据库:product_table(product_id , product_name,product_info)

API伪代码:

  1. valiadteProductInfo
  2. 保存 - 首先在 kafka 或 DB 中

方法 1 -

首先保存到 kafka 意味着您可能会在一段时间后在数据库中看到该结果,您会将产品 ID 返回给用户,如果用户想要填充产品 ID,则它不可见。对我来说,这不是正确的方法,因为您将需要在 UI 端处理许多事情以应对这种延迟。

方法 2 - 首先保存到 db,然后保存到 kafka,有两种情况:1. kafka 推送在代码中同步 - 在这种情况下,发送到 kafka 失败,这在您的业务案例中非常关键,因为其他微服务是依赖的。这不是正确的方法,但是如果在推送失败的情况下 <0.001% 的时间是可以的,然后您从数据库中删除产品并将异常返回给用户。我认为这完全没问题。

  1. kafka 推送是通过轮询数据库的更改并将更改放入 kafka(请阅读有关 EventSourcing 的内容):在这种情况下,您将获得 100% 的保证,但会有一些小的延迟。这也可以使用

推荐阅读