【问题标题】:Recovering Kafka Data from .log Files从 .log 文件中恢复 Kafka 数据
【发布时间】:2023-03-30 17:09:01
【问题描述】:

我有一个最近崩溃的 1 节点 kafka。我能够从 /tmp/kafka-logs/mytopic-0/ 抢救 .log 和 .index 文件,并且我已将这些文件移动到不同的服务器并在其上安装了 kafka。

有没有办法让新的 kafka 服务器为这些 .log 文件中包含的数据提供服务?

更新:

我可能没有以正确的方式做到这一点,但这是我已经厌倦的:

  1. 在新的 kafka 服务器上创建了一个名为 recovermytopic 的主题 停止卡夫卡
  2. 将所有 .log 文件移至/tmp/kafka-logs/recovermytopic-0
  3. 重启卡夫卡
  4. 似乎对于每个 .log 文件,kafka 生成了一个 .index 文件,看起来很有希望,但在创建索引文件后,我看到了以下消息:

    WARN Partition [recovermytopic,0] on broker 0: No checkpointed highwatermark is found for partition [recovermytopic,0] (kafka.cluster.Partition)  
    INFO [ReplicaFetcherManager on broker 0] Removed fetcher for partitions [recovermytopic,0] (kafka.server.ReplicaFetcherManager)
    

当我尝试使用 kafka-console-consumer 检查主题时,kafka 服务器说:

INFO Closing socket connection to /127.0.0.1. (kafka.network.Processor)

没有消息被消费..

【问题讨论】:

  • 重新排队是什么意思?
  • @nautilus 让新的 kafka 实例提供日志文件中的消息。改写问题,谢谢!
  • 尝试创建一个具有相同名称和相同分区数的主题。可以使用 OffsetResetStrategy.EARLIEST 重置从头开始消费信息的消费者
  • @nautilus 谢谢,刚刚试过,在消费者方面,我收到了这个错误:Failed to find leader for Set([mytopic,0])
  • 创建消费者时会发生这种情况?你用的是什么版本? broker和zookeeper已经正确启动了吗?

标签: apache-kafka


【解决方案1】:

Kafka 附带一个 DumpLogSegments 工具,该工具将从 Kafka 数据日志文件中提取消息(以及偏移量等):

$KAFKA_HOME/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --deep-iteration --print-data-log --files mytopic-0/00000000000000132285.log > 00000000000000132285_messages.out

输出会根据您使用的 Kafka 版本而有所不同,但使用 sed 或其他工具应该很容易提取消息键和值。然后可以使用 kafka-console-producer.sh 工具或以编程方式将消息重播到您的 Kafka 集群中。

虽然这种方法有点迂回,但我认为它比试图让代理从其他地方获得的数据日志文件开始更透明/可靠。我已经使用从 0.9 一直到 2.4 的各种版本的 Kafka 测试了 DumpLogSegments 工具。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多