Zookeeperはカフカの必須アイテムですか?


134

Kafkaでは、単一のブローカー、単一のトピック、および1つのプロデューサーと複数のコンシューマー(各コンシューマーがブローカーから独自のデータのコピーを取得する)を持つ単一のパーティションのみを使用したいと思います。これを考えると、Zookeeperを使用することによるオーバーヘッドは望みません。ブローカーだけを使用することはできませんか?飼育係はなぜしなければならないのですか?


12
Kafkaの最大の設計目標の1つは、クラスターのデプロイメントです。それが彼らが解決している問題であり、スタンドアロンサーバー用のzkなしのバージョンを作るのはばかげたことでしょう。私は..カフカがあなたの仕事のためのツールではないことが、あなたはより良いだけでバニラのファイルを使用したのだろうと感じている
RickyA

5
私はあなたが何を確定したかを本当に知りたいですか?あなたが答えを選択しなかったので、あなたはこれに対するあなた自身の解決策を持っていると思います。よろしくお願いします!
Karthikeyan

Jockoは、KookaのGolang実装であり、Zookeeperに依存せず、単一のバイナリがインストールされます
Arun Gopalpuri

1
Zookeeperは削除されました。以下の回答を参照してください
-stackoverflow.com/a/57328140/1699956

1
追加するだけで、飼育係が何をするかを読んだら、あなたはアイデアを得るでしょう–Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller '

回答:


128

はい、ZafkeeperはKafkaを実行するために必要です。Kafka Getting Startedドキュメントから:

ステップ2:サーバーを起動する

Kafkaはzookeeperを使用しているため、zookeeperサーバーがまだない場合は、まず開始する必要があります。kafkaにパッケージされている便利なスクリプトを使用して、ダーティな単一ノードzookeeperインスタンスを取得できます。

その理由については、分散システム全体でタスク、状態管理、構成などを調整する方法が必要であることを、かなり前からよく知っている人たちがいます。一部のプロジェクトは独自のメカニズムを構築しています(MongoDB分割クラスターの構成サーバー、またはElasticsearchクラスターのマスターノードを考えてください)。他の人たちは、Zookeeperを汎用の分散プロセス調整システムとして利用することを選択しました。したがって、Kafka、Storm、HBase、SolrCloudは、ほんの一部を挙げればすべて、Zookeeperを使用して管理と調整を支援します。

Kafkaは分散システムであり、Zookeeperを使用するように構築されています。Kafkaの分散機能を使用していないという事実によって、Kafkaの構築方法は変わりません。いずれにしても、Zookeeperの使用によるオーバーヘッドはそれほど大きくありません。より大きな問題は、なぜこの特定の設計パターンを使用するのかということです。Kafkaの単一のブローカー実装は、マルチブローカークラスターのすべての信頼性機能と、その拡張機能を利用できません。


9
実際、単一のブローカーを使用する場合でも、kafka 分散モードのままですが、レプリケーション係数は1です-ショートカットメカニズムや特別なモードはありません(実際、それは良いことです)。
om-nom-nom 2014年

2
Kafka 0.8.1にはzkが必要です。そして、カフカに調整システムと連携する抽象レイヤーがない場合、他の調整システムをカフカに有効にするにはどうすればよいのでしょうか。
stanleyxu2005 2014年


64

他の人が説明したように、Kafka(最新バージョンでも)はZookeeperなしでは機能しません。

KafkaはZookeeperを次の目的で使用します。

コントローラーの選出。コントローラーはブローカーの1つであり、すべてのパーティションのリーダー/フォロワー関係を維持する責任があります。ノードがシャットダウンすると、他のレプリカにパーティションリーダーになって、ノードのパーティションリーダーを置き換えるように指示するのはコントローラーです。Zookeeperを使用してコントローラーを選択します。コントローラーが1つだけであることを確認し、クラッシュした場合は新しいコントローラーを選択します。

クラスターメンバーシップ -どのブローカーが有効で、クラスターの一部ですか?これもZooKeeperを通じて管理されます。

トピックの構成 -存在するトピック、各パーティションの数、レ​​プリカの場所、優先リーダー、各トピックに設定されている構成のオーバーライド

(0.9.0)-割り当て -各クライアントが読み書きできるデータの量

