このトピックでは、E-MapReduce (EMR) 上の Kafka に関する運用上のよくある質問に回答します。ログ管理、コンポーネントの制御、エラーの診断、容量計画を扱います。
Kafka 関連コンポーネントの出力ログのクリーンアップ方法
Kafka コンポーネントの出力ログがディスク領域を過度に消費している場合は、ログディレクトリからログファイルを直接削除してください。
Kafka 関連のコンポーネントは、$LOG_DIR_ROOT (デフォルト:/mnt/disk1/log) 配下にログを保存します。各コンポーネントには専用のサブディレクトリがあります:
| コンポーネント | ログディレクトリ |
|---|---|
| Kafka | $LOG_DIR_ROOT/kafka |
| Cruise Control | $LOG_DIR_ROOT/cruise-control |
| Schema Registry | $LOG_DIR_ROOT/kafka-schema-registry |
| REST Proxy | $LOG_DIR_ROOT/kafka-rest-proxy |
該当するディレクトリに移動し、不要なログファイルを削除してください。
Kafka Manager コンポーネントの出力ログのクリーンアップ方法
$LOG_DIR_ROOT/kafka-manager (デフォルト:/mnt/disk1/log/kafka-manager) に移動し、ログファイルを削除してください。
Kafka Manager コンポーネントの停止可否
はい。Kafka は読み書きの操作に Kafka Manager を必要としないため、停止しても Kafka サービスには影響しません。
他の Kafka 管理プラットフォームを統合していない場合、Kafka Manager は唯一の管理インターフェイスであるため、実行したままにしておいてください。代替手段があり、Kafka Manager が不要になった場合は、EMR コンソールのクラスターの [サービス] タブから停止してください。
エラー "Replication factor: 1 larger than available brokers: 0" の解決方法
このエラーには、次の 2 つの原因が考えられます:
-
ブローカーのプロセスが終了した。 ブローカーのログを確認して障害原因を特定し、ブローカーのプロセスを再起動してください。
-
ZooKeeper ホストの設定が正しくない。 EMR コンソールで、[Cluster Zookeeper Hosts] パラメーターを
kafka.manager.zookeeper.hostsの値と一致するように更新してください。
エラー "java.net.BindException: Address already in use (Bind failed)" の解決方法
Java Management Extensions (JMX) ポートがすでに使用されています。コマンドを実行する前に、別の JMX ポートを指定してください:
JMX_PORT=10101 kafka-topics.sh --bootstrap-server core-1-1:9092 --list
エラー "current leader's lastest offset xxxx is less than replica's lastest offset xxxxxx" の解決方法
このエラーは、現在のリーダーがレプリカより遅れていることを示しており、クリーンなリーダー選出がブロックされます。
先に、すべてのデータが消費済みであること、またはデータ損失を許容できることを確認してください。その後、次の手順を実行してください:
-
Kafka ブローカーのコンポーネントで、
unclean.leader.election.enableをtrueに設定してください。 -
Kafka ブローカーのコンポーネントを再起動してください。
-
再起動後、
unclean.leader.election.enableをfalseに戻してください。
ログディレクトリにある Kafka データ保存用ディスクがフルになった場合の対処
ログディレクトリのディスクがフルになると、ログディレクトリはオフラインになります。復旧するには、「Perform O\&M operations when the disk space of an EMR Kafka cluster is full」の手順に従ってください。
エラー "Too many open files" の解決方法
このエラーは、オープンされているファイルディスクリプタ数がシステム上限を超えた場合に発生します。通常、多数のパーティションまたはネットワーク接続が原因です。
/etc/security/limits.conf でファイルディスクリプタの上限を引き上げてください。ファイルの末尾に次の行を追加するか、既存の行を更新してください:
* soft nofile <new-limit>
* hard nofile <new-limit>
<new-limit> をワークロードに適した値に置き換えてください。ファイルを保存した後、影響を受けるコンポーネントを再起動してください。
Kafka トピックに必要なパーティション数の見積もり方法
次のアプローチを使用してください:
-
パーティションあたりのプロデューサーのスループットを測定する。 ストレステストを実行し、目標レイテンシーの範囲内で単一パーティションが維持できるスループット (MB/s) を取得してください。
-
想定されるトラフィックを見積もる。 トピックが処理する必要があるピーク時の取り込みレートを決定してください。
-
必要なパーティション数を算出する。 測定したパーティションあたりのスループットと、想定されるビジネストラフィックに基づいて、トピックに必要なパーティション数を算出してください。
-
コンシューマーの並列度を考慮して調整する。 パーティション数が多いほど、より多くのコンシューマーが並列に読み取れます。コンシューマーが遅れている場合は、消費レイテンシーの目標を満たすようにパーティション数を増やしてください。