kci*_*ski 8 apache-kafka apache-kafka-streams
我注意到,该aggregate()阶段似乎在序列化/反序列化每个元素,即使它定期发出结果。
streamBuilder
.stream(inputTopic, Consumed.`with`(keySerde, inputValueSerde))
.groupByKey(Serialized.`with`(keySerde, inputValueSerde))
.aggregate(
() => Snapshot.Initial(),
(_, event, prevSnap: Snapshot) => {
// ...
},
Materialized.as(stateStoreName).withValueSerde(snapshotSerde)
)
.toStream()
Run Code Online (Sandbox Code Playgroud)
我希望键值存储可以在内存中工作,直到提交提交为止。看起来不仅为每个更新进行写操作,而且还存在反序列化的读操作。有人可以解释一下这是如何工作的,如果我应该关注表现吗?
即使所有数据都在内存中,您对数据始终(反)序列化的观察是正确的。Kafka Streams 中的所有存储都基于byte[]数组,以允许正确的内存管理。反序列化的堆上 Java 对象的大小未知,导致内存管理困难且内存使用情况不可预测。
您的存储仍将在内存中工作,并且仅在必要时和提交时写入磁盘。
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |