CentOS 7にApache Kafkaをインストールする方法

著者はhttps://www.brightfunds.org/funds/foss-nonprofits [無料およびオープンソース基金]を選択して、https://do.co/w4do-cta [Donationsのために書く]の一部として寄付を受け取りましたプログラム。

前書き

Apache Kafkaは、大量のリアルタイムデータを効率的に処理するように設計された人気のある分散メッセージブローカーです。 Kafkaクラスターは、非常にスケーラブルで耐障害性があるだけでなく、http://activemq.apache.org/ [ActiveMQ]やhttps://www.rabbitmqなどの他のメッセージブローカーと比較してスループットがはるかに高くなっています。 com / [RabbitMQ]。 一般に_publish / subscribe_メッセージングシステムとして使用されますが、公開されたメッセージの永続的なストレージを提供するため、多くの組織がログの集約にも使用しています。

パブリッシュ/サブスクライブメッセージングシステムにより、1人または複数のプロデューサーが、コンシューマの数やメッセージの処理方法を考慮することなく、メッセージをパブリッシュできます。 登録されたクライアントには、更新および新しいメッセージの作成が自動的に通知されます。 このシステムは、クライアントが定期的にポーリングして新しいメッセージが利用可能かどうかを判断するシステムよりも効率的でスケーラブルです。

このチュートリアルでは、CentOS 7にApache Kafka 2.1.1をインストールして使用します。

前提条件

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

  • 1台のCentOS 7サーバーと、sudo特権を持つ非rootユーザー。 非rootユーザーが設定されていない場合は、このhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [ガイド]で指定されている手順に従ってください。

  • サーバー上に少なくとも4GBのRAM。 この量のRAMなしでインストールすると、起動時にhttps://en.wikipedia.org/wiki/Java_virtual_machine[Java仮想マシン(JVM)]が「メモリ不足」例外をスローして、Kafkaサービスが失敗する場合があります。

  • OpenJDK 8がサーバーにインストールされています。 このバージョンをインストールするには、https://www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora#install-openjdk-8 [これらの指示]の特定のバージョンのインストールに従ってくださいOpenJDK。 KafkaはJavaで記述されているため、JVMが必要です。ただし、その起動シェルスクリプトにはバージョン検出のバグがあり、8以上のJVMバージョンでは起動に失敗します。

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

Kafkaはネットワーク経由でリクエストを処理できるため、専用のユーザーを作成する必要があります。 これにより、Kafkaサーバーが侵害された場合にCentOSマシンへの損傷を最小限に抑えることができます。 このステップでは専用の* kafka *ユーザーを作成しますが、Kafkaのセットアップが完了したら、このサーバーで他のタスクを実行するために別の非rootユーザーを作成する必要があります。

非ルートsudoユーザーとしてログインし、 `+ useradd +`コマンドで* kafka *というユーザーを作成します。

sudo useradd kafka -m

`+ -m `フラグは、ユーザーのホームディレクトリが作成されることを保証します。 このホームディレクトリ ` / home / kafka +`は、以下のセクションのコマンドを実行するためのワークスペースディレクトリとして機能します。

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

sudo passwd kafka

`+ adduser `コマンドで* kafka *ユーザーを ` wheel +`グループに追加し、Kafkaの依存関係をインストールするために必要な権限を付与します。

sudo usermod -aG wheel kafka

これで、* kafka *ユーザーの準備が整いました。 `+ su +`を使用してこのアカウントにログインします。

su -l kafka

Kafka固有のユーザーを作成したので、Kafkaバイナリのダウンロードと抽出に進みます。

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

Kafkaバイナリをダウンロードして、* kafka *ユーザーのホームディレクトリ内の専用フォルダーに抽出しましょう。

開始するには、 `+ Downloads `という名前のディレクトリを ` / home / kafka +`に作成してダウンロードを保存します:

mkdir ~/Downloads

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

curl "https://www.apache.org/dist/kafka//kafka_.tgz" -o ~/Downloads/kafka.tgz

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

mkdir ~/kafka && cd ~/kafka

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

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

`-strip 1 +`フラグを指定して、アーカイブのコンテンツが別のディレクトリ( `〜/ kafka / kafka _ / `など)ではなく、 `〜/ kafka / +`自体に抽出されるようにします。それの。

バイナリのダウンロードと抽出が正常に完了したので、トピックの削除を許可するための設定をKafkaに進めます。

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

Kafkaのデフォルトの動作では、topic、メッセージを公開できるカテゴリ、グループ、またはフィード名を削除することはできません。 これを変更するには、構成ファイルを編集しましょう。

Kafkaの設定オプションは、「+ server.properties」で指定されます。 このファイルを `+ vi +`またはお気に入りのエディターで開きます:

vi ~/kafka/config/server.properties

Kafkaトピックを削除できる設定を追加しましょう。 `+ i +`を押してテキストを挿入し、ファイルの下部に次を追加します。

〜/ kafka / config / server.properties

delete.topic.enable = true

完了したら、 `+ ESC `を押して挿入モードを終了し、 `:wq +`を押して変更をファイルに書き込んで終了します。 Kafkaを構成したので、起動時にsystemdユニットファイルを作成して実行し、有効化することに進みます。

ステップ4-Systemdユニットファイルの作成とKafkaサーバーの起動

このセクションでは、Kafkaサービス用のhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files[systemd unit files]を作成します。 これは、他のLinuxサービスと一貫した方法でKafkaの開始、停止、再起動などの一般的なサービスアクションを実行するのに役立ちます。

Zookeeperは、Kafkaがクラスターの状態と構成を管理するために使用するサービスです。 通常、多くの分散システムで不可欠なコンポーネントとして使用されます。 詳細については、https://zookeeper.apache.org/doc/current/index.html [Zookeeper docs]をご覧ください。

`+ zookeeper +`のユニットファイルを作成します。

sudo vi /etc/systemd/system/zookeeper.service

次のユニット定義をファイルに入力します。

/etc/systemd/system/zookeeper.service

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

`+ [Unit] +`セクションは、Zookeeperがネットワークを必要とし、ファイルシステムが起動する前に準備ができていることを指定します。

`+ [Service] `セクションは、systemdがサービスの開始と停止に ` zookeeper-server-start.sh `および ` zookeeper-server-stop.sh +`シェルファイルを使用することを指定します。 また、異常終了した場合にZookeeperを自動的に再起動するように指定します。

編集が終了したら、ファイルを保存して閉じます。

次に、 `+ kafka +`のsystemdサービスファイルを作成します。

sudo vi /etc/systemd/system/kafka.service

次のユニット定義をファイルに入力します。

/etc/systemd/system/kafka.service

