BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース KubernetesでのKafkaクラスタの管理と運用

KubernetesでのKafkaクラスタの管理と運用

原文(投稿日:2018/02/06)へのリンク

読者の皆様へ:お客様のご要望に応じて、重要なものを逃すことなく、ノイズを低減できる一連の機能を開発しました。興味のあるトピックを選択して、電子メールとWeb通知を入手してください

Amadeus社のプラットフォームソリューションアーキテクトであるNenad Bogojevic氏は最近のKubeCon + CloudNativeCon North America 2017 Conferenceで、Kubernetes環境でKafkaクラスタを実行および管理する方法について講演した

Kafkaはログとイベントの収集のためだけでなく、ストリーミングプラットフォームののために使われる。Kafkaクラスタ内の各ブローカには、クラスタ内の他のブローカを見つけるために使用できるIDがある。ブローカには、パーティションログを格納するためのデータベースも必要である。Kafkaのための永続ボリュームを設定することは重要である。そうでないとログが失われる。

彼はKafkaクラスタのプロビジョニングと設定について説明した。設定は、名前、パーティション数、レプリケーションファクタ、ミリ秒単位での保持時間などのトピックプロパティを記述するKubernetes ConfigMapまたはCustomResourceを使って行われる。これは、トピックのプロビジョニングとアンプロビジョニングを自動化するのに役立つ。また、開発や運用の段階でも、クラスタの再起動でも一貫した構成を保証する。

Bogojevic氏は、KubernetesのStatefulSet機能を使用してkafkaとzookeeperのクラスタ要素を設定する方法について説明した。これにより、以下の機能が提供される。

  • 不変のポッドのID
  • 不変のストレージ
  • 順序付き起動、シャットダウン
  • ローリングアップデート

彼らのソリューションアーキテクチャにはKafkaとZooKeeper Statefulsetが含まれており、それはヘッドレスサービスとして動作する。また、クライアントアプリケーションがクラスタ内でKafkaノードを見つけるために使用するディスカバリサービスもある。彼は、優れたハードウェア(SSDなど)を備えたマシン上にインスタンスを乗せるために使われるノードセレクタについて説明した。また、異なる物理マシン間でインスタンスを分散させるためのアンチ・アフィニティについて説明した。

Kubernetesの監視は、このアーキテクチャのもう1つの重要なコンポーネントである。それは、サーバが準備ができており、接続を受け入れることができるかどうかのチェックに使用できる。監視は、JMXツールとPrometheusツールを使用して行われる。

Bogojevic氏は、SRE/Operationチームのドメイン知識を実行可能コードに変換するために使用できるKafka演算子について説明した。彼らは次のような異なるコンポーネントに対して演算子を使用する。

  • Prometheus
  • Redisクラスタ
  • Workflow
  • Kafka

自動スクリプトを使用してKafka Topicsを作成することはよいプラクティスである。メッセージングソリューションでは、「Topics as a code」アプローチを検討すべきである。Kafkaクラスタでトピックを操作する際のベストプラクティスには、他に次のものがある。

  • トピックがターゲット環境に存在することを確認する
  • トピックが使用されなくなったら削除されていることを確認する
  • 環境間で同じ設定を伝播させる
  • 使用可能なディスクスペースに基づいてリテンションを設定する
  • 認証情報でクライアントを構成する
  • 設定と要件をコードとして提供する

Bogojevic氏は、Kafkaのアップグレードを実施する必要があるときのベストプラクティスについて説明した。例えば、プロトコルバージョンを最新に設定し、Kafkaブローカを1つずつアップグレードした後、プロトコルバージョンを新しいものに設定する。ストレージのフォーマットに関しては、利用者に最新バージョンを提供し、フォーマットバージョンを新しいものに更新する。

Rate this Article

Adoption Stage
Style

この記事に星をつける

おすすめ度
スタイル

BT