在使用Kafka Streams时,可以在RocksDB中保留大状态吗?我们计划使用RocksDB作为一个事件存储库,在最初的时间内举办数十亿次活动。
t98cgbkg1#
主要的限制是磁盘空间,所以这是可以做到的,但如果应用程序因为任何原因崩溃,你可能需要等待一段时间,等待应用程序重建其状态。
o75abkj42#
我不能评论,所以我会在这里“回答”。
是的,您可以在那里存储许多状态,但有一些考虑事项:
整个状态也将在ChangeLog主题上复制,这意味着您的代理将需要有足够的磁盘空间来存储它。请注意,KIP-405(分层存储)不会缓解这一问题,因为分层存储不适用于压缩主题。
正如@OneCricketeer提到的那样,如果发生崩溃,重建国家可能需要很长时间。但是,您可以通过多种方式缓解它:
使用持久化存储,在有权访问同一块磁盘的节点上重启应用程序(K8S中的StatefulSet+PersistentVolume有效)。
在只有一次的语义中,在不干净的关机时执行KIP-844之前,状态仍将从头开始重建。但一旦该PR被合并,那么只需要重放一小部分数据。
有备用副本。一旦Kafka Streams示例崩溃,它们将在消费者会话超时到期时立即启用故障转移。
2条答案
按热度按时间t98cgbkg1#
主要的限制是磁盘空间,所以这是可以做到的,但如果应用程序因为任何原因崩溃,你可能需要等待一段时间,等待应用程序重建其状态。
o75abkj42#
我不能评论,所以我会在这里“回答”。
是的,您可以在那里存储许多状态,但有一些考虑事项:
整个状态也将在ChangeLog主题上复制,这意味着您的代理将需要有足够的磁盘空间来存储它。请注意,KIP-405(分层存储)不会缓解这一问题,因为分层存储不适用于压缩主题。
正如@OneCricketeer提到的那样,如果发生崩溃,重建国家可能需要很长时间。但是,您可以通过多种方式缓解它:
使用持久化存储,在有权访问同一块磁盘的节点上重启应用程序(K8S中的StatefulSet+PersistentVolume有效)。
在只有一次的语义中,在不干净的关机时执行KIP-844之前,状态仍将从头开始重建。但一旦该PR被合并,那么只需要重放一小部分数据。
有备用副本。一旦Kafka Streams示例崩溃,它们将在消费者会话超时到期时立即启用故障转移。