Ubuntu 14.04にApache Kafkaをインストールする方法
Ubuntu 14.04を使用していませんか?別のバージョンまたはディストリビューションを選択してください。
紹介
Apache Kafkaは、大量のリアルタイムデータを効率的に処理するために設計された人気のある分散メッセージブローカーです。Kafkaクラスタは、高いスケーラビリティとフォールトトレランスを備えているだけでなく、ActiveMQやRabbitMQなどの他のメッセージブローカーに比べてはるかに高いスループットを持っています。一般的にはpub/subメッセージングシステムとして使用されますが、多くの組織が公開されたメッセージの永続的なストレージを提供するため、ログ集約にも利用しています。
このチュートリアルでは、Ubuntu 14.04にApache Kafka 0.8.2.1をインストールして使用する方法を学びます。
前提条件
続けるためには、次が必要です:
- Ubuntu 14.04 ドロップレット
- 少なくとも4GBのスワップスペース
ステップ 1 — Kafka のユーザーを作成する
Kafkaはネットワーク経由でリクエストを処理できるため、それ専用のユーザーを作成するべきです。これにより、Kafkaサーバーが侵害された場合のUbuntuマシンへの被害を最小限に抑えることができます。
注意:Apache Kafkaを設定した後、このサーバーで他の作業を行うために、異なる非ルートユーザーを作成することをお勧めします。
ルートとして、kafka という名前のユーザーを useradd コマンドを使用して作成します:
- useradd kafka -m
passwdを使用してそのパスワードを設定します:
- passwd kafka
sudo グループに追加して、Kafka の依存関係をインストールするために必要な権限を与えます。これは 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
Kafkaのバイナリをダウンロードするには、wgetを使用してください。
- 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サーバーの設定
次のステップはKakfaサーバーの設定です。
viを使ってserver.propertiesを開きます:
- vi ~/kafka/config/server.properties
デフォルトでは、Kafkaはトピックの削除を許可していません。トピックを削除できるようにするには、ファイルの最後に次の行を追加してください:
delete.topic.enable = true
ファイルを保存して、viを終了してください。
ステップ 6 — Kafka サーバーを開始する
kafka-server-start.shスクリプトをnohupを使用して実行し、シェルセッションとは独立したバックグラウンドプロセスとしてKafkaサーバー(Kafkaブローカーとも呼ばれる)を開始します。
- nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
数秒待ってから始めます。~/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 — インストールのテスト
では、Kafkaサーバーが正しく動作していることを確認するために、“Hello World ”メッセージを公開して消費しましょう。
メッセージを公開するには、Kafkaプロデューサーを作成する必要があります。コマンドラインからkafka-console-producer.shスクリプトを使用して簡単に作成できます。これは、Kafkaサーバーのホスト名とポート、トピック名を引数として受け取ります。
次のように入力して、TutorialTopicというトピックに“Hello, World ”という文字列を公開します:
- 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インスタンスを指し示すべきです。それに応じて、次の行を追加してください:
{
"kafka_path": "~/kafka",
"log_path": "/tmp/kafka-logs",
"zk_path": "localhost:2181"
}
あなたは今、KafkaTを使用する準備が整いました。まずは、すべてのKafkaパーティションの詳細を表示する方法を紹介します:
- kafkat partitions
次の出力が表示されるはずです:
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
KafkaTについてさらに学ぶには、そのGitHubリポジトリを参照してください。
ステップ9 — マルチノードクラスターの設定(オプション)
もしUbuntu 14.04のマシンを使ってマルチブローカークラスターを作成したい場合は、新しい各マシンでステップ1、ステップ3、ステップ4、ステップ5を繰り返す必要があります。さらに、それぞれのマシンのserver.propertiesファイルで以下の変更を行う必要があります:
broker.idプロパティの値は、クラスタ全体でユニークになるように変更されるべきです。zookeeper.connectプロパティの値は、すべてのノードが同じZooKeeperインスタンスを指すように変更されるべきです。
クラスタのために複数の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についてさらに学ぶには、そのドキュメントをお読みください。
