【问题标题】:Apache Kafka persist all dataApache Kafka 持久化所有数据
【发布时间】:2016-10-27 01:34:24
【问题描述】:

使用Kafka as an event store时,如何配置日志永不丢失数据(v0.10.0.0)?

我见过(旧的?)log.retention.hours,我一直在考虑使用compaction keys,但是kafka 是否有一个选项永远不会删除消息?

或者是为保留期设定一个高得离谱的价值的最佳选择?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    没有比使用高得离谱的保留期值更好的选择了。

    公平警告:使用无限留存可能会对您造成一点伤害。

    例如,默认行为只允许新订阅者从主题的开头或结尾开始,这至少从事件溯源的角度来看会很烦人。

    此外,如果大规模使用 Kafka(假设每秒数万条消息),高性能存储将大大受益,如果采用永久保留策略,其成本将高得离谱。

    仅供参考,Kafka 提供工具(例如 Kafka Connect)来轻松地将数据持久保存在廉价数据存储中。

    【讨论】:

    • 我不知道“仅从开始或结束”行为,这肯定是个问题。是否有解决方法来制作“阅读最后 100 条消息”之类的内容?
    • 据我所知,您最好的选择是根据某些标准过滤掉消息(我猜您的数据中有一个基于时间的字段?)。
    【解决方案2】:

    更新:It’s Okay To Store Data In Apache Kafka

    如果您将保留时间设置为“永远”,这显然是可能的 或在主题上启用日志压缩,然后将保留所有数据 时间。但我认为人们真正要问的问题是 这是否可行,以及更多是否可行 完全疯了。

    简短的回答是,这并不疯狂,人们一直这样做, 卡夫卡实际上是为这种用途而设计的。但首先,为什么 你可能想这样做吗?实际上有很多用例, 这里有一些:

    【讨论】:

    • 虽然这绝对是一篇有见地的文章,但我觉得它没有解决我对磁盘成本和实际数据重放的担忧。有这方面的信息吗?
    【解决方案3】:

    关心数据重放和永久消息磁盘成本的人,只是想分享一些东西。

    数据回放: 您可以将您的消费者消费者寻找到给定的偏移量。甚至可以查询给定时间戳的偏移量。然后,如果您的消费者不需要从一开始就知道所有数据,但数据的一个子集就足够了,您可以使用它。

    我使用 kafka java 库,例如:kafka-clients。看: https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#offsetsForTimes(java.util.Map)

    https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#seek(org.apache.kafka.common.TopicPartition,%20long)

    磁盘成本:

    您至少可以通过使用 Avro (https://avro.apache.org/docs/current/) 之类的东西并打开压缩来最大限度地减少磁盘空间的使用。

    也许有一种方法可以使用符号链接来分隔文件系统。但这只是一个未经尝试的想法。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2015-02-21
      • 2016-06-24
      • 2016-08-22
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多