Apache Kafka消息被归档-是否有可能检索消息



我们使用Apache Kafka,每天处理超过3000万条消息。我们的保留政策是"30%"。天。然而,在30天之前,我们的消息被存档了。

我们有办法恢复被删除的消息吗?是否可以重置"起始索引"?到旧索引检索数据通过查询?

我们还有其他选择吗?

如果我们有"磁盘备份",我们可以用它来检索数据吗?

谢谢

我假设你的消息被Kafka集群删除了。

一般情况下,没有-如果记录由于持续时间/大小相关的策略而被删除,则它们已被删除。

理论上,如果你可以访问备份,你可以将Kafka数据日志文件移动到服务器目录,但行为是未定义的。尝试与一个新的集群无限大小/时间政策(所以没有立即被清除)可能会奏效,让你消费了。

根据我的经验,在分层存储普遍可用之前,没有免费/简单的方法来恢复数据(通过Kafka消费者协议)。

例如,你可以使用一些Kafka Connect Sink连接器来写一些外部的,更持久的存储。那么,您想编写一个作业来抓取这些数据吗?当然,您可以有一个STRING topic, INT timestamp, BLOB key, BLOB value的SQL数据库表,并可能跟踪"消费者偏移量";分开吗?如果你使用这种设计,那么Kafka似乎并不真正有用,因为当你可以向Kafka集群添加更多存储时,你会重新实现它的各个部分。

是否可以重置"起始索引"?到旧索引检索数据通过查询?

这是auto.offset.reset=earliestkafka-consumer-groups --reset-offsets --to-earliest将做的,

有"磁盘备份",我们可以使用吗

注意,可能是。例如,您可以将旧的代理日志段复制到服务器中,但据我所知,没有任何工具可以追溯地发现新的"低水印"。(也许代理会在重启时发现,我还没有测试过)。我认为,您需要为每个代理手动复制此数据,因为副本不知道旧的段(同样,可能在集群完全重启之后,它们可能会知道)。
另外,除非你停止所有消费者并重置它们,否则消费者偏移量已经读取了远远超过该数据的数据。

我也不确定如果在段文件中有间隙会发生什么。例如,你当前最老的段是N,你复制了N-2,但没有复制N-1…然后您可能会遇到错误,或者消费者将简单地应用auto.offset.reset策略,并查找下一个可用的偏移量或主题的末尾

最新更新