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

推薦する

開発環境を繰り返し構築する必要はもうありません - Vagrant

新しい同僚が会社に入社するたびに、その同僚は自分のコンピューター上でさまざまな環境を構成する必要があ...

企業プロモーションウェブサイトのキーワードレイアウトに関する考察

キーワードの選択は、ウェブサイトの構築とプロモーションの第一歩であり、同時に、ウェブサイトの構築とプ...

消費者の意思決定に直接影響を与える 12 の社会心理学理論! (優れた)

毎日、私たち一人一人はさまざまな選択、判断、決断を行っています。たとえば、昼食に何を食べるか、服を買...

最新ニュース: prometeus-$5.5/Xen/1g メモリ/200g ハードディスク/2T トラフィック

Prometeus の子会社である XENPOWER は、より大容量のハード ドライブを備えた VP...

MobvistaのSpotMaxがAWS Marketplaceで利用可能になり、企業のクラウドコスト管理の最適化を支援

最近、世界的なテクノロジープラットフォームである Mobvista は、クラウドコンピューティングビ...

6月の第1週に、中国の.INFOドメイン名の総数は640件の純増で9位に落ちた。

IDC Review Network (idcps.com) は 6 月 13 日に次のように報告し...

virmach 特別オファー ロサンゼルス データセンター 格安 kvm vps + 500g Voxility 保護

virmach vps は、3 月にロサンゼルス データ センターで、Windows が組み込まれた...

Baidu の共有コードが検索ランキングに与える影響を分析する

最近は、Web ページにさまざまな共有コードを埋め込むのが流行っているようです。使用するかどうかに関...

第14回51CTO中国企業年次選考の結果が出ました!

【原文は51CTO.comより】2020年1月6日、51CTOが主催した「IT印象◆ビジネスモデルの...

企業ウェブサイトの間違った最適化方法: あなたはそれを実行していませんか?

血なまぐさい、痛い教訓です。6月28日、Baiduはインターネット上の低品質コンテンツを持つウェブサ...

Hiformance: QNロサンゼルスの超ハイエンドKVM仮想VPSの簡単なレビュー

Hiformance はハイブリッド専用サーバー (hiformance VPS: $10/KVM/...

ウェブマスターネットワークニュース:Facebookは4年以内に消滅する可能性があり、Duoku文学ネットワークはひっそりと立ち上げられました

1.百度の2大事業グループ設立の背景:モバイルレイアウトが加速する中国新聞社、6月9日。百度は6月7...

Sogouはインターネットの健全で調和のとれた発展を推進します

春節期間中、方周子が韓漢の代筆を疑った事件が話題を呼んだ。一部のネットユーザーは「今年の春節は韓漢と...

Hostsolutions: €35/E5-2450L*2/32g メモリ/1gbps、苦情防止、著作権無視

ルーマニアのサーバー販売業者である hostsolutions が、米国 7.4 向けの格安サーバー...