ウェブサイト検索

RHEL 8にKafkaをインストールする方法


Apache Kafkaは、分散型ストリーミングプラットフォームです。その豊富なAPI(アプリケーションプログラミングインターフェイス)セットを利用して、ほとんどすべてのものをKafkaにデータのソースとして接続でき、他方では、多数の消費者を設定して、処理のためにレコードのストリームを受け取ることができます。Kafkaは高いスケーラビリティを持ち、データストリームを信頼性が高くフォールトトレラントな方法で保存します。接続の観点から見ると、Kafkaは多くの異種システム間の架け橋として機能し、それによって提供されたデータを転送および永続化する能力に依存できます。

このチュートリアルでは、Red Hat Enterprise Linux 8 に Apache Kafka をインストールし、管理の容易さのために systemd ユニットファイルを作成し、付属のコマンドラインツールを使って機能をテストします。

このチュートリアルでは、あなたは学びます:

  • Apache Kafkaのインストール方法
  • KafkaとZookeeperのためのsystemdサービスを作成する方法
  • コマンドラインクライアントでKafkaをテストする方法

コマンドラインからKafkaトピックのメッセージを消費する。

ソフトウェアの要件と使用される規約

Redhat 8にKafkaをインストールする方法:ステップバイステップの手順

Apache KafkaはJavaで書かれているため、インストールを進めるにはOpenJDK 8がインストールされている必要があります。Kafkaは、分散協調サービスであるApache Zookeeperに依存しており、これもJavaで書かれていて、ダウンロードするパッケージに含まれています。HA(高可用性)サービスを単一ノードにインストールすることはその目的を損ないますが、KafkaのためにZookeeperをインストールして実行します。

  1. 最近のミラーからKafkaをダウンロードするには、公式のダウンロードサイトを確認する必要があります。そこから.tar.gzファイルのURLをコピーできます。wgetを使用し、貼り付けたURLを使用してターゲットマシンにパッケージをダウンロードします:

    wget https://www-eu.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz -O /opt/kafka_2.11-2.1.0.tgz
  2. /opt ディレクトリに入って、アーカイブを抽出します:

    cd /opt
    tar -xvf kafka_2.11-2.1.0.tgz

    そして、私たちの生活を楽にするために、今作成した/opt/kafka_2_11-2.1.0ディレクトリを指す/opt/kafkaという名前のシンボリックリンクを作成してください。

    ln -s /opt/kafka_2.11-2.1.0 /opt/kafka
  3. 私たちは、zookeeper と kafka サービスの両方を実行する非特権ユーザーを作成します。

    useradd kafka
  4. そして、抽出した全ディレクトリの所有者を新しいユーザーに再帰的に設定します:

    chown -R kafka:kafka /opt/kafka*
  5. 私たちは以下の内容でユニットファイル /etc/systemd/system/zookeeper.service を作成します:

    [Unit]
    Description=zookeeper
    After=syslog.target network.target
    
    [Service]
    Type=simple
    
    User=kafka
    Group=kafka
    
    ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
    ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
    
    [Install]
    WantedBy=multi-user.target

    シンボリックリンクを作成したので、バージョン番号を書く必要が3回もないことに注意してください。次の単位ファイルであるKafkaのための/etc/systemd/system/kafka.serviceにも同様のことが適用され、次の構成行が含まれています:

    [Unit]
    Description=Apache Kafka
    Requires=zookeeper.service
    After=zookeeper.service
    
    [Service]
    Type=simple
    
    User=kafka
    Group=kafka
    
    ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
    ExecStop=/opt/kafka/bin/kafka-server-stop.sh
    
    [Install]
    WantedBy=multi-user.target
  6. 新しいユニットファイルを読み込むために systemd を再読み込みする必要があります:

    systemctl daemon-reload
  7. これから新しいサービスを始めることができます(この順序で):

    systemctl start zookeeper
    systemctl start kafka

    すべてがうまくいけば、systemdは以下の出力に似た両方のサービスの状態を報告するはずです:

    systemctl status zookeeper.service
      zookeeper.service - zookeeper
       Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: disabled)
       Active: active (running) since Thu 2019-01-10 20:44:37 CET; 6s ago
     Main PID: 11628 (java)
        Tasks: 23 (limit: 12544)
       Memory: 57.0M
       CGroup: /system.slice/zookeeper.service
                11628 java -Xmx512M -Xms512M -server [...]
    
    systemctl status kafka.service
      kafka.service - Apache Kafka
       Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: disabled)
       Active: active (running) since Thu 2019-01-10 20:45:11 CET; 11s ago
     Main PID: 11949 (java)
        Tasks: 64 (limit: 12544)
       Memory: 322.2M
       CGroup: /system.slice/kafka.service
                11949 java -Xmx1G -Xms1G -server [...]
  8. オプションで、両方のサービスの自動起動をブート時に有効にすることができます。

    systemctl enable zookeeper.service
    systemctl enable kafka.service
  9. 機能をテストするために、1つのプロデューサーと1つのコンシューマークライアントでKafkaに接続します。プロデューサーによって提供されたメッセージは、コンシューマーのコンソールに表示される必要があります。しかし、その前に、この2つがメッセージを交換するための媒体が必要です。我々はKafkaの用語でtopicと呼ばれる新しいデータチャネルを作成し、プロバイダーが公開し、コンシューマーが購読する場所になります。トピックを
    FirstKafkaTopicと呼びます。このトピックを作成するためにkafkaユーザーを使用します。

    /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic FirstKafkaTopic
  10. コマンドラインから消費者クライアントを起動して、前のステップで作成された(この時点では空の)トピックにサブスクライブします:

    /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning
  11. コンソールとそこに開いているクライアントをそのままにします。このコンソールは、プロデューサークライアントで公開するメッセージを受信する場所です。

  12. 別の端末でプロデューサークライアントを起動し、作成したトピックにいくつかのメッセージを公開します。利用可能なトピックを確認するためにKafkaをクエリできます:

    /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
    FirstKafkaTopic

    そして、消費者が加入しているものに接続し、メッセージを送信します:

    /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic FirstKafkaTopic
    > new message published by producer from console #2

    消費者端末にメッセージが間もなく表示されるはずです:

    /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic FirstKafkaTopic --from-beginning
     new message published by producer from console #2
  13. メッセージが表示されれば、私たちのテストは成功しており、Kafkaのインストールは意図した通りに動作しています。多くのクライアントがこのチュートリアルで作成した単一ノードのセットアップでも、同じ方法で1つまたは複数のトピックレコードを提供し、消費することができます。

関連記事: