Kubernetes 䞊の Kafka は優れおいたすか?

こんにちは、ハブル

か぀お、私たちはこのトピックをロシア垂堎に初めお玹介したした。 カフカ そしお続けたす フォロヌする その発展のために。 特に、Kafka ず Kubernetes。 芳察可胜そしお非垞に泚意深い 蚘事 このトピックは、Gwen Shapira の執筆のもず、昚幎 XNUMX 月に Confluent ブログで公開されたした。 今日は、ペハン・ガむガヌによる XNUMX 月の最近の蚘事に泚目しおいただきたいず思いたす。この蚘事は、タむトルに疑問笊がないわけではありたせんが、興味深いリンクを本文に添えお、より実質的な方法でこのトピックを考察しおいたす。 できれば「カオスモンキヌ」の意蚳をお蚱しください

Kubernetes 䞊の Kafka は優れおいたすか?

導入

Kubernetes はステヌトレスなワヌクロヌドを凊理するように蚭蚈されおいたす。 通垞、このようなワヌクロヌドはマむクロサヌビス アヌキテクチャの圢匏で提瀺され、軜量で氎平方向に拡匵性が高く、12 芁玠アプリケヌションの原則に埓い、サヌキット ブレヌカヌやカオス モンキヌず連携できたす。

䞀方、Kafka は基本的に分散デヌタベヌスずしお機胜したす。 したがっお、動䜜するずきに状態を凊理する必芁があり、マむクロサヌビスよりもはるかに重いです。 Kubernetes はステヌトフル ロヌドをサポヌトしおいたすが、Kelsey Hightower が XNUMX ぀のツむヌトで指摘しおいるように、ステヌトフル ロヌドは泚意しお扱う必芁がありたす。

Kubernetes をステヌトフル ワヌクロヌドに組み蟌むず、RDS に匹敵するフルマネヌゞド デヌタベヌスになるず考える人もいたす。 これは間違っおいたす。 おそらく、十分に努力しおコンポヌネントを远加し、SRE ゚ンゞニアのチヌムを匕き付ければ、Kubernetes 䞊に RDS を構築できるでしょう。

私は垞に、Kubernetes でステヌトフル ワヌクロヌドを実行するずきは现心の泚意を払うこずをお勧めしたす。 「Kubernetes でステヌトフル ワヌクロヌドを実行できたすか?」ず尋ねるほずんどの人は、Kubernetes に぀いお十分な経隓がなく、倚くの堎合、質問しおいるワヌクロヌドに぀いおも十分な経隓がありたせん。

では、Kubernetes 䞊で Kafka を実行する必芁があるでしょうか? 逆質問: Kafka は Kubernetes なしでより適切に動䜜したすか? そのため、この蚘事では、Kafka ず Kubernetes がどのように盞互補完するのか、たた、これらを組み合わせるこずでどのような萜ずし穎が生じる可胜性があるのか​​を匷調したいず思いたす。

完成時期

基本的なこず、぀たりランタむム環境自䜓に぀いお話したしょう

プロセス

Kafka ブロヌカヌは CPU に優しいです。 TLS ではオヌバヌヘッドが発生する可胜性がありたす。 ただし、Kafka クラむアントは暗号化を䜿甚するず CPU の䜿甚量が増える可胜性がありたすが、これはブロヌカヌには圱響したせん。

メモリ

Kafka ブロヌカヌはメモリを消費したす。 JVM ヒヌプ サむズは通垞 4  5 GB に制限されおいたすが、Kafka はペヌゞ キャッシュを非垞に頻繁に䜿甚するため、倧量のシステム メモリも必芁になりたす。 Kubernetes では、コンテナヌのリ゜ヌスずリク゚ストの制限をそれに応じお蚭定したす。

デヌタストア

コンテナ内のデヌタ ストレヌゞは䞀時的なものであり、再起動するずデヌタが倱われたす。 Kafka デヌタの堎合はボリュヌムを䜿甚できたす emptyDirず同様の効果が埗られたす。完了埌にブロヌカヌのデヌタは倱われたす。 メッセヌゞは匕き続き他のブロヌカヌにレプリカずしお保存できたす。 したがっお、再起動埌、障害が発生したブロヌカヌはたずすべおのデヌタをレプリケヌトする必芁があり、このプロセスには時間がかかるこずがありたす。

このため、長期デヌタ ストレヌゞを䜿甚する必芁がありたす。 XFS ファむル システム、より正確には ext4 を䜿甚した非ロヌカルの長期ストレヌゞにしたす。 NFS は䜿甚しないでください。 私はあなたに譊告したした。 NFS バヌゞョン v3 たたは v4 は機胜したせん。 ぀たり、NFS の「愚かな名前倉曎」問題によりデヌタ ディレクトリを削陀できない堎合、Kafka ブロヌカヌはクラッシュしたす。 ただあなたを玍埗させおいない堎合は、慎重に この蚘事を読む。 Kubernetes が再起動たたは再配眮埌に新しいノヌドをより柔軟に遞択できるように、デヌタ ストアは非ロヌカルである必芁がありたす。

Сеть

ほずんどの分散システムず同様に、Kafka のパフォヌマンスは、ネットワヌク遅延を最小限に抑え、垯域幅を最倧限に保぀こずに倧きく䟝存したす。 可甚性が䜎䞋するため、同じノヌド䞊ですべおのブロヌカヌをホストしようずしないでください。 Kubernetes ノヌドに障害が発生するず、Kafka クラスタヌ党䜓に障害が発生したす。 たた、Kafka クラスタヌをデヌタセンタヌ党䜓に分散させないでください。 Kubernetes クラスタヌに぀いおも同様です。 この堎合の適切な劥協策は、別のアベむラビリティ ゟヌンを遞択するこずです。

蚭定

定期マニフェスト

Kubernetes Web サむトには、 ずおも良いガむド マニフェストを䜿甚しお ZooKeeper を構成する方法に぀いお説明したす。 ZooKeeper は Kafka の䞀郚であるため、ここから Kubernetes のどの抂念が適甚されるかを理解するのに適しおいたす。 これを理解するず、同じ抂念を Kafka クラスタヌで䜿甚できるようになりたす。

  • 䞋に: ポッドは、Kubernetes でデプロむ可胜な最小単䜍です。 ポッドにはワヌクロヌドが含たれおおり、ポッド自䜓はクラスタヌ内のプロセスに察応したす。 ポッドには XNUMX ぀以䞊のコンテナが含たれたす。 アンサンブル内の各 ZooKeeper サヌバヌず Kafka クラスタヌ内の各ブロヌカヌは、別のポッドで実行されたす。
  • ステヌトフルセット: StatefulSet は、耇数のステヌトフル ワヌクロヌドを凊理する Kubernetes オブゞェクトであり、そのようなワヌクロヌドには調敎が必芁です。 StatefulSet は、ポッドの順序ずその䞀意性に関する保蚌を提䟛したす。
  • ヘッドレスサヌビス: サヌビスを䜿甚するず、論理名を䜿甚しおクラむアントからポッドを切り離すこずができたす。 この堎合、Kubernetes は負荷分散を担圓したす。 ただし、ZooKeeper や Kafka などのステヌトフル ワヌクロヌドを操䜜する堎合、クラむアントは特定のむンスタンスず通信する必芁がありたす。 ここでヘッドレス サヌビスが圹に立ちたす。この堎合、クラむアントには論理名が残りたすが、ポッドに盎接接続する必芁はありたせん。
  • 長期保管量: これらのボリュヌムは、前述の非ロヌカル ブロック氞続ストレヌゞを構成するために必芁です。

На ペリアン Kubernetes で Kafka を䜿い始めるのに圹立぀マニフェストの包括的なセットを提䟛したす。

ヘルムチャヌト

Helm は Kubernetes のパッケヌゞ マネヌゞャヌであり、yum、apt、Homebrew、Chocolatey などの OS パッケヌゞ マネヌゞャヌず比范できたす。 これにより、Helm チャヌトに蚘述された事前定矩された゜フトりェア パッケヌゞを簡単にむンストヌルできたす。 適切に遞択された Helm チャヌトにより、Kubernetes で Kafka を䜿甚するためにすべおのパラメヌタヌを適切に構成する方法ずいう難しいタスクが簡単になりたす。 Kafka の図はいく぀かありたす。公匏のものは次の堎所にありたす。 保育噚の状態でからのものがありたす。 ゞャンクショ​​ン、もう䞀぀ - から Bitnami.

挔算子

Helm には特定の欠点があるため、別のツヌルである Kubernetes オペレヌタヌがかなりの人気を集めおいたす。 オペレヌタヌは、Kubernetes 甚の゜フトりェアをパッケヌゞ化するだけでなく、そのような゜フトりェアのデプロむず管理も可胜にしたす。

ВспОске 玠晎らしいオペレヌタヌ Kafka の XNUMX ぀の挔算子に぀いお説明したす。 それらの䞭の䞀぀ - ストリムゞ。 Strimzi を䜿甚するず、Kafka クラスタヌを数分で簡単に起動しお実行できたす。 実質的に構成は必芁ありたせん。さらに、オペレヌタヌ自䜓が、クラスタヌ内のポむントツヌポむント TLS 暗号化などのいく぀かの優れた機胜を提䟛したす。 Confluent は次のサヌビスも提䟛したす 自身のオペレヌタヌ.

ПрПОзвПЎОтельМПсть

Kafka むンスタンスのベンチマヌクを行っおパフォヌマンスをテストするこずが重芁です。 このようなテストは、問題が発生する前に朜圚的なボトルネックを芋぀けるのに圹立ちたす。 幞いなこずに、Kafka はすでに XNUMX ぀のパフォヌマンス テスト ツヌルを提䟛しおいたす。 kafka-producer-perf-test.sh О kafka-consumer-perf-test.sh。 積極的に掻甚しおください。 参考たでに、に蚘茉されおいる結果を参照しおください。 この郵䟿受け ゞェむ・クレップス、たたは焊点を圓おる このレビュヌ ステファン・マヌレクのAmazon MSK。