[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

`+ [Unit] `セクションは、このユニットファイルが ` zookeeper.service `に依存することを指定します。 これにより、 ` kafa `サービスの開始時に ` zookeeper +`が自動的に開始されます。

`+ [Service] `セクションは、systemdがサービスの開始と停止に ` kafka-server-start.sh `と ` kafka-server-stop.sh +`シェルファイルを使用することを指定します。 また、異常終了した場合にKafkaを自動的に再起動するように指定します。

編集が終了したら、ファイルを保存して閉じます。

ユニットが定義されたので、次のコマンドでKafkaを起動します。

sudo systemctl start kafka

サーバーが正常に起動したことを確認するには、 `+ kafka +`ユニットのジャーナルログを確認します。

journalctl -u kafka

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

OutputJul 17 18:38:59 kafka-centos systemd[1]: Started kafka.service.

これで、ポート `+ 9092 +`でリッスンするKafkaサーバーができました。

`+ kafka `サービスを開始しましたが、サーバーを再起動しても、自動的には開始されません。 サーバーの起動時に ` kafka +`を有効にするには、次を実行します:

sudo systemctl enable kafka

サービスを開始して有効にしたので、インストールを確認しましょう。

ステップ5-インストールのテスト

*「Hello World」*メッセージを公開および使用して、Kafkaサーバーが正しく動作していることを確認しましょう。 Kafkaでメッセージを公開するには、次のものが必要です。

  • producer。レコードおよびデータをトピックに公開できます。

  • トピックからメッセージとデータを読み取る_consumer_。

まず、次のように入力して、「+ TutorialTopic +」という名前のトピックを作成します。

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

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

OutputCreated topic "TutorialTopic".

`+ 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-console-consumer.sh +`スクリプトを使用してKafkaコンシューマーを作成できます。 ZooKeeperサーバーのホスト名とポート、および引数としてのトピック名が必要です。

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

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

設定に問題がない場合は、ターミナルに「+ Hello、World」と表示されるはずです。

OutputHello, World

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

テストが終了したら、 `+ CTRL + C +`を押してコンシューマスクリプトを停止します。 インストールのテストが完了したので、KafkaTのインストールに進みましょう。

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

KafkaTは、Airbnbのツールで、Kafkaクラスターに関する詳細を表示し、コマンドラインから特定の管理タスクを実行しやすくします。 Ruby gemであるため、使用するにはRubyが必要です。 また、依存する他のgemをビルドできるようにするために、 `+ ruby​​-devel `と ` make `や ` gcc `などのビルド関連パッケージも必要です。 ` yum +`を使用してインストールします:

sudo yum install ruby ruby-devel make gcc patch

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

sudo gem install kafkat

KafkaTは、設定ファイルとして「+ .kafkatcfg +」を使用して、Kafkaサーバーのインストールディレクトリとログディレクトリを決定します。 また、KafkaTをZooKeeperインスタンスにポイントするエントリが必要です。

`+ .kafkatcfg +`という新しいファイルを作成します。

vi ~/.kafkatcfg

次の行を追加して、KafkaサーバーとZookeeperインスタンスに関する必要な情報を指定します。

〜/ .kafkatcfg

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

編集が終了したら、ファイルを保存して閉じます。

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

kafkat partitions

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

OutputTopic                 Partition   Leader      Replicas        ISRs
TutorialTopic         0             0         [0]             [0]
__consumer_offsets    0             0         [0]                           [0]
...
...

クライアント関連情報を保存するためにKafkaが使用する内部トピックである「+ TutorialTopic 」と「 consumer_offsets 」が表示されます。 ` consumer_offsets`で始まる行は安全に無視できます。

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

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

複数のCentOS 7マシンを使用してマルチブローカークラスターを作成する場合は、新しいマシンごとに手順1、手順4、および手順5を繰り返す必要があります。 さらに、それぞれの `+ server.properties`ファイルで次の変更を行う必要があります。

  • + broker.id +`プロパティの値は、クラスター全体で一意になるように変更する必要があります。 このプロパティは、クラスター内の各サーバーを一意に識別し、値として任意の文字列を使用できます。 たとえば、 `+" server1 "+、 `" server2 "`など。

  • + zookeeper.connect +`プロパティの値は、すべてのノードが同じZooKeeperインスタンスを指すように変更する必要があります。 このプロパティは、Zookeeperインスタンスのアドレスを指定し、 `+ <HOSTNAME / IP_ADDRESS>:<PORT> +`形式に従います。 たとえば、 `+":2181 "+、 `":2181 "`など。

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

ステップ8-Kafkaユーザーの制限

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

sudoグループから* kafka *ユーザーを削除します。

sudo gpasswd -d kafka wheel

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

sudo passwd kafka -l

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

sudo su - kafka

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

sudo passwd kafka -u

これで、* kafka *ユーザーの管理者権限が正常に制限されました。

結論

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

前の投稿:Ubuntu 14.04でWP Super CacheとJetpack Photonを使用してWordPressのパフォーマンスを最適化する方法
次の投稿:CentOS 7にLinux、Apache、MySQL、PHP(LAMP)スタックをインストールする方法