これら3つの方法を覚えておいてください。 Zookeeper なしで Kafka を実行する

これら3つの方法を覚えておいてください。 Zookeeper なしで Kafka を実行する

​​​

[51CTO.com オリジナル記事] Kafka 2.8 以降では、Kafka クラスターは Zookeeper なしで実行できます。この記事では、コンテナを使用して単一ノード クラスターで Kafka を実行する 3 つの方法を紹介します。

Apache Zookeeper は、Kafka の依存関係として、Apache Kafka のメタデータを管理するために使用されてきました。幸いなことに、Kafka バージョン 2.8 以降では、Zookeeper なしで Kafka クラスターを実行できます。コンテナのシングルノード クラスターを使用する 3 つの簡単な方法を紹介します。

コントロールプレーンとデータプレーン

Apache Kafka は、クラスターに対して独立したコントロール プレーンとデータ プレーンを実装します。コントロール プレーンはクラスターを管理し、どのブローカーがアクティブであるかを追跡し、セットが変更されたときにアクションを実行します。同時に、データ プレーンは、プロデューサーとコンシューマー、およびその両方によって生成されたレコード情報を処理する必要があります。以前の Kafka バージョンでは、Zookeeper がコントロール プレーン機能を実装する主要なクラスター コンポーネントでした。

数年にわたる努力の末、Kafka はコントロール プレーン機能の最初のバージョンを実装しました。このアップデートを KIP-500 と呼びます。その中でも、Apache Kafka Raft (KRaft とも呼ばれる) は、Zookeeper に代わる新しいコンセンサス プロトコルとして導入されました。ブローカーは、クラスター制御プレーンを管理する仲裁コントローラーとして機能できます。この変更により、クラスターの展開、監視、管理が簡素化されます。新しい KRaft コントローラーは Apache Kafka 2.8 で体験できます。

コンテナ化された単一ノード

Apache Kafka の強みは、メッセージ処理機構の水平展開と高スループットメッセージの管理であり、これが Kafka 開発の原動力となっています。このため、本番環境の Kafka クラスターでは、上記の機能を実行するために複数のブローカーを使用する必要があります。本日の知識ポイントを素早く簡単に紹介するために、まずは単一ノード クラスターから始めて、Kafaka がグループ エントリを管理する方法を紹介します。

この記事では、必要なアプリケーション環境を格納するために Strimzi コンテナーを使用します。 Strimzi は、Cloud Native Computing Foundation プロジェクトのメンバーです。これにより、Kubernetes 上で Apache Kafka を簡単に実行できるようになり、成熟した操作とコンテナ イメージのセットも提供されます。

この記事では、Quay Container Registry を通じて Apache Kafka 2.8.1 イメージを公開して使用します。

Docker または Podman

まず、同じインスタンスでエージェントとコントローラーのロールを持つ単一のコンテナを実行する必要があります。 Docker または Podman をインストールし、次のコマンドを実行します。

 docker run -it --name kafka-zkless -p 9092:9092 -e LOG_DIR=/tmp/logs quay.io/strimzi/kafka:latest-kafka-2.8.1-amd64 /bin/sh -c 'エクスポート CLUSTER_ID=$(bin/kafka-storage.sh random-uuid) && bin/kafka-storage.sh format -t $CLUSTER_ID -c config/kraft/server.properties && bin/kafka-server-start.sh config/kraft/server.properties'

上記のコマンドは、「kafka-zkless」という名前のコンテナを起動し、Kafka のポート 9092 を公開します。仕事の3つの側面を含むエントリーポイントの情報をカバーします。

まず、環境変数を設定し、UUID を通じてクラスター ID を設定します。

次に、`kafka-storage.sh` スクリプトを実行してストレージ ディレクトリをフォーマットします。

3 番目に、KRaft 構成を使用して Kafka サーバーを起動します。

同時に、標準の Kafka ツール (kcat: 以前は kafkacat と呼ばれていました) を使用してブローカーに接続し、関連するレコードを生成および使用することもできます。

Docker の作成

コンポーネントを定義するには、Compose 仕様を使用します。図 1 に示すように、docker-compose yaml ファイルの例は次のとおりです。

​​​

図1

図からわかるように、container_name はコンテナ名を定義し、image はコンテナイメージを定義し、command 部分は実行するコマンドを定義します。コマンドが長すぎるため、説明のために 2 行に分割されています (実際には 1 行ですが、ここで改行を追加して、誰でも読みやすくしています)。上記の行は、クラスター ID の定義、ストレージ ディレクトリのフォーマット、Kafaka サーバーの起動など、Docker のコマンドと一致しています。次の行は主に、リスナー、security.protocol.map、およびアドバタイズされたリスナー情報を書き換えます。次のステップは、ポートを 9092 として定義することです。環境では、コマンド ラインで書き換える必要がある 3 種類の情報が定義されています。KAFKA_ADVERTISED_LISTENERS は、アドバタイズされたリスナーに対応します。 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP は security.protocol.map に対応します。 KAFKA_LISTENERS はリスナー情報に対応します。

上記の例は、次のコマンドで実行できます。

 docker-compose を起動 -d

この例では、ホスト ポート 9092 を公開します。より広範囲の複合デプロイメントでアクセスする必要がある場合は、他のポートとの競合を避けるために、これを kafka:29092 に変更できます。

Kubernetes のデプロイメント

Kubernetes の使用に慣れている場合は、図 2 に示すようにデプロイメントを記述できます。

​​​

図2

図 2 に示すように、コンテナー ノードの下のコンテンツに焦点を当てます。コンテナの名前はzkless-kafkaです。コンテナイメージは image で定義され、コンテナを起動するコマンドは command で定義されます。

Docker と同様に、コマンドは 2 行で説明するには長すぎます。上の行には、クラスター ID の定義、ストレージ ディレクトリのフォーマット、Kafaka サーバーの起動が引き続き含まれています。次の行は、env (環境変数) の KAFKA_ADVERTISED_LISTENERS に対応する値から読み取られる、アドバタイズされたリスナーの情報のみを定義します。

上記のファイルは次のコマンドで実行できます。

 kubectl を適用 -f kubernetes.yaml

実行されると、イメージがデプロイされ、zkless-kafka-bootstrap ホスト名を使用してブートストラップ サーバーが公開されます。同時に、デプロイメント サーバーが配置されている現在の名前空間へのアクセスが制限されます。この時点で、他の広告リスナーと同様に、必要なメッセージを取得できます。

まとめ

この記事では、Apache Kafka の新しいコントロール プレーンの実装について簡単に紹介します。以前のバージョンの Kafaka ではクラスター制御機能が完成しているため、強力な Zookeeperless Kafka クラスターを使用できます。コンテナ イメージを使用して単一ノード クラスターをデプロイする 3 つの簡単な方法 (単純な Docker または podman コマンドの実行、docker-compose ファイルの実行、Kubernetes 上で実行中のポッドのデプロイ) を確認しました。

著者について

51CTO コミュニティ エディター兼シニア アーキテクトの Cui Hao 氏は、ソフトウェア開発とアーキテクチャで 18 年の経験があり、分散アーキテクチャでは 10 年の経験があります。元HPの技術専門家。彼は情報を共有することに積極的で、60 万回以上読まれている人気の高い技術記事を多数執筆しています。 『分散アーキテクチャの原則と実践』の著者。

[51CTO オリジナル記事、パートナーサイトに転載する場合は、元の著者とソースを 51CTO.com として明記してください]

<<:  K8sにVictoriametricsをインストールする

>>:  NIST サイバーセキュリティ フレームワークの観点からエンタープライズ SaaS アプリケーションのセキュリティ コンプライアンスを検討する

推薦する

Go 分散トークン バケットの電流制限 + 最終利益の保証

この記事は、Ouyang An が執筆した WeChat パブリックアカウント「Microservi...

2018年上半期の中国モバイルインターネットレポート!

ちなみに、先週共有されたミニプログラムレポートでは、一部の友人がアプリに対する不満を表明するメッセー...

Yammerの創設者はシリコンバレーの終焉を予測

Yammer 創設者 David Sacks (写真提供: Tencent Technology)テ...

調査によると、クラウドコンピューティングの移行コストは高くなる可能性がある

マッキンゼー・コンサルティングは最近、大企業がすべてのコンピューティングをクラウドコンピューティング...

Spark 独自の分散ストレージ システム - BlockManager

全体的なアーキテクチャBlockManager は Spark の重要なコンポーネントです。 Blo...

Baidu K Station はかなりクレイジーです。ウェブマスターはどのように対処すべきでしょうか?

最近、原因は不明ですが、いくつかの重要なウェブサイトがBaiduによってKアウトされ、大きな損失が発...

MIITが経営に介入:WeChatの課金紛争は調整の対象となる可能性

通信事業者とOTTメーカー間の争いの火ぶたはまだ晴れておらず、工業情報化省もこうした事業者の管理を議...

itldcはどうですか?シンガポールVPSの簡単なレビュー、実際のテストデータを共有して実際の効果をお伝えします

itldcはどうですか? itldc シンガポール VPS はどうですか?シンガポールは中国の物理的...

アマゾン ウェブ サービスがマレーシアに新リージョンを発表

最近、Amazon Web Services は、マレーシアに Amazon Web Service...

Yinkeはソーシャルメディアで「リバウンド」する方法について簡単に語る

これまで、企業のマーケティング戦略は、従来の広告や実店舗を通じて消費者との関係を構築することでした。...

AIOps ツールがクラウド コンピューティングに新たな命を吹き込む理由

[[331103]] AIOps ツールは IT 分野で幅広い応用が期待されていますが、クラウド テ...

ハイブリッド クラウド環境で K8S の可観測性を実装するための 6 つの戦略

サヴァン・カロッド著徐潔成編纂2023 年には、ネイティブ クラウド アプリケーションとプラットフォ...

ウェブサイトのURLを解析する際によくある問題の例

多くの場合、外部リンクやコンテンツに重点を置き続けていると、構造が徐々に私たちにとっての呪いとなって...

BaiduがホームページSEOのみをインデックスする問題を解決する方法

Baiduがホームページのみをインデックスする問題に対するSEOソリューションウェブサイト制作者にと...