【问题标题】:Kafka Streams RocksDB large stateKafka Streams RocksDB 大状态
【发布时间】:2022-10-06 02:45:39
【问题描述】:

使用 Kafka Streams 时可以在 RocksDB 中保持大状态吗?我们计划将 RocksDB 用作事件存储,以无限时间保存数十亿个事件。

    标签: events apache-kafka stream apache-kafka-streams rocksdb


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。应用崩溃时是否总是会进行恢复?即使我使用持久状态存储?
    • 应该,因为不能保证状态存储拥有该主题的最新偏移量
    【解决方案2】:

    我无法发表评论,所以我会在这里“回答”。

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2019-07-03
      • 2019-09-05
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多