Kafka Streams:是否可以对 state stores 制定 "compact,delete" 政策?

Kafka Streams: Is it possible to have "compact,delete" policy on state stores?

Kafka Streams 状态存储默认为 "compact"。是否可以在状态存储中使用保留策略设置 "compact,delete"?

如果您使用默认的 RocksDBStore,可以选择将 CompactionStyle 设置为 FIFO:

FIFO compaction style is the simplest compaction strategy. It is suited for keeping event log data with very low overhead (query log for example). It periodically deletes the old data, so it's basically a TTL compaction style.

然后使用TTL:

A new option, compaction_options_fifo.ttl, has been introduced for this to delete SST files for which the TTL has expired. This feature enables users to drop files based on time rather than always based on size, say, drop all SST files older than a week or a month.

RocksDB FIFO doc

要实际设置 FIFO,您必须实现 RocksDBConfigSetter 并将其设置为配置 属性:rocksdb.config.setter

是的,可以为主题配置保留和压缩,Kafka Streams 将此设置用于窗口 KTables。

如果你真的想设置这个,你可以在创建后手动更新相应的更改日志主题配置。

但是,为更改日志主题设置主题保留时间只会从主题中删除数据。本地状态存储中的数据未删除。 State store 不提供 TTL,RocksDB 的 TTL 设置无法启用(出于技术原因,我们希望最终能够解决)。

如果您想彻底删除数据,您应该使用将从存储中删除数据的逻辑删除消息以及更改日志主题(而不是使用保留时间)。