我有一个最近崩溃的1节点kafka。我能够从/tmp/kafka-logs/mytopic-0/
抢救.log和.index文件,我已将这些文件移到另一台服务器并在其上安装了kafka。
有没有办法让新的kafka服务器提供这些.log文件中包含的数据?
更新
我可能没有以正确的方式做到这一点,但这是我已经厌倦了:
/tmp/kafka-logs/recovermytopic-0
似乎对于每个.log文件,kafka都生成了一个.index文件,看起来很有前景但是在创建了索引文件之后,我看到了下面的messeages:
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)
没有消息被消耗..
答案 0 :(得分: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群集中。
尽管此方法有点round回,但我认为它比尝试让代理从其他地方获取的数据日志文件开始更透明/更可靠。我已经使用从0.9一直到2.4的各种版本的Kafka测试了DumpLogSegments
工具。