Kafka Streams RocksDB large state



使用Kafka Streams时,可以在RocksDB中保持大状态吗?我们计划将RocksDB作为一个事件商店,在一段时间内举办数十亿场活动。

是的,你可以在那里存储很多状态,但有一些注意事项:

  • 整个状态也将在变更日志主题上复制,这意味着您的代理需要有足够的磁盘空间。请注意,KIP-405(分层存储(不会减轻这种情况,因为分层存储不适用于压缩主题
  • 正如@OneCricketer所提到的,如果发生崩溃,重建该州可能需要很长时间。但是,您可以通过多种方式缓解:
    • 使用持久存储并在可以访问同一磁盘的节点上重新启动应用程序(K8s中的StatefulSet+PersistentVolume有效(。
      • 在精确一次语义中,直到KIP-844在非干净关闭时实现,状态仍将从头开始重建。但一旦PR被合并,那么只有少量数据需要重放
    • 有备用副本。一旦kafka流实例崩溃,一旦使用者会话超时,它们就会启用故障转移

主要的限制是磁盘空间,所以当然可以,但如果应用程序因任何原因崩溃,您可能需要等待一段时间才能重新构建其状态。

最新更新