(0.9.0)-ACL-誰がどのトピック(古い高レベルのコンシューマー)に対して読み書きできるか-どのコンシューマーグループが存在し、誰がメンバーであり、各グループが各パーティションから取得した最新のオフセットはどれか。

[ https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapiraから]

シナリオでは、1つのブローカーインスタンスと複数のコンシューマーを持つ1つのプロデューサーのみが、プッシャーを使用してチャネルを作成し、コンシューマーがそれらのイベントをサブスクライブして渡すことができるチャネルにイベントをプッシュできます。 https://pusher.com/


3
「最新バージョン」を実際のバージョンに編集しますか?応答年齢が良くなります。
akauppi


参照を追加します。最後の段落は元々私からのものです。
Kevin Li

47

重要な更新-2019年8月:

ZooKeeperの依存関係はApache Kafkaから削除されます。KIP-500:ZooKeeperを自己管理メタデータクォーラムに置き換えるでの高レベルの議論を参照してください。

これらの取り組みには、いくつかのKafkaリリースと追加のKIPが必要です。Kafkaコントローラーは、現在のZooKeeperタスクのタスクを引き継ぎます。コントローラは、Kafkaのコアコンセプトであるイベントログの利点を活用します。

新しいKafkaアーキテクチャのいくつかの利点は、シンプルなアーキテクチャ、操作の容易さ、およびスケーラビリティの向上です(たとえば、「無制限のパーティション」を許可します)。



11

KafkaはZookeeperを使用するように構築されています。それからの脱出はありません。

Kafkaは分散システムであり、Zookeeperを使用してkafkaクラスターノードのステータスを追跡します。また、Kafkaトピック、パーティションなども追跡します。

あなたの質問を見ると、カフカは必要ないようです。Redis、Rabbit MQ などのpub-subをサポートするアプリケーション、またはPub-nubなどのホストされたソリューションを使用できます。


9

IMHO Zookeeperはオーバーヘッドではありませんが、あなたの生活をずっと簡単にします。

基本的には、クラスター内の異なるノード間の調整を維持するために使用されます。Kafkaの最も重要な点の1つは、zookeeperを使用して定期的にオフセットをコミットすることです。これにより、ノード障害が発生した場合に、以前にコミットされたオフセットから再開できます(自分でこれをすべて処理することを想像してください)。

Zookeeperは、リーダーの検出、構成管理、同期、新しいノードのクラスターへの参加またはクラスターからの離脱の検出など、他の多くの目的に役立つ重要な役割も果たします。

Kafkaの今後のリリースでは、飼育係の依存関係を削除する予定ですが、現時点ではそれが不可欠な部分です。

以下は、FAQページから抜粋した数行です。

Zookeeperクォーラムがダウンすると、ブローカーは状態が悪くなり、通常はクライアントのリクエストに対応できなくなります。Zookeeperクォーラムが回復すると、Kafkaブローカーは通常の状態に自動的に再開できるはずですが、まだいくつかのコーナーケースがあります彼らはそれを行うことができず、それを通常の状態に戻すにはハードキルアンドリカバリーが必要です。したがって、zookeeperクラスターを注意深く監視し、パフォーマンスが向上するようにプロビジョニングすることをお勧めします。

詳細はこちらをご確認ください


13
飼育係は大きな頭痛の種です。HBase内。カフカで。嵐の中。私がKafka / ZKで認識している長年にわたるバグが原因で、チームはRabbitMQを支持してそれを放棄しました。HBaseのインストールには、ZKの問題に対処する時間が含まれます。ただし、OPに関する回答は正しいです。ZKが必要です。
javadba

2
確かにバグとバージョンの互換性の問題があります(少なくともKafkaとZKの場合)が、zookeeperの主な目的は、分散システムに必要なこれらの複雑なタスクを管理することです。zkクラスターの管理とチューニングにはかなりの労力と依存が必要であることに同意しますon zkは賢明な呼び出しではないかもしれません。おそらくそれが、kafkaが新しいバージョンでzkの依存関係を削減しようとしている理由です。別のメモでは、RabitMQとKafkaは非常に異なる設計哲学を持ち、異なるユースケースを解決することを目的としていますが、この議論の範囲を超えていると思います:)
user2720864

