序章

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

このチュートリアルでは、Ubuntu14.04にApacheKafka0.8.2.1をインストールして使用する方法を学習します。

前提条件

フォローするには、次のものが必要です。

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

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

注: Apache Kafkaをセットアップした後、このサーバーで他のタスクを実行するために、root以外の別のユーザーを作成することをお勧めします。

ルートとして、kafkaというユーザーを作成します。 useradd 指図:

  1. useradd kafka -m

を使用してパスワードを設定します passwd:

  1. passwd kafka

に追加します sudo Kafkaの依存関係をインストールするために必要な特権を持つようにグループ化します。 これは、 adduser 指図:

  1. adduser kafka sudo

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

  1. su - kafka

ステップ2—Javaをインストールします

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

  1. sudo apt-get update

Apache KafkaにはJavaランタイム環境が必要なので、 apt-get インストールするには default-jre パッケージ:

  1. sudo apt-get install default-jre

ステップ3—ZooKeeperをインストールします

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

ZooKeeperパッケージはUbuntuのデフォルトのリポジトリで利用できるため、 apt-get.

  1. sudo apt-get install zookeeperd

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

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

  1. telnet localhost 2181

Telnetプロンプトで、次のように入力します ruok を押して ENTER.

すべてがうまくいけば、ZooKeeperは言うでしょう imok Telnetセッションを終了します。

ステップ4—KafkaBinariesをダウンロードして抽出する

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

まず、というディレクトリを作成します Downloads すべてのダウンロードを保存します。

  1. mkdir -p ~/Downloads

使用する wget Kafkaバイナリをダウンロードします。

  1. 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インストールのベースディレクトリになります。

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

を使用してダウンロードしたアーカイブを抽出します tar 指図。

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

ステップ5—Kafkaサーバーを構成する

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

開ける server.properties を使用して vi:

  1. vi ~/kafka/config/server.properties

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

〜/ kafka / config / server.properties
delete.topic.enable = true

ファイルを保存して終了します vi.

ステップ6—Kafkaサーバーを起動します

を実行します kafka-server-start.sh スクリプトを使用して nohup シェルセッションから独立したバックグラウンドプロセスとしてKafkaサーバー(Kafkaブローカーとも呼ばれます)を起動します。

  1. 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—インストールをテストする

ここで、「HelloWorld」メッセージを公開して消費し、Kafkaサーバーが正しく動作していることを確認しましょう。

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

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

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

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

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

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

  1. ~/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が必要です。 また、 build-essential それが依存する他の宝石を構築できるようにするためのパッケージ。 を使用してそれらをインストールします apt-get:

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

これで、KafkaTを使用してインストールできます。 gem 指図:

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

使用する vi と呼ばれる新しいファイルを作成するには .kafkatcfg.

  1. vi ~/.kafkatcfg

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

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

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

  1. kafkat partitions

次の出力が表示されます。

kafkatパーティションの出力
Topic		    Partition	Leader		Replicas		ISRs	
TutorialTopic	0		      0		      [0]			[0]

KafkaTの詳細については、KafkaTのGitHubリポジトリを参照してください。

ステップ9—マルチノードクラスターをセットアップする(オプション)

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

  • の値 broker.id プロパティは、クラスター全体で一意になるように変更する必要があります
  • の値 zookeeper.connect すべてのノードが同じZooKeeperインスタンスを指すようにプロパティを変更する必要があります

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

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

すべてのインストールが完了したので、を削除できます kafka ユーザーの管理者権限。 その前に、root以外のsudoユーザーとしてログアウトして再度ログインしてください。 このチュートリアルを開始したのと同じシェルセッションをまだ実行している場合は、次のように入力します。 exit.

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

  1. sudo deluser kafka sudo

Kafkaサーバーのセキュリティをさらに向上させるには、 kafka を使用したユーザーのパスワード passwd 指図。 これにより、誰も直接ログインできないようになります。

  1. sudo passwd kafka -l

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

  1. sudo su - kafka

今後、ロックを解除したい場合は、 passwd とともに -u オプション:

  1. sudo passwd kafka -u

結論

これで、Ubuntuサーバーで安全なApacheKafkaが実行されます。 ほとんどのプログラミング言語で利用可能なKafkaクライアントを使用してKafkaプロデューサーとコンシューマーを作成することにより、プロジェクトで簡単に利用できます。 Kafkaの詳細については、ドキュメントを参照してください。