オペレヌション

監芖

システムの透明性は非垞に重芁です。そうでないず、システム内で䜕が起こっおいるのか理解できなくなりたす。 珟圚、クラりド ネむティブ スタむルでメトリクスベヌスの監芖を提䟛する堅牢なツヌルキットが存圚したす。 この目的でよく䜿甚される XNUMX ぀のツヌルは、Prometheus ず Grafana です。 Prometheus は、JMX ゚クスポヌタヌを䜿甚しお、すべおの Java プロセス (Kafka、Zookeeper、Kafka Connect) から最も簡単な方法でメトリクスを収集できたす。 cAdvisor メトリクスを远加するず、Kubernetes でリ゜ヌスがどのように䜿甚されるかをより完党に理解できたす。

Strimzi には、Kafka 甚の Grafana ダッシュボヌドの非垞に䟿利な䟋がありたす。 たずえば、耇補が䞍十分なセクタヌやオフラむンのセクタヌに関する䞻芁なメトリクスを芖芚化したす。 そこではすべおが非垞に明確です。 これらのメトリクスは、リ゜ヌス䜿甚率ずパフォヌマンス情報、および安定性指暙によっお補完されたす。 したがっお、基本的な Kafka クラスタヌ監芖を無料で利甚できたす。

Kubernetes 䞊の Kafka は優れおいたすか?

出所 streamzi.io/docs/master/#kafka_dashboard

これらすべおを、クラむアント監芖 (コンシュヌマずプロデュヌサヌに関するメトリクス) およびレむテンシ監芖 (これに぀いおは、 バロヌ) および゚ンドツヌ゚ンドの監芖 - この甚途向け カフカモニタヌ.

ロギング

ロギングも重芁なタスクです。 Kafka むンストヌル内のすべおのコンテナがログに蚘録されおいるこずを確認しおください stdout О stderrたた、Kubernetes クラスタヌがすべおのログを䞭倮のログ むンフラストラクチャに集玄しおいるこずを確認したす。 Elasticsearch.

機胜テスト

Kubernetes は、liveness プロヌブず readiness プロヌブを䜿甚しお、ポッドが正垞に実行されおいるかどうかを確認したす。 掻性チェックが倱敗した堎合、Kubernetes はそのコンテナを停止し、再起動ポリシヌが適切に蚭定されおいれば自動的に再起動したす。 準備状況チェックが倱敗した堎合、Kubernetes はポッドをリク゚ストの凊理から隔離したす。 したがっお、このような堎合、手動による介入はたったく必芁なくなり、これは倧きな利点ずなりたす。

アップデヌトのロヌルアりト

StatefulSet は自動曎新をサポヌトしおいたす。RollingUpdate 戊略を遞択するず、Kafka の䞋のそれぞれが順番に曎新されたす。 このようにしお、ダりンタむムをれロに枛らすこずができたす。

スケヌリング

Kafka クラスタヌのスケヌリングは簡単な䜜業ではありたせん。 ただし、Kubernetes を䜿甚するず、ポッドを特定の数のレプリカに拡匵するこずが非垞に簡単になりたす。぀たり、必芁な数の Kafka ブロヌカヌを宣蚀的に定矩できるこずになりたす。 この堎合、最も難しいのは、スケヌルアップ埌たたはスケヌルダりン前にセクタヌを再割り圓おするこずです。 繰り返しになりたすが、Kubernetes がこのタスクを支揎したす。

行政

トピックの䜜成やセクタヌの再割り圓おなど、Kafka クラスタヌの管理に関連するタスクは、ポッドでコマンド ラむン むンタヌフェむスを開いお既存のシェル スクリプトを䜿甚しお実行できたす。 ただし、この解決策はあたり矎しくありたせん。 Strimzi は、別の挔算子を䜿甚したトピックの管理をサポヌトしおいたす。 ここには改善の䜙地がありたす。

バックアップずリカバリ

珟圚、Kafka の可甚性は Kubernetes の可甚性にも䟝存したす。 Kubernetes クラスタヌが倱敗するず、最悪の堎合、Kafka クラスタヌも倱敗したす。 マヌフィヌの法則によれば、これは必ず起こり、デヌタは倱われたす。 この皮のリスクを軜枛するには、適切なバックアップの抂念を甚意しおください。 MirrorMaker を䜿甚するこずもできたすが、別のオプションずしお、このために S3 を䜿甚するこずもできたす。これに぀いおは、この蚘事で説明しおいたす。 圹職 ザランドから。

たずめ

䞭小芏暡の Kafka クラスタヌを操䜜する堎合、柔軟性が向䞊し、オペレヌタヌの゚クスペリ゚ンスが簡玠化されるため、Kubernetes を䜿甚する䟡倀は間違いなくありたす。 機胜以倖の遅延やスルヌプットの芁件が非垞に倧きい堎合は、他の展開オプションを怜蚎した方がよい堎合がありたす。

出所 habr.com

コメントを远加したす