はい、高負荷シナリオにはkafkaが優れています。私たちは、これらの利点が明らかに必要になるまで、または必要でない限り、RabbitMQを実行することにしました。RabbitMQでのプログラミングもより簡単でした。Kafkaのscalaバージョンの依存関係は困難でした。
javadba 2015年

4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> sysopの観点からではありません。Zkは、古いJava cruftの一部です。たとえば、DNSエントリのttlに準拠していないため、エントリを再解決しないという点で、長い未解決のバグがあります。窓の外には、サーバーのスワップの可能性があります。喜んでetcdと交換します。
RickyA 2016年

「私たちは、これらの利点が明らかに必要になるまで、または必要でない限り、RabbitMQを実行することを決定しました。」私のチームがこのように啓発されたことを望みます。私見では、我々は明らかにカフカを正当化するために十分に高い負荷を持っていないが、我々は:(とにかくカフカを使用している
スミス氏

4

Zookeeperは、あらゆる種類の分散システムの集中管理システムです。分散システムは、さまざまなノード/クラスター(地理的に離れた場所にある可能性があります)で実行されるさまざまなソフトウェアモジュールですが、1つのシステムとして実行されます。Zookeeperは、ノード間の通信を容易にし、ノード間で構成を共有し、どのノードがリーダーであるか、どのノードが参加/脱退するかなどを追跡します。Zookeeperは、分散システムを正常に保ち、一貫性を維持するものです。Zookeeperは基本的にオーケストレーションプラットフォームです。

Kafkaは分散システムです。ひいてはそれがオーケストレーションのいくつかの種類を必要とする地理的に離れた(またはしない)かもしれないそのノードについて。


3

はい、ZookeeperはKafkaの仕様によるものです。Zookeeperは、一種のKafkaクラスターを管理する責任があるためです。それには、すべてのKafkaブローカーのリストがあります。ブローカーがダウンしたり、パーティションがダウンしたり、新しいブローカーが起動したり、パーティションが起動したりすると、Kafkaに通知します。つまり、ZKはすべてのKafkaブローカーをKafkaクラスターの現在の状態について最新の状態に保ちます。

次に、すべてのKafkaクライアント(プロデューサー/コンシューマー)は、単一のブローカーに接続するだけで、そのブローカーはすべてのメタデータをZookeeperによって更新されるため、クライアントはブローカーの発見の頭痛を気にする必要がありません。


3

通常のペイロードメッセージ転送以外にも、kafkaでは次のような多くの通信が行われます。

  • クラスターメンバーシップを要求するブローカーに関連するイベント。
  • ブローカーに関連するイベントが利用可能になります。
  • ブートストラップ構成のセットアップを取得しています。
  • コントローラーとリーダーの更新に関連するイベント。
  • ハートビート更新などのステータス更新を支援します。

Zookeeper自体は、アンサンブル内の複数のノードで構成される分散システムです。Zookeeperは、このようなメタデータを維持するための集中サービスです。


1

この記事では、KafkaにおけるZookeeperの役割について説明します。カフカがステートレスである方法と、ゾケッパーがカフカの分散された性質(およびより多くの分散システム)で重要な役割を果たす方法を説明します。


1

ZookeeperなしでKafkaを実行する要求は、ごく一般的なようです。ライブラリCharlatanはこれに対処します。

説明によると、CharlatanはほぼZookeeperのモックであり、他のツールまたはデータベースによってバックアップされたZookeeperサービスを提供しています。

Charlatanライブラリの作者の主な製品を扱っているときに、そのライブラリに遭遇しました。そこでうまくいきます…


0

第一に

Apache ZooKeeperは、高可用性の方法で構成および同期サービスを提供するために使用される分散ストアです。カフカの最近のバージョンでは、仕事はそれがZooKeeperのにメッセージ(オフセットと呼ばれる)を消費していたどれだけについてではない店舗情報へのクライアント消費者のために行われた.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.カフカを提供していますが、フォールトトレランスと回復力を、何かを提供するために必要とされています調整が必要であり、ZooKeeperはシステム全体の一部を有効にします。

第二に

パーティションのリーダーが誰であるかについて合意することは、Kafkaエコシステム内でのZooKeeperの実用的なアプリケーションの一例です。

Zookeeper would work if there was even a single broker. 

これらはKafka In Actionの本からです。画像はこのコースからのものです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.