このツールは、ログ ファイルを解析し、その内容をコンソールにダンプするのに役立ちます。これは、一見破損したログ セグメントをデバッグするのに役立ちます。
Kafka のさまざまなログ ファイル ( 、、など) は、kafka-dump-logs.sh
スクリプトを使用して解析できます。.timeindex
.index
.log
公式の Kafka ドキュメントでは、次のようにkafka-dump-log
説明います。
ダンプ ログ ツール
この
kafka-dump-log
ツールを使用して、クラスター メタデータ ディレクトリのログ セグメントとスナップショットをデバッグできます。ツールは提供されたファイルをスキャンし、メタデータ レコードをデコードします。たとえば、次のコマンドは、最初のログ セグメントのレコードをデコードして出力します。> bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000000.log
このコマンドは、クラスター メタデータ スナップショットの recrod をデコードして出力します。
> bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000100-0000000001.checkpoint
kafka-dump-logs.sh
パラメータは次のとおりです。
オプション | 説明 |
---|---|
--deep-iteration |
設定されている場合、浅い反復ではなく深い反復を使用します。print-data-log が有効な場合、自動的に設定されます。 |
--files <String: file1, file2, ...> |
必須: ダンプするデータとインデックス ログ ファイルのコンマ区切りリスト。 |
--help |
使用情報を印刷します。 |
--index-sanity-check |
設定されている場合、コンテンツを出力せずにインデックスの健全性をチェックするだけです。これは、インデックスの再構築が必要かどうかを判断するためにブローカの起動時に実行されるチェックと同じです。 |
--key-decoder-class [String] |
設定されている場合、キーを逆シリアル化するために使用されます。このクラスは、kafka.serializer を実装する必要があります。デコーダーの特性。カスタム jar は kafka/libs ディレクトリで利用できるはずです。(デフォルト: kafka.serializer.StringDecoder) |
--max-message-size <Integer: size> |
最大メッセージのサイズ。(デフォルト: 5242880) |
--offsets-decoder |
設定されている場合、ログ データは __consumer_offsets トピックからのオフセット データとして解析されます。 |
--print-data-log |
設定されている場合、データ ログのダンプ時にメッセージの内容を出力します。デコーダ オプションが指定されている場合は、自動的に設定されます。 |
--transaction-log-decoder |
設定されている場合、ログ データは __transaction_state トピックからのトランザクション メタデータとして解析されます。 |
--value-decoder-class [String] |
設定されている場合、メッセージの逆シリアル化に使用されます。このクラスは、kafka シリアライザーを実装する必要があります。デコーダーの特性。カスタム jar は kafka/libs ディレクトリで利用できるはずです。(デフォルト: kafka.serializer.StringDecoder) |
--verify-index-only |
設定されている場合、その内容を印刷せずにインデックス ログを確認するだけです。 |
--version |
Kafka のバージョンを表示します。 |
Kafka ログをバッチでダンプするシェル スクリプト (/home/myself/src-logs
はログ ディレクトリ、/home/myself/dump-logs
は結果ディレクトリ):
#!/bin/bash
# 指定遍历的目录
dir="/home/myself/src-logs"
# 如果目录不存在或不是目录,则输出错误信息并退出
if [ ! -d "$dir" ]; then
echo "Error: $dir is not a directory"
exit 1
fi
# 遍历目录找到所有后缀为 .log 的文件,并执行给定的命令
for file in "$dir"/*.log; do
if [ -f "$file" ]; then
sh /opt/kafka/bin/kafka-dump-log.sh --files "$file" --print-data-log > "/home/myself/dump-logs/${file##*/}"
fi
done