Apache Kafkaの障害は、Kafkaクラスターまたはその一部のコンポーネントが障害を起こし、サービスの中断や劣化が発生するときに発生します。Kafkaは高スループット、障害耐性のデータストリーミングやメッセージングを処理するよう設計されていますが、インフラの障害、誤った設定、運用上の問題などさまざまな理由で失敗する可能性があります。
Kafka障害の原因
Brokerの障害
過剰なデータ負荷やオーバーサイズのハードウェアにより、Brokerが応答しなくなる、ハードドライブのクラッシュ、メモリの枯渇、またはBrokerネットワークの問題が発生します。
ZooKeeperの問題
Kafkaはクラスターメタデータとリーダー選出を管理するためにApache ZooKeeperを利用しています。ZooKeeperの障害(ネットワーク分断、誤った設定、リソースの枯渇など)はKafkaの動作を妨げる可能性があります。ZooKeeperの問題は、Apache Kafkaの後のバージョン3.5でKRaftモードに設定されたクラスターの場合には省略されることがあります。
トピックの誤った設定
十分なレプリケーションファクターや適切でないパーティションの設定は、Brokerの障害が発生した際にデータの損失やサービスの中断を引き起こす可能性があります。
ネットワーク分断
Broker間、クライアント間、またはZooKeeper間の通信障害が可用性を低下させたり、スプリットブレインのシナリオを引き起こす可能性があります。
設定ミス
ミス構成されたクラスター設定(保存ポリシー、レプリカ割り当てなど)は予期せぬ動作や障害を引き起こす可能性があります。
オーバーロード
プロデューサーまたはコンシューマートラフィックの急激な増加はクラスターを過負荷にさせる可能性があります。
データの破損
ディスクの問題や突然のシャットダウンによるKafkaログの破損は起動やデータの取得に問題を引き起こす可能性があります。
適切でないモニタリングとアラート
ディスク使用量の急増や長い待ち時間などの早期警告信号が認識されず対処されない場合、小さな問題が完全な障害につながる可能性があります。
Apache Kafkaのトピックと構成のバックアップは、ハードウェアの障害、ソフトウェアの問題、またはヒューマンエラーが発生した場合にデータと設定を復元できるようにするため重要です。 Kafkaにはトピックのバックアップに関する組み込みツールはありませんが、いくつかの方法を使ってこれを実現できます。
Kafkaトピックと構成のバックアップ方法
トピックと構成をバックアップするために複数の方法を遵守できます。
Kafkaコンシューマー
トピックからメッセージを読み取り、HDFS、S3、またはローカルストレージなどの外部ストレージに保存するためにKafka consumersを使用できます。ビルトインのkafka-console-consumer.sh
やカスタムのコンシューマースクリプトなど、信頼性の高いKafkaコンシューマーツールを使用すると、トピックからすべてのメッセージを最初のオフセットから消費することができます。この手順は簡単でカスタマイズ可能ですが、高スループットのトピックには大容量のストレージが必要であり、タイムスタンプやヘッダーなどのメタデータが失われる可能性があります。
Kafka Connect
オブジェクトストレージにトピックからのメッセージをストリーミングするために、Kafka Connectなどのツールを使用できます。 Kafka Connectをシンクコネクタ(例:S3シンクコネクタ、JDBCシンクコネクタなど)と共にセットアップし、特定のトピックから読み取り、バックアップ先に書き込むようにコネクタを構成できます。もちろん、Kafka Connectの追加のセットアップが必要です。
クラスタレプリケーション
Kafkaのミラーリング機能を使用すると、既存のKafkaクラスタのレプリカを管理できます。ソースクラスタからメッセージをKafkaコンシューマーを使用して消費し、そのメッセージを別のKafkaクラスタに再配信し、埋め込みKafkaプロデューサーを使用してバックアップとして機能させることができます。バックアップクラスタが冗長性のために別の物理的またはクラウドリージョンにあることを確認する必要があります。シームレスなレプリケーションと増分バックアップのサポートが可能ですが、バックアップクラスタの維持には追加の運用オーバーヘッドがかかります。
ファイルシステムレベルのコピー
ファイルシステムレベルのバックアップは、Kafkaブローカーから直接Kafkaログディレクトリをコピーするなど、Kafkaログディレクトリを特定して実行できます(server.properties
内のlog.dirs
)。この方法はオフセットとパーティションデータを保存することを可能にします。ただし、一貫性を確保し潜在的な問題を回避するためには、入念な復元プロセスが必要です。
Kafkaの設定とメタデータ
Kafka構成に関しては、トピックに関するメタデータ、アクセス制御(ACL)、すべてのブローカーからのserver.properties
ファイル、およびZooKeeperのデータディレクトリ(ZooKeeperの構成で定義されたdataDirパラメータにより)を指定できます。その後、出力をファイルに保存します。すべてのカスタム設定(例:log.retention.ms
、num.partitions
)を文書化する必要があります。組み込みスクリプトkafka-acls.sh
を使用すると、すべてのACLプロパティをフラットファイルにまとめることができます。
要点
上述の手法は、主にオンプレミスで展開されたクラスターおよびクラスターで構成された一桁のノードに適しています。ただし、運用ベストプラクティスを提供するマネージドサービスプロバイダーがプラットフォームを実行するため、問題の検出と修正を心配する必要はありません。
この記事を読むことで、オンプレミス展開でのApache Kafkaの障害に対処するための実践的な洞察と実証済みの戦略を得ることを願っています。
Source:
https://dzone.com/articles/avoid-kafka-outages-with-topic-and-configuration-backups