これら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 アプリケーションのセキュリティ コンプライアンスを検討する

推薦する

ディストリビューション - 年間 15 ドル / メモリ 1g / ハードディスク 15g / トラフィック 1T / ポート 1G / 英国

dedistation.com は比較的新しい VPS プロバイダーです。私は以前、HostCat ...

テンセントクラウド、中小企業10万社の困難克服を支援する防疫支援計画を開始

中小企業の生産維持を支援し、国全体が疫病と闘い、健康を守るのを支援します。テンセントクラウドは、企業...

良いエントリーポイントがあれば、ソフト記事は宣伝効果を発揮できる

ソフト記事の台頭は一時的なものではなく、ルネサンスでもありません。むしろ、それはオンラインでの宣伝や...

VMware vSphere 仮想化ディザスタリカバリ - 入門

VMware vSphere 製品は人々の心に深く根付いています。サーバー仮想化といえば、VMwar...

2020年に売り手が知っておくべき3つのSEO戦略

新型コロナウイルス感染症が世界を席巻し、今年は不確実性に満ちた一年となった。このため、販売者は今年何...

企業はなぜすべてをクラウドに移行する必要があるのでしょうか?

現在、ほぼすべての企業が少なくとも 1 つの IT クラウド サービスを利用しています。クラウド ネ...

企業はどのようにクラウドに移行すべきでしょうか?これら 5 つの罠に注意してください。

インターナショナル・データ・コーポレーションは、デジタル変革への世界の支出は2022年までに約2兆ド...

天猫と淘宝網の「双十一」取引額は191億に達し、前年比260%増

アリババグループは11月12日早朝、ダブル11プロモーション期間中のアリペイでの総売上高が191億円...

分散システムのCAP定理とBASE理論

[[386799]]この記事はWeChatの公開アカウント「Coder's Private ...

中国eスポーツ産業調査レポート

若い年齢層はeスポーツユーザーの重要な特徴です。eスポーツゲーム、ゲームライブ放送、eスポーツイベン...

ソニーPS4の中国版はリージョンロックされていないとユーザーから報告

ソニーのPS4の中国での発売日が近づくにつれ、このデバイスがリージョンロックされていないというニュー...

kuroit: 月額 3 ポンド、160G 防御、1G メモリ/1 コア/15g NVMe/1T トラフィック/1Gbps 帯域幅の日本向け VPS

Kuroit は現在、日本のデータセンターで、デフォルトの AMD Ryzen 9 3900X、NV...

dogyunのクラシッククラウドの簡単なレビュー - US Unicom AS4837シリーズ

ドギュンはどうですか?ドギュンはどうですか? Dogyunは、米国のcn2+cu2シリーズのクラウド...