前書き

Apache Kafkaは、大量のリアルタイムデータを効率的に処理するように設計された一般的な分散メッセージブローカーです。 Kafkaクラスターは、非常にスケーラブルでフォールトトレラントであるだけでなく、ActiveMQやRabbitMQなどの他のメッセージブローカーと比較してはるかに高いスループットも備えています。 一般にpub / subメッセージングシステムとして使用されますが、多くの組織は、公開されたメッセージの永続的なストレージを提供するため、ログの集計にも使用します。

このチュートリアルでは、Ubuntu 14.04にApache Kafka 0.8.2.1をインストールして使用する方法を学習します。

前提条件

従うには、次のものが必要です。

  • Ubuntu 14.04ドロップレット

  • 少なくとも4GBのhttps://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 [スワップスペース]

ステップ1-Kafkaのユーザーを作成する

Kafkaはネットワーク経由でリクエストを処理できるため、専用のユーザーを作成する必要があります。 これにより、Kafkaサーバーを構成する場合のUbuntuマシンへの損傷が最小限に抑えられます。

ルートとして、 `+ useradd +`コマンドを使用して* kafka *というユーザーを作成します。

useradd kafka -m

`+ passwd +`を使用してパスワードを設定します。

passwd kafka

Kafkaの依存関係をインストールするために必要な特権を持つように、これを「+ sudo 」グループに追加します。 これは、 ` adduser +`コマンドを使用して実行できます。

adduser kafka sudo

これで、Kafkaユーザーの準備が整いました。 `+ su +`を使用してログインします。

su - kafka

ステップ2-Javaのインストール

追加のパッケージをインストールする前に、利用可能なパッケージのリストを更新して、リポジトリで利用可能な最新バージョンをインストールします。

sudo apt-get update

Apache KafkaにはJavaランタイム環境が必要なので、 `+ apt-get `を使用して ` default-jre +`パッケージをインストールします。

sudo apt-get install default-jre

ステップ3-ZooKeeperをインストールする

Apache ZooKeeperは、分散システムに属するノードの構成情報を調整および同期するために構築されたオープンソースサービスです。 Kafkaクラスターは、障害のあるノードの検出やリーダーの選出などの操作を実行するために、ZooKeeperに依存しています。

ZooKeeperパッケージはUbuntuのデフォルトリポジトリで利用できるため、 `+ apt-get`を使用してインストールします。

sudo apt-get install zookeeperd

インストールが完了すると、ZooKeeperはデーモンとして自動的に開始されます。 デフォルトでは、ポート* 2181 *でリッスンします。

動作していることを確認するには、Telnet経由で接続します。

telnet localhost 2181

Telnetプロンプトで、「+ ruok」と入力し、「+ ENTER」を押します。

問題がなければ、ZooKeeperは「+ imok +」と言い、Telnetセッションを終了します。

ステップ4-Kafkaバイナリのダウンロードと抽出

JavaとZooKeeperがインストールされたので、Kafkaをダウンロードして抽出します。

開始するには、「+ Downloads +」というディレクトリを作成して、すべてのダウンロードを保存します。

mkdir -p ~/Downloads

`+ wget +`を使用して、Kafkaバイナリをダウンロードします。

wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz

`+ kafka +`というディレクトリを作成し、このディレクトリに移動します。 これは、Kafkaインストールのベースディレクトリになります。

mkdir -p ~/kafka && cd ~/kafka

`+ tar +`コマンドを使用して、ダウンロードしたアーカイブを抽出します。

tar -xvzf ~/Downloads/kafka.tgz --strip 1

ステップ5-Kafkaサーバーの構成

次のステップは、Kafkaサーバーを構成することです。

`+ vi `を使用して ` server.properties`を開きます:

vi ~/kafka/config/server.properties

デフォルトでは、Kafkaではトピックを削除できません。 トピックを削除できるようにするには、ファイルの最後に次の行を追加します。

〜/ kafka / config / server.properties

delete.topic.enable = true

ファイルを保存し、「+ vi +」を終了します。

ステップ6-Kafkaサーバーを起動する

`+ nohup `を使用して ` kafka-server-start.sh +`スクリプトを実行し、シェルセッションに依存しないバックグラウンドプロセスとしてKafkaサーバー(Kafkaブローカーとも呼ばれます)を起動します。

nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &

開始するまで数秒待ちます。 `+〜/ kafka / kafka.log +`に次のメッセージが表示されたら、サーバーが正常に起動したことを確認できます。

〜/ kafka / kafka.logからの抜粋

...

[2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)
[2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)

これで、ポート* 9092 *でリッスンしているKafkaサーバーができました。

手順7-インストールのテスト

*「Hello World」*メッセージを発行および使用して、Kafkaサーバーが正常に動作していることを確認します。

メッセージを公開するには、Kafkaプロデューサーを作成する必要があります。 `+ kafka-console-producer.sh +`スクリプトを使用して、コマンドラインから簡単に作成できます。 引数としてトピック名とともに、Kafkaサーバーのホスト名とポートが必要です。

次のように入力して、文字列「Hello、World」 TutorialTopic *というトピックに公開します。

echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

トピックは存在しないため、Kafkaは自動的に作成します。

メッセージを消費するには、 `+ kafka-console-consumer.sh +`スクリプトを使用してKafkaコンシューマーを作成できます。 引数としてトピック名とともに、ZooKeeperサーバーのホスト名とポートが必要です。

次のコマンドは、発行したトピックからのメッセージを消費します。 `+-from-beginning +`フラグの使用に注意してください。これは、コンシューマが開始される前に発行されたメッセージを消費するために存在します。

~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

設定に問題がない場合は、出力に「+ Hello、World」と表示されるはずです。

スクリプトは引き続き実行され、トピックにさらにメッセージが発行されるのを待ちます。 新しいターミナルを開いてプロデューサーを開始し、さらにいくつかのメッセージを公開してください。 これらはすべて、消費者の出力ですぐに見ることができるはずです。

テストが完了したら、CTRL + Cを押してコンシューマスクリプトを停止します。

ステップ8-KafkaTのインストール(オプション)

KafkaTは、Airbnbの便利な小さなツールです。これにより、Kafkaクラスターに関する詳細を表示し、コマンドラインからいくつかの管理タスクを実行しやすくなります。 Ruby gemであるため、使用するにはRubyが必要です。 また、依存する他のgemをビルドするには、 `+ build-essential `パッケージも必要です。 ` apt-get`を使用してテーマをインストールします。

sudo apt-get install ruby ruby-dev build-essential

`+ gem +`コマンドを使用してKafkaTをインストールできるようになりました:

sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc

`+ vi `を使用して、 ` .kafkatcfg +`という新しいファイルを作成します。

vi ~/.kafkatcfg

これは、KafkaTがKafkaサーバーのインストールおよびログディレクトリを決定するために使用する構成ファイルです。 また、KafkaTがZooKeeperインスタンスを指すようにする必要があります。 したがって、次の行を追加します。

〜/ .kafkatcfg

{
 "kafka_path": "~/kafka",
 "log_path": "/tmp/kafka-logs",
 "zk_path": "localhost:2181"
}

これで、KafkaTを使用する準備が整いました。 まず、すべてのKafkaパーティションに関する詳細を表示する方法を示します。

kafkat partitions

次のような出力が表示されるはずです。

kafkatパーティションの出力

Topic           Partition   Leader      Replicas        ISRs
TutorialTopic   0             0           [0]           [0]

KafkaTの詳細については、https://github.com/airbnb/kafkat [GitHub repository]を参照してください。

手順9-マルチノードクラスターのセットアップ(オプション)

より多くのUbuntu 14.04マシンを使用してマルチブローカークラスターを作成する場合は、新しいマシンのそれぞれでステップ1、ステップ3、ステップ4、ステップ5を繰り返す必要があります。 さらに、それぞれの `+ server.properties`ファイルで次の変更を行う必要があります。

  • `+ broker.id +`プロパティの値は、クラスター全体で一意になるように変更する必要があります

  • すべてのノードが同じZooKeeperインスタンスを指すように、 `+ zookeeper.connect +`プロパティの値を変更する必要があります

クラスターに複数のZooKeeperインスタンスが必要な場合、各ノードの `+ zookeeper.connect +`プロパティの値は、すべてのZooKeeperインスタンスのIPアドレスとポート番号をリストした同一のコンマ区切り文字列である必要があります。

ステップ10-Kafkaユーザーを制限する

すべてのインストールが完了したので、 `+ kafka `ユーザーの管理者権限を削除できます。 その前に、ログアウトしてから、他の非ルートsudoユーザーとしてログインし直してください。 このチュートリアルを開始したときと同じシェルセッションをまだ実行している場合は、単に「 exit +」と入力します。

`+ kafka `ユーザーの管理者権限を削除するには、 ` sudo +`グループから削除します。

sudo deluser kafka sudo

Kafkaサーバーのセキュリティをさらに向上させるには、 `+ passwd `コマンドを使用して ` kafka +`ユーザーのパスワードをロックします。 これにより、誰も直接ログインできなくなります。

sudo passwd kafka -l

この時点で、rootまたはsudoユーザーのみが次のコマンドを入力して「+ kafka +」としてログインできます。

sudo su - kafka

将来、ロックを解除する場合は、「+ passwd 」と「 -u +」オプションを使用します。

sudo passwd kafka -u

結論

これで、Ubuntuサーバーで実行されている安全なApache Kafkaができました。 Kafkaクライアントを使用してKafkaプロデューサーとコンシューマーを作成することにより、プロジェクトで簡単に使用できますほとんどのプログラミング言語。 Kafkaの詳細については、http://kafka.apache.org/documentation.html [ドキュメント]をご覧ください。