当前位置: 首页 > 知识库问答 >
问题:

压缩后的Kafka主题可以用作键值数据库吗?

丌官盛
2023-03-14

在许多文章中,我读到压缩的Kafka主题可以用作数据库。然而,当查看Kafka API时,我找不到允许我根据键查询主题值的方法。

那么,压缩的Kafka主题可以用作(高性能、只读)键值数据库吗?

在我的架构中,我希望为组件提供一个紧凑的主题。我想知道该组件是否需要在其本地数据库中具有该主题的副本,或者它是否可以将该压缩主题用作键值数据库。

共有1个答案

邬博涉
2023-03-14

压缩的kafka主题本身和基本的消费者/生产者kafka API不适合键值数据库。但是,它们被广泛用作持久KV数据库/缓存数据的后备存储,即:例如,在写入方法中。如果您出于某种原因需要重新预热缓存,只需重播整个主题以重新填充。

在Kafka世界中,您有Kafka Streams API,它允许您公开应用程序的状态,即:对于您的KV用例,它可以是订单的最新状态,通过可查询的状态存储。状态存储是KV数据库的抽象,实际上是使用名为RocksDB的快速KV数据库实现的,在发生灾难的情况下,该数据库是完全可恢复的,因为它的完整数据保存在Kafka主题中,所以它很有弹性,可以作为用例的数据源。

假设这是您的Kafka Streams应用程序架构:

为了能够查询这些Kafka Streams状态存储,您需要在Kafka Streams应用程序中捆绑HTTP服务器和REST API,以查询其本地或远程状态存储(Kafka在主题中跨多个分区分发/切分数据,以实现并行处理和高可用性,Kafka Streams也是如此)。因为Kafka Streams API提供了元数据,让您知道密钥驻留在哪个实例中,所以您肯定可以查询任何实例,如果密钥存在,则可以返回响应,而不管密钥驻留在哪个实例中。

使用这种方法,您可以一枪杀死两只鸟:

  1. 使用Kafka Streams大规模进行有状态流处理
  2. 以KV数据库查询模式样式向外部客户端公开其状态

所有这些都在一个实时、高性能、分布式和弹性的体系结构中。

这些图片来源于罗伯特·施密德(Robert Schmid)的一篇更广泛的文章,在这篇文章中,你可以找到其他细节和一个原型,用Kafka流实现可查询的状态存储。

值得一提的是:

如果您不想使用Kafka Streams API实现所有这一切,请看一下Confluent的ksqlDB,它在Kafka Streams之上提供了更高级别的抽象,只需使用一种酷而简单的SQL方言,就可以使用pull查询实现相同类型的用例。如果你想真正快速地创建原型,看看罗宾·莫法特(RobinMoffatt)的这个答案,甚至这篇博客文章,来把握它的简单性。

虽然ksqlDB不是Apache Kafka项目的一部分,但它是开源的、免费的,并且构建在Kafka Streams API之上。

 类似资料:
  • 我在《掌握Kafka Streams and ksqlDB》一书中遇到了以下两个短语,作者使用了两个术语,它们的真正含义是“压缩主题”和“未压缩主题” 他们对“日志压缩”有什么看法吗? 表可以被认为是对数据库的更新。在日志的这种视图中,只保留每个键的当前状态(给定键的最新记录或某种聚合)。表通常是从压缩的主题构建的。 用数据库的说法,流可以被视为插入。每个不同的记录都保留在此日志视图中。流通常是从

  • 我收到了一个数据库更改流,这些更改最终形成了一个压缩的主题。流基本上是键/值对,并且键空间很大(~4 GB)。 这个主题由一个kafka流进程使用,该进程将数据存储在RockDB中(每个消费者/碎片单独使用)。处理器做两件不同的事情: 将数据连接到另一个流中。 检查来自主题的邮件是新密钥还是对现有密钥的更新。如果是更新,则将旧的键/值和新的键/值对发送到不同的主题(更新很少)。 null

  • 只是关于Kafka的后续问题-未压缩主题与压缩主题 正如那里所说, 用数据库的说法,流可以被视为插入。每个不同的记录都保留在此日志视图中。流通常是从未压缩的主题构建的。 作为最佳实践,关于未压缩主题的语义,是否应禁用要在日志启用程序中取消压缩的主题,以便不会发生压缩(清理),其属性如下: 日志清洁工enable=false或log。清洁工启用=true(默认),清除策略为“delete”(默认)

  • SQL Server数据库文件占用很大磁盘空间如何优化

  • 我使用的是Debezium,它制作了Kafka Connect。Kafka Connect公开了几个需要创建的主题: OFFSET_STORAGE_TOPIC运行Kafka Connect服务时需要此环境变量。将此设置为Kafka主题的名称,其中Kafka Connect服务组存储连接器偏移。主题应该有许多分区,高度重复(例如,3倍或更多),并且应该为压缩进行配置。 STATUS_STORAGE_

  • 问题内容: 我正在使用一些非常沉重的AJAX,其中许多数据都从客户端到服务器。在发送到服务器之前,如何压缩数据(主要是纯文本)? 以及如何在服务器端解压缩数据? 问题答案: jSEND似乎完全可以做到这一点。有人用过吗? 断开的链接已删除:导致垃圾邮件登陆页面@ jsend.org