Apache kafka Apache Kafka:保留时间长,而不是快速读取最后一个值
亲爱的阿帕奇·卡夫卡的朋友们: 我有一个用例,我正在寻找一个优雅的解决方案: 数据以卡夫卡主题的相对较高比率发布。有两个相互竞争的要求Apache kafka Apache Kafka:保留时间长,而不是快速读取最后一个值,apache-kafka,Apache Kafka,亲爱的阿帕奇·卡夫卡的朋友们: 我有一个用例,我正在寻找一个优雅的解决方案: 数据以卡夫卡主题的相对较高比率发布。有两个相互竞争的要求 所有记录应保存7天(由min.Compression.lag配置) 应用程序应在初始化阶段读取主题中的“最后状态” 启用日志压缩是为了使“最后状态”在主题中可用。 现在问题来了。如果应用程序希望从主题中初始化自身,它必须读取大量记录才能获得所有键的最后状态(必须处理整个主题内容)。但这在记录数量上是不可能的 创意 流式处理将主题的数据流到相应的短期主题中,该
- 所有记录应保存7天(由min.Compression.lag配置)
- 应用程序应在初始化阶段读取主题中的“最后状态”
欢迎任何贡献。谢谢大家。如果您不能严格保证每个密钥的更新频率,您就不能按照您的建议执行任何其他操作 为了避免下游应用程序无法获得新更新的风险(因为数据复制作业暂停),我建议只从短期主题引导应用程序,然后让它从原始主题消费。为了不错过任何更新,您可以按如下方式同步切换:
这样,您可能会阅读一些消息两次,但不会丢失任何更新。对我来说,您提到的两个要求以及对新消费者的要求并不相互竞争。事实上,我不认为你有任何理由在你的主题中保留一个过期键的消息7天,因为
- 新的消费者只对密钥的最新消息感兴趣
- 已经存在的消费者将在1小时内处理该消息(根据您的评论)
这样,新消费者将(几乎)只读取每个键的最新消息。如果这还不够,您可以尝试增加消费群体的分区和消费线程。是否使用
min.compression.lag
config获取“7天数据”?--另外,对于短期主题,您为什么说您使用1小时的保留时间:如果此短期主题没有完全压缩--否则您可能会失去初始状态?@MatthiasJ.Sax是的,我使用min.compression.lag
。我使用1小时,因为数据量可以处理。我不希望丢失任何最新的关键数据。据我所知,最后一个密钥的保留是有保证的,并且独立于min.comaction.lag。我总是期望收到肮脏的信息;不确定“完全压缩”是什么意思我不希望丢失任何数据。——但你没有保证。所谓“完全压实”,我的意思是只使用原木压实(nomin.compression.lag
);当然,始终存在未压缩的活动段,但如果减少段大小和段滚动间隔(或max.compression.lag
),则应接近“完全压缩”主题(即,没有重复的键)。流式处理是潜在的错误源。如果暂时失败,应用程序将不再接收最新状态。
——为什么会有风险?您只使用“短期”主题进行引导,对吗?短期主题可能用于引导,也用于接收所有其他数据。我认为,只在引导时阅读它,然后切换到大的主题,看看是否有新的东西不会给我带来好处。谢谢你的建议。这并没有让事情变得更简单(对消费者而言),但至少我没有忽略任何更好地支持它的概念。我们似乎选择了短期->长期方向解决方案。在这种情况下,消费者不需要更改其引导过程(他们只处理短期
主题);如果流式传输到LongTerm
主题失败了一段时间,则存在数据丢失的风险;但是,由于这是一个卡夫卡过程,我们认为它运行得足够稳定。制作人是否可以将相同的数据发送到两个主题,每个主题为不同类型的客户服务?Cop