【发布时间】:2020-05-13 21:09:43
【问题描述】:
我开发了一个分布式系统来处理订单并在其中进行一些计算。
所有订单都进入 Apache Kafka,分布在特定服务之间。
我可以将 Apache Kafka 视为存储订单数据的持久数据库吗?
我很困惑,因为订单更适合存储在关系数据库中,如 MySQL。
如何做决定?
在功能中我想对所有订单进行分析,并按日期、金额等进行选择,是否可以使用Kafka?
【问题讨论】:
标签: apache-kafka
我开发了一个分布式系统来处理订单并在其中进行一些计算。
所有订单都进入 Apache Kafka,分布在特定服务之间。
我可以将 Apache Kafka 视为存储订单数据的持久数据库吗?
我很困惑,因为订单更适合存储在关系数据库中,如 MySQL。
如何做决定?
在功能中我想对所有订单进行分析,并按日期、金额等进行选择,是否可以使用Kafka?
【问题讨论】:
标签: apache-kafka
是的,您可以使用 Apache Kafka 进行持久存储。
请参阅this article 了解原因,this article 了解公司在生产中执行此操作的示例,this talk 了解为什么使用 Kafka 作为记录系统实际上是一个非常明智的想法与其他技术(例如 ksqlDB)一起在需要时从数据中实现视图。
还有来自 Martin Kleppmann 的 this very interesting talk,它考虑了 Kafka 本身是否甚至可以被视为数据库本身。
那么选择数据如何像 SQL 中那样呢?例如,我需要获得所有已完成的订单或已付款的订单
使用ksqlDB等流处理器:
SELECT * FROM orders_topics WHERE ORDER_STATUS='FINISHED';
SELECT * FROM orders_topics WHERE PAID=TRUE;
我需要订单和付款之间的关系
SELECT * FROM ORDERS O LEFT JOIN PAYMENTS P ON O.ID=P.ORDER_ID;
【讨论】: