gpt4 book ai didi

apache-kafka - KTable和本地商店的区别

转载 作者:行者123 更新时间:2023-12-04 03:25:20 25 4
gpt4 key购买 nike

这些实体之间有什么区别?

正如我所想,KTable - 带有 compaction 的简单 kafka 主题删除政策。此外,如果为 KTable 启用了日志记录,那么还有更改日志,然后,删除策略为 compaction,delete .

本地存储 - 基于 RockDB 的内存键值缓存。但是本地商店也有更新日志。

在这两种情况下,我们都会获得一段时间内 key 的最后一个值 (?)。本地存储用于聚合步骤、连接等。但是在它之后还创建了具有压缩策略的新主题。

例如:

KStream<K, V> source = builder.stream(topic1);
KTable<K, V> table = builder.table(topic2); // what will happen here if i read data from topic with deletion policy delete and compaction? Will additional topic be created for store data or just a local store (cache) be used for it?

// or
KTable<K, V> table2 = builder.table(..., Materialized.as("key-value-store-name")) // what will happen here? As i think, i just specified a concrete name for local store and now i can query it as a regular key-value store

source.groupByKey().aggregate(initialValue, aggregationLogic, Materialized.as(...)) // Will new aggregation topic be created here with compaction deletion policy? Or only local store will be used?

我也可以使用 builder builder.addStateStore(...) 创建一个状态存储我可以在哪里启用/禁用日志记录(更改日志)和缓存(???)。

我读过这个: https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html ,但有些细节对我来说仍然不清楚。特别是当我们可以禁用 StreamCache(但不能禁用 RockDB 缓存)的情况下,我们将获得关系数据库的 CDC 系统的完整副本

最佳答案

一个 KTable是随时间更新的表的逻辑抽象。此外,您可以不将其视为物化表,而是将其视为包含表的所有更新记录的变更日志流。比较 https://docs.confluent.io/current/streams/concepts.html#duality-of-streams-and-tables .因此,从概念上讲,KTable如果您愿意,它是一种混合的东西,但是,更容易将其视为随时间更新的表。

在内部,一个 KTable使用 RocksDB 和 Kafka 中的主题实现。 RocksDB 存储表的当前数据(注意,RocksDB 不是内存存储,可以写入磁盘)。同时,每次更新到KTable (即到 RocksDB)被写入相应的 Kafka 主题。 Kafka 主题用于容错(注意,RocksDB 本身被认为是短暂的,通过 RocksDB 写入磁盘不提供容错,但使用的更改日志主题),并配置了启用日志压缩以确保通过阅读主题可以恢复 RocksDB 的最新状态。

如果您有 KTable由窗口聚合创建的 Kafka 主题配置为 compact,delete到过期的旧数据(即旧窗口)以避免表(即 RocksDB)无限增长。

除了 RocksDB,您还可以为 KTable 使用内存存储。不写入磁盘。该存储还将具有一个更改日志主题,用于跟踪存储的所有更新以用于容错。

如果您通过 builder.addStateStore() 手动添加商店您还可以添加 RocksDB 或内存存储。在这种情况下,您可以启用更改日志以实现类似于 KTable 的容错。 (请注意,当 KTable 在内部创建时,它使用完全相同的 API——即 KTable 是隐藏一些内部细节的更高级别的抽象)。

对于缓存:这是在 Kafka Streams 和存储(RocksDB 或内存中)之上实现的,您可以启用/禁用手动添加的“普通”存储,或用于 KTables。比较 https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html因此,缓存独立于 RocksDB 缓存。

关于apache-kafka - KTable和本地商店的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com