使用 ElasticSearch 作为替代数据存储,应用程序同时更新 DB 和 ES(在 Kafka 的帮助下)。这是一个好主意吗?

Using ElasticSearch as alternative data store with applications updating both the DB and ES(with the help of Kafka). Is this a good idea?

架构是这样的,有几个应用程序访问一些关系数据库。但是某些应用程序需要大量连接,这会增加查询时间。为了解决这个问题,我们制作了关系数据库的 ElasticSearch 副本。但即使是从 DB 中实时索引 ES 中的数据也需要花费大量时间。 这就是 Kafka 的来源,我们引入了一个 Kafka 管道将应用程序直接连接到 ES。 ES 的 Logstash 是消费者,而应用程序是 Kafka 的生产者。除了更新数据库的正常流程是完整的(因此,如果 ES 索引崩溃或 ES 集群以任何方式丢失数据,我们可以从数据库更新回来) 这种架构是个好主意吗?

这是个好主意,是的,出于您自己提到的原因。事实上,我也有一个设置,其中文档通过 Kafka 馈送到 ES,并且无法想象回到引入 Kafka 之前的设置。

如果您需要对 Kafka 消费过程进行更精细的控制,请查看 here。这是最近的一个项目,不幸的是在我实现了自己的低级消费者后变得可用:)