xar*_*arx 6 apache-kafka kafka-topic
在许多文章中,我读到压缩的 Kafka 主题可以用作数据库。但是,在查看 Kafka API 时,我找不到允许我根据键查询主题的值的方法。
那么,压缩后的Kafka主题可以用作(高性能、只读)键值数据库吗?
在我的架构中,我想为组件提供一个紧凑的主题。我想知道该组件是否需要在其本地数据库中拥有该主题的副本,或者是否可以使用该压缩主题作为键值数据库。
压缩的 kafka 主题本身和基本的 Consumer/Producer kafka API 不适合键值数据库。然而,它们被广泛用作后存储来保存 KV 数据库/缓存数据,即:例如在直写方法中。如果您出于某种原因需要重新预热缓存,只需重播整个主题即可重新填充。
在 Kafka 世界中,您拥有Kafka Streams API,它允许您公开应用程序的状态,即:对于您的 KV 用例,它可能是通过可查询状态存储的方式获得订单的最新状态。状态存储是 KV 数据库的抽象,实际上是使用名为 RocksDB 的快速 KV 数据库来实现的,在发生灾难时,它是完全可恢复的,因为它的完整数据保存在 kafka 主题中,因此它具有相当的弹性。您的用例的数据源。
想象一下,这是您的 Kafka Streams 应用程序架构:
为了能够查询这些 Kafka Streams 状态存储,您需要在 Kafka Streams 应用程序中捆绑 HTTP Server 和 REST API,以查询其本地或远程状态存储(Kafka 在一个主题中的多个分区之间分发/分片数据,以启用并行处理和高可用性,Kafka Streams 也是如此)。由于 Kafka Streams API 提供了元数据让您知道密钥位于哪个实例,因此您当然可以查询任何实例,并且如果密钥存在,则无论密钥位于哪个实例都可以返回响应。
通过这种方法,您可以一次杀死两只鸟:
一切都在实时、高性能、分布式和弹性架构中。
这些图像源自Robert Schmid 撰写的一篇更广泛的文章,您可以在其中找到更多详细信息和使用 Kafka Streams 实现可查询状态存储的原型。
值得注意的是:
如果您没有心情使用 Kafka Streams API 来实现所有这些,请查看Confluence 中的ksqlDB,它在 Kafka Streams 之上提供了更高级别的抽象,只需使用一种很酷且简单的 SQL 方言即可实现相同的排序使用拉式查询的用例。如果您想快速制作原型,请查看Robin Moffatt 的回答,甚至这篇博客文章,以了解其简单性。
虽然 ksqlDB 不是 Apache Kafka 项目的一部分,但它是开源、免费的,并且构建在 Kafka Streams API 之上。
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |