database - 数据先放在Kafka还是Database?

标签 database apache-kafka

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

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

还是先存到数据库,再传给kafka比较好?

谢谢

最佳答案

让我们以您的用例为例,用于存储产品的 api 调用假设为 PRODUCT1:

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

API伪代码:

  1. 验证产品信息
  2. 保存——首先在kafka或DB中保存

方法 1 -

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

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

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

关于database - 数据先放在Kafka还是Database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52983892/

相关文章:

数据库模式规范化检查器?

sql - 跟踪 Microsoft SQL Server 数据库中的更改

java - 什么样的数据库以及如何创建它来对文本进行分层分类?

java - 如何将 mssql jdbc 驱动程序安装到 confluence/kafka

java - 创建主题失败”,"exception":"\norg. apache.kafka.common.errors.UnsupportedVersionException

java - 使用 Spring Kafka 处理死信主题的消息

mysql - 使用mysqldumper导入数据库时​​出错

android - 整体更新实体与更新分离的特定列

apache-kafka - Kafka 连接器 - 无法停止重新平衡

java - spring.kafka.consumer.auto-offset-reset 在 spring-kafka 中如何工作