Nic*_*yan 10 apache-kafka apache-kafka-streams
这些实体之间有什么区别?
我认为,KTable-具有compaction删除策略的简单kafka主题。另外,如果为KTable启用了日志记录,那么还将有changelog,然后删除策略为compaction,delete。
本地存储-基于RockDB的内存中键值缓存。但是本地商店也有一个变更日志。
在这两种情况下,我们都将在特定时间段(?)中获得密钥的最后一个值。本地存储用于聚合步骤,联接等。但是,紧随其后的还有创建具有压缩策略的新主题。
例如:
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?
Run Code Online (Sandbox Code Playgroud)
我也可以使用生成器创建状态存储builder.addStateStore(...),在其中可以启用/禁用日志记录(changelog)和缓存(???)。
我已经阅读了这篇文章:https : //docs.confluent.io/current/streams/developer-guide/memory-mgmt.html,但是一些细节对我来说仍然不清楚。尤其是当我们可以禁用StreamCache(但不能禁用RockDB缓存)并且将为关系数据库获得CDC系统的完整副本时
Mat*_*Sax 12
A KTable是随时间更新的表的逻辑抽象。此外,您可以将其视为不是物化表,而是由表的所有更新记录组成的变更日志流。比较https://docs.confluent.io/current/streams/concepts.html#duality-of-streams-and-tables。因此,从概念上讲,KTable如果您愿意的话,a 是混合的,但是,将其视为随时间更新的表会更容易。
在内部,KTable使用RocksDB和Kafka中的主题来实现。RocksDB,存储表的当前数据(请注意,RocksDB不是内存存储,并且可以写入磁盘)。同时,对KTable(即,对RocksDB)的每次更新都被写入相应的Kafka主题。Kafka主题用于容错原因(请注意,RocksDB本身被认为是临时的,通过RocksDB写入磁盘不提供容错功能,但使用了changelog主题),并且配置了日志压缩功能以确保通过阅读该主题,可以恢复RocksDB的最新状态。
如果您有一个KTable通过窗口聚合创建的,Kafka主题将配置compact,delete为过期的旧数据(即旧窗口),以避免表(即RocksDB)无限增长。
除了RocksDB,您还可以将内存存储区用于KTable不写入磁盘的存储区。该存储库还将具有一个changelog主题,该记录日志会出于容错原因跟踪对该存储库的所有更新。
如果您通过手动添加存储,builder.addStateStore()还可以添加RocksDB或内存存储。在这种情况下,您可以启用类似于a的容错更改日志KTable(请注意,在创建KTable时,在内部使用完全相同的API-即,a KTable是隐藏一些内部细节的高层抽象)。
对于缓存:这是在Kafka Streams中以及在商店(RocksDB或内存中)的顶部实现的,您可以为手动添加的“普通”商店(对于KTables)启用/禁用。比较https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html因此,缓存独立于RocksDB缓存。
| 归档时间: |
|
| 查看次数: |
3372 次 |
| 最近记录: |