Ubuntu20.04にApacheKafkaをインストールする方法
序章
Apache Kafka は、大量のリアルタイムデータを処理するように設計された人気の分散メッセージブローカーです。 Kafkaクラスターは、高度にスケーラブルでフォールトトレラントです。 また、ActiveMQやRabbitMQなどの他のメッセージブローカーと比較してスループットがはるかに高くなっています。 一般にパブリッシュ/サブスクライブメッセージングシステムとして使用されますが、パブリッシュされたメッセージの永続的なストレージを提供するため、多くの組織でもログ集約に使用されます。
パブリッシュ/サブスクライブメッセージングシステムを使用すると、1つ以上のプロデューサーが、コンシューマーの数やメッセージの処理方法を考慮せずにメッセージをパブリッシュできます。 購読しているクライアントには、更新と新しいメッセージの作成について自動的に通知されます。 このシステムは、クライアントが定期的にポーリングして新しいメッセージが利用可能かどうかを判断するシステムよりも効率的でスケーラブルです。
このチュートリアルでは、Ubuntu20.04にApacheKafka2.6.3をインストールして使用します。
前提条件
フォローするには、次のものが必要です。
- 1台のUbuntu20.04サーバーとsudo権限を持つ非rootユーザー。 root以外のユーザーを設定していない場合は、このガイドで指定されている手順に従ってください。
- サーバーに少なくとも4GBのRAM。 この量のRAMを使用せずにインストールすると、Kafkaサービスが失敗する可能性があります。
- OpenJDK11がサーバーにインストールされています。 このバージョンをインストールするには、チュートリアル「Ubuntu20.04にAPTを使用してJavaをインストールする方法」に従ってください。 KafkaはJavaで記述されているため、JVMが必要です。
ステップ1—Kafkaのユーザーを作成する
Kafkaはネットワーク経由でリクエストを処理できるため、最初のステップはサービス専用のユーザーを作成することです。 これにより、誰かがKafkaサーバーを侵害した場合のUbuntuマシンへのダメージを最小限に抑えることができます。 専用を作成します kafka
このステップのユーザー。
root以外のsudoユーザーとしてログインし、というユーザーを作成します kafka
:
- sudo adduser kafka
プロンプトに従ってパスワードを設定し、 kafka
ユーザー。
次に、 kafka
ユーザーから sudo
とのグループ adduser
指図。 Kafkaの依存関係をインストールするには、次の権限が必要です。
- sudo adduser kafka sudo
君の kafka
これでユーザーの準備が整いました。 を使用してアカウントにログインします su
:
- su -l kafka
Kafka固有のユーザーを作成したので、Kafkaバイナリをダウンロードして抽出する準備が整いました。
ステップ2—Kafkaバイナリのダウンロードと抽出
Kafkaバイナリをダウンロードして、専用フォルダに抽出しましょう。 kafka
ユーザーのホームディレクトリ。
まず、にディレクトリを作成します /home/kafka
と呼ばれる Downloads
ダウンロードを保存するには:
- mkdir ~/Downloads
使用する curl
Kafkaバイナリをダウンロードするには:
- curl "https://downloads.apache.org/kafka/2.6.3/kafka_2.13-2.6.3.tgz" -o ~/Downloads/kafka.tgz
と呼ばれるディレクトリを作成します kafka
このディレクトリに移動します。 これは、Kafkaインストールのベースディレクトリになります。
- mkdir ~/kafka && cd ~/kafka
を使用してダウンロードしたアーカイブを抽出します tar
指図:
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
指定します --strip 1
アーカイブのコンテンツがで抽出されることを確認するフラグ ~/kafka/
それ自体であり、別のディレクトリ(たとえば ~/kafka/kafka_2.13-2.6.3/
)その中。
バイナリのダウンロードと抽出が正常に完了したので、Kafkaサーバーの構成を開始できます。
ステップ3—Kafkaサーバーの構成
Kafkaのデフォルトの動作では、トピックを削除できません。 Kafkaトピックは、メッセージを公開できるカテゴリ、グループ、またはフィード名です。 これを変更するには、構成ファイルを編集する必要があります。
Kafkaの構成オプションはで指定されています server.properties
. このファイルをで開く nano
またはお気に入りの編集者:
- nano ~/kafka/config/server.properties
まず、Kafkaトピックを削除できるようにする設定を追加します。 ファイルの最後に以下を追加します。
delete.topic.enable = true
次に、Kafkaログが保存されているディレクトリを変更します。 logs.dir
財産:
log.dirs=/home/kafka/logs
ファイルを保存して閉じます。 Kafkaを構成したので、次のステップは、起動時にKafkaサーバーを実行して有効にするためのsystemdユニットファイルを作成することです。
ステップ4—Systemdユニットファイルの作成とKafkaサーバーの起動
このセクションでは、Kafkaサービス用のsystemdユニットファイルを作成します。 これは、他のLinuxサービスと一貫した方法で、Kafkaの開始、停止、再起動などの一般的なサービスアクションを実行するのに役立ちます。
Zookeeperは、Kafkaがクラスターの状態と構成を管理するために使用するサービスです。 多くの分散システムで使用されています。 詳細については、公式Zookeeperドキュメントをご覧ください。
のユニットファイルを作成します zookeeper
:
- sudo nano /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
The [Unit]
セクションでは、Zookeeperを起動する前に、ネットワークとファイルシステムの準備ができている必要があることを指定しています。
The [Service]
セクションは、systemdが使用する必要があることを指定します zookeeper-server-start.sh
と zookeeper-server-stop.sh
サービスを開始および停止するためのシェルファイル。 また、Zookeeperが異常終了した場合に再起動する必要があることも指定しています。
このコンテンツを追加したら、ファイルを保存して閉じます。
次に、のsystemdサービスファイルを作成します kafka
:
- sudo nano /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
The [Unit]
セクションは、このユニットファイルが依存することを指定します zookeeper.service
. これにより、 zookeeper
が自動的に開始される kafka
サービスを開始します。
The [Service]
セクションは、systemdが使用する必要があることを指定します kafka-server-start.sh
と kafka-server-stop.sh
サービスを開始および停止するためのシェルファイル。 また、Kafkaが異常終了した場合に再起動する必要があることも指定しています。
ユニットを定義したので、次のコマンドでKafkaを起動します。
- sudo systemctl start kafka
サーバーが正常に起動したことを確認するには、ジャーナルログで kafka
単位:
- sudo systemctl status kafka
次のような出力が表示されます。
Output● kafka.service
Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-02-10 00:09:38 UTC; 1min 58s ago
Main PID: 55828 (sh)
Tasks: 67 (limit: 4683)
Memory: 315.8M
CGroup: /system.slice/kafka.service
├─55828 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1
└─55829 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xlog:gc*:file=>
Feb 10 00:09:38 cart-67461-1 systemd[1]: Started kafka.service.
これで、Kafkaサーバーがポートでリッスンします 9092
.
あなたは始めました kafka
サービス。 ただし、サーバーを再起動した場合、Kafkaは自動的に再起動しません。 を有効にするには kafka
サーバー起動時にサービスを実行するには、次のコマンドを実行します。
- sudo systemctl enable zookeeper
- sudo systemctl enable kafka
このステップでは、開始して有効にしました kafka
と zookeeper
サービス。 次のステップでは、Kafkaのインストールを確認します。
ステップ5—Kafkaインストールのテスト
このステップでは、Kafkaのインストールをテストします。 具体的には、「HelloWorld」メッセージを公開して消費し、Kafkaサーバーが正しく動作していることを確認します。
Kafkaでメッセージを公開するには、次のものが必要です。
- プロデューサー。トピックへのレコードとデータの公開を可能にします。
- トピックからメッセージとデータを読み取るコンシューマー。
まず、という名前のトピックを作成します TutorialTopic
:
- ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --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コンシューマーを作成します kafka-console-consumer.sh
脚本。 ZooKeeperサーバーのホスト名とポート、および引数としてのトピック名が必要です。
次のコマンドは、からのメッセージを消費します TutorialTopic
. の使用に注意してください --from-beginning
フラグ。コンシューマーが開始される前に公開されたメッセージの消費を許可します。
- ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
構成の問題がない場合は、次のように表示されます。 Hello, World
ターミナルに表示されます:
OutputHello, World
スクリプトは引き続き実行され、さらにメッセージが公開されるのを待ちます。 これをテストするには、新しいターミナルウィンドウを開き、サーバーにログインします。
この新しいターミナルで、プロデューサーを起動して別のメッセージを公開します。
- echo "Hello World from Sammy at DigitalOcean!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
コンシューマーの出力に次のメッセージが表示されます。
OutputHello, World
Hello World from Sammy at DigitalOcean!
テストが終了したら、を押します CTRL+C
コンシューマスクリプトを停止します。
これで、Ubuntu20.04にKafkaサーバーをインストールして構成しました。 次のステップでは、Kafkaサーバーのセキュリティを強化するためのいくつかの簡単なタスクを実行します。
ステップ6—Kafkaサーバーを強化する
インストールが完了したら、を削除できます kafka
ユーザーの管理者権限。 その前に、root以外のsudoユーザーとしてログアウトして再度ログインしてください。 このチュートリアルを開始したのと同じシェルセッションをまだ実行している場合は、次のように入力します exit
.
を削除します kafka
sudoグループのユーザー:
- sudo deluser kafka sudo
Kafkaサーバーのセキュリティをさらに向上させるには、 kafka
を使用したユーザーのパスワード passwd
指図。 これにより、誰もこのアカウントを使用してサーバーに直接ログインできないようになります。
- sudo passwd kafka -l
この時点で、rootまたはsudoユーザーのみが次のようにログインできます。 kafka
次のコマンドを入力します。
- sudo su - kafka
今後、ロックを解除したい場合は、 passwd
とともに -u
オプション:
- sudo passwd kafka -u
これで、 kafka
ユーザーの管理者権限。 Kafkaの使用を開始する準備ができました。または、次のオプションの手順に従って、KafkaTをシステムに追加します。
ステップ7— KafkaTのインストール(オプション)
KafkaTはAirbnbが開発したツールです。 Kafkaクラスターの詳細を表示し、コマンドラインから特定の管理タスクを実行するのが簡単になります。 ただし、Ruby gemであるため、使用するにはRubyが必要です。 また、 build-essential
他の宝石を構築するためのパッケージ KafkaT
に依存します。 を使用してそれらをインストールします apt
:
- sudo apt install ruby ruby-dev build-essential
これで、gemコマンドを使用してKafkaTをインストールできます。
- sudo CFLAGS=-Wno-error=format-overflow gem install kafkat
「Wno-error=format-overflow」コンパイルフラグは、Zookeeperの警告とエラーを抑制するために必要です。 kafkat
のインストールプロセス。
KafkaTは .kafkatcfg
Kafkaサーバーのインストールおよびログディレクトリを決定するための構成ファイルとして。 また、KafkaTをZooKeeperインスタンスにポイントするエントリが必要です。
と呼ばれる新しいファイルを作成します .kafkatcfg
:
- nano ~/.kafkatcfg
次の行を追加して、KafkaサーバーとZookeeperインスタンスに関する必要な情報を指定します。
{
"kafka_path": "~/kafka",
"log_path": "/home/kafka/logs",
"zk_path": "localhost:2181"
}
これで、KafkaTを使用する準備が整いました。 まず、これを使用してすべてのKafkaパーティションの詳細を表示する方法を次に示します。
- kafkat partitions
次の出力が表示されます。
Output[DEPRECATION] The trollop gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible.
/var/lib/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated
...
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
__consumer_offsets 0 0 [0] [0]
...
...
あなたが見るでしょう TutorialTopic
、 としても __consumer_offsets
、クライアント関連情報を保存するためにKafkaによって使用される内部トピック。 で始まる行は無視してかまいません __consumer_offsets
.
KafkaTの詳細については、KafkaTのGitHubリポジトリを参照してください。
結論
これで、UbuntuサーバーでApacheKafkaが安全に実行されます。 Kafkaクライアントを使用して、Kafkaをお気に入りのプログラミング言語に統合できるようになりました。
Kafkaの詳細については、Kafkaのドキュメントを参照することもできます。