Ant*_*nay 1 apache-kafka apache-kafka-streams
我Materialized.as()在 Kafka 流字数统计应用程序中有一个状态存储(使用)。
根据我的理解,状态存储在 Kafka 内部主题中维护。
如果可用,请与解决方案的来源一起发布。
状态存储是否可以拥有无限的键值对,或者它们受基于 log.retention 策略或 log.segment.bytes 的 kafka 主题规则的约束?
是的,状态存储可以有无限的键值对 = 事件(或“消息”)。好吧,当然,Kafka 中的本地应用程序存储空间和远程存储空间允许(后者用于将数据持久存储在您的状态存储中)。
您的应用程序的状态存储远程保存在压缩的内部 Kafka 主题中。压缩意味着 Kafka 会定期从存储中清除相同事件键(例如 Bob 的旧帐户余额)的旧事件。但是压缩主题不会删除每个事件键的最新事件(例如,Bob 的当前帐户余额)。压缩主题中将存储多少这样的“唯一”键值对没有上限。
我设置了 log.retention.ms=60000 并期望状态存储值在一分钟后重置为 0。但我发现它并没有发生,我仍然可以从状态存储中看到值。
log.retention.ms当主题配置为压缩时不使用 ( log.cleanup.policy=compact)。有关详细信息,请参阅现有 SO 问题日志压缩以保留每个键的一条消息以获取详细信息,包括为什么压缩不会立即发生(简而言之,这是因为压缩对分区段文件进行操作,它不会触及最新的段文件,并且该文件中的每个事件键可以是多个事件)。
注意:您现在可以将配置设置log.cleanup.policy为压缩和基于时间/体积的保留的组合log.cleanup.policy=compact,delete(有关详细信息,请参阅KIP-71)。但一般来说,除非您真的知道自己在做什么,否则您不应该摆弄这个设置——默认值是您 99% 的时间所需要的。
kafka 是完全清除日志还是保留 SNAPSHOT 以防日志压缩主题?“提交段”是什么意思?
我不明白这个问题,不幸的是。:-) 也许我之前的答案和参考链接已经涵盖了您的需求。我能说的是,不,Kafka 并没有完全清除日志。压缩对主题分区的段文件进行操作。您可能需要详细了解压缩的工作原理,为此我建议写一篇文章,如https://medium.com/@sunny_81705/kafka-log-retention-and-cleanup-policies-c8d9cb7e09f8,以防 Apache Kafka文档还不够清楚。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |