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

推薦する

WeChat パブリックアカウントのプロモーション | フォロワーを増やすために大手アカウントに貢献するには?

ファン増加疲労期に、一夜にしてファンが急増するという神話はまだあるのでしょうか?この記事の著者は、大...

SEOについて考えすぎない

SEO に携わる人なら、多かれ少なかれ次のような経験をしたことがあるでしょう。記事や複雑な SEO ...

入札が実際の成果をもたらさない理由の詳細な説明

ウェブマスターが百度に費やした努力とお金に対して報われるのは当然のことです。入札にお金を使うとき、大...

Hostodo: 米国西海岸スポケーンの VPS が 66% オフ、年間 12 ドルから

Hostodo は現在、西海岸の「スポケーン」データセンターの VPS を 36% 割引で提供してお...

hostens: 40% オフセール、大容量ハードドライブ VPS/仮想ホスト/リセラーなど。

Hostensは、リトアニアの古いブランドUAB「Interneto vizija」のサブブランドで...

ウェブサイトの最適化のために守るべきこと

SEO について知らないウェブマスターはいません。なぜなら、SEO の品質はトラフィック、さらにはウ...

英国ネイティブ VPS: kuroit、英国ネイティブ IP を提供、月額 6.21 ドル、1G メモリ/1 コア/15g SSD/1T トラフィック、TikTok/Netflix などのロックを解除。

推奨される英国ネイティブ VPS、どの英国ネイティブ VPS レンタル会社が最高ですか?英国のストリ...

タオバオで婦人服を販売する際の致命的な在庫問題を解決する方法

タオバオの婦人服業界では、「婦人服製品の10のうち9つは在庫の問題で売れない」という格言が広まってい...

SEO詳細の変更による影響

書き出しの書き方がわからず、とにかく少し混乱しています。今日は、私自身のヒントをいくつか共有したいと...

Qizhi Informationは、国内データサービスのアップグレードを支援する新しいクラウドネイティブデータベースXuanwuを立ち上げました。

2月28日、Kyligenceは、企業がデータプラットフォームのクラウド移行を加速し、国内のアップグ...

クラウドの可視性とポートスプーフィング: 既知の未知数

すべてのテクノロジーと同様に、新しいツールは以前のツールに基づいて構築されており、従来のネットワーク...

Alibaba P8 アーキテクトが語る: アプリケーション シナリオ、選択比較、分散キャッシュの問題と課題

分散キャッシュを使用する理由は何ですか?典型的な Taobao のダブル 11 フラッシュ セールの...

電子商取引の信頼性危機においてユーザーの信頼を最適化する方法

わが国の電子商取引は急速に発展し、海外の電子商取引大手の羨望の的となっているが、このような急速な成長...

AWS が AWS Outposts の一般提供を発表

AWS 設計のハードウェア、完全に管理され、構成可能なラックにより、お客様はオンプレミスでワークロー...

chicagovps-4.5ドル/1gメモリ/20g SSD/1Tトラフィック/複数のデータセンター

chicagovps からプロモーションメールが届きました。特別価格の VPS 2 台と特別価格の ...