使用Kafka as an event store时,如何配置日志永远不会丢失数据(v0.10.0.0)?
我见过(旧的?)log.retention.hours
,我一直在考虑使用compaction keys,但是kafka是否只有一个选项永远不会删除邮件?
或者是保留期间可取的高价值的最佳选择?
答案 0 :(得分:4)
您没有更好的选择,在保留期内使用可笑的高值。
公平警告:使用无限保留可能会对您造成伤害。
例如,默认行为只允许新的帖子从主题的开头或结尾开始,这在事件采购视角中至少会令人讨厌。
此外,Kafka如果大规模使用(比方说每秒数万条消息),对于高性能存储会有很大好处,而且永久保留策略的成本会高得离谱。
仅供参考,Kafka提供了工具(例如Kafka Connect),可以轻松地在廉价数据存储上保存数据。
答案 1 :(得分:2)
更新:It’s Okay To Store Data In Apache Kafka
显然,只要将保留设置为“永久”,这是可能的 或者对主题启用日志压缩,然后将为所有人保留数据 时间。但我认为人们真正要问的问题是,更少 这是否有效,更多是否有效 完全疯了。
简短的回答是,这不是疯了,人们总是这样做, 而卡夫卡实际上是为这种用途而设计的。但首先,为什么 你想要这样做吗?实际上有很多用例, 这里有几个:
答案 2 :(得分:1)
人们关心数据重放和永久消息的磁盘成本,只是想分享一些东西。
数据重播: 您可以根据给定的偏移量寻找您的消费者消费者。甚至可以在给定时间戳的情况下查询偏移量。然后,如果您的消费者不需要从一开始就知道所有数据,但是数据的子集就足够了,您可以使用它。
我使用kafka java libs,例如:kafka-clients。看到: https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#offsetsForTimes(java.util.Map)
磁盘费用:
您可以使用Avro(https://avro.apache.org/docs/current/)和打开的比赛等方式,最大限度地减少磁盘空间的使用。
也许有一种方法可以使用符号链接来分隔文件系统。但这只是一个未经过尝试的想法。