apache-kafka - 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()
我希望键值存储在内存中工作,直到提交时写入。看起来不仅每次更新都会进行写入,而且还会进行反序列化的读取。有人可以解释一下这是如何工作的,我是否应该关注性能?
解决方案
即使所有数据都在内存中,您对数据始终(反)序列化的观察是正确的。Kafka Streams 中的所有存储都基于byte[]
数组,以便进行适当的内存管理。反序列化的堆上 Java 对象的大小未知,使内存管理变得困难并且内存使用不可预测。
您的存储仍将在内存中工作,并且仅在必要时和提交时才会写入磁盘。
推荐阅读
- java - 如果在同步块内完成简单的写入,那么在另一个同步块中的读取是一致的吗?
- mql4 - MQL4 StringToDouble 改变变量的值?
- python - 如何在 Django-rest-Framework 中获取相关对象的列表
- javascript - 为什么我的函数对平均工资问题返回不正确的答案
- r - 按时间创建图表
- python-3.x - Python 错误:RuntimeError:无法访问 /dev/mem。尝试以 root 身份运行!(尝试了所有建议)
- user-defined-functions - Google Data Studio - 用户定义函数 (UDF) 的使用
- java - 为什么我的倒数计时器没有切换到我的其他活动?
- python - 使用 PyNN 发送尖峰时出错 - SpiNNaker
- react-native - 找不到名称为“focus”的命令