我们正面临着一个问题,我们正在使用kafka持久状态存储,并且它经常用完空间(8gb),因此我们正在考虑迁移到内存状态存储中
Stores.persistenKeyValueStore(“ name”);
收件人
Stores.inMemoryKeyValueStore(“ name”);
我们是否要更改为内存中的几个问题
切换到内存中还有其他缺点吗?
请注意,我们具有流应用程序(KTable),并且具有大约200万条唯一消息。
每个味精的大小约为2kb 频率500msg / sec平均
答案 0 :(得分:1)
(8gb)空间不足,因此我们正在考虑移至内存状态存储区
似乎切换到内存存储会倒退一步? 8GB也相当小-为什么您有这么小的磁盘?
如果代理/消费者重启,我们是否会丢失任何数据?
不。持久存储只是增加启动时间和保持更大状态(因为它们可能溢出到磁盘)的能力的一种优化。持久存储和内存存储均由Kafka群集中的changelog主题支持,以实现容错。为了获得适当的容错能力,您需要在Kafka Streams上应用相同的配置,以及与商店类型无关的changelog主题。
如果从内存中清除了旧数据,消费者如何获取先前的数据,它是否从代理获取数据?
如果您使用内存存储,则客户端将始终保留数据集的完整副本。因此,您的数据集必须适合主内存。写入Kafka群集仅用于容错。在正常操作期间,Kafka Streams仅写入更改日志主题。仅当迁移任务并且需要重建存储时,才会读取Changelog主题。
切换到内存中还有其他缺点吗?
如前所述,缺点是: -您失去了滚动重启的本地状态,并且需要从changelog主题中恢复状态,从而增加了启动时间 -您的状态必须适合主内存