はじめに
Oracle Cloud Infrastructure上でKafkaを使用するには、いくつかの選択肢があります。
- PaaSを利用する (Oracle Event Hub Cloud Service)
- IaaSでComputeノード上に構築する
後者の場合、Terraformスクリプトで事前定義済みの構成を簡単にdeploy する方法があります。が、今回は使用できるCloudリソース(VM数)の都合で、1台のCompute Node上に手動インストールしたものを利用しました。
環境
- Oracle Cloud Infrastructure 上 の Computeインスタンス (VM Instance)
- OS: CentOS 7
- Private IPアドレス:10.0.1.3 とする
- Oracle Cloud Infrastructure 環境で Computeインスタンスを作成すると、VCN(仮想ネットワーク)内で使用するPrivate IPアドレスと、グローバルにアクセス可能なPublic IPアドレスが付与されます
インストール内容
- Confluent社が配布するディストリビューション(Confluent Platform)のOSS版
- confluent-platform-oss-2.11
- rootユーザで rpmインストール
- Kafkaの起動停止は confluentユーザで行う
インストール
rootで実行
# rpm --import http://packages.confluent.io/rpm/3.2/archive.key
# cat /etc/yum.repos.d/confluent.repo
[Confluent.dist]
name=Confluent repository (dist)
baseurl=http://packages.confluent.io/rpm/3.2/7
gpgcheck=1
gpgkey=http://packages.confluent.io/rpm/3.2/archive.key
enabled=1
[Confluent]
name=Confluent repository
baseurl=http://packages.confluent.io/rpm/3.2
gpgcheck=1
gpgkey=http://packages.confluent.io/rpm/3.2/archive.key
enabled=1
# yum clean all
# yum install confluent-platform-oss-2.11
ユーザとディレクトリの作成
# mkdir /var/lib/zookeeper
# mkdir /var/lib/kafka <== 今回はすでに存在していた
# chmod a+w /var/lib/zookeeper (乱暴だが一旦コレで)
# chmod a+w /var/lib/kafka (同上)
# adduser confluent
# passwd confluent
設定ファイルの編集(rootで)
OCI上の別のComputeと通信できるよう、IPアドレスを設定する。(オリジナルの設定ファイルではlocalhostでのみ通信可能)
それぞれ設定ファイルを編集。以下のエントリを探してlocalhost指定ではなくPrivate IPアドレスを指定するよう変更する。
- 後でKafka Connectを動かすので、ここではKafka Connect用の設定ファイルも一緒に編集している。(/etc/kafka/connect-distributed.properties)
listeners=PLAINTEXT://10.0.1.3:9092
bootstrap.servers=10.0.1.3:9092
起動
confluentユーザで実施。zookeeper, kafka server, kafka connectorを順に起動。
- 後でKafka Connectを動かすので、ここでは schema-registry と Kafka Connect(connect-distributed) も一緒に起動している。
$ /usr/bin/zookeeper-server-start /etc/kafka/zookeeper.properties
$ /usr/bin/kafka-server-start /etc/kafka/server.properties
$ /usr/bin/schema-registry-start /etc/schema-registry/schema-registry.properties
$ connect-distributed /etc/kafka/connect-distributed.properties
Kafkaを動かしてみる
TOPICの作成 (TOPIC名:mytest1とする)
$ kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic mytest1
Consumerの起動
$ kafka-console-consumer --bootstrap-server 10.0.1.3:9092 --topic mytest1
Producerの起動
$ kafka-console-producer --broker-list 10.0.1.3:9092 --topic mytest1
Producer側のコンソールに何か入力すると、Consumer側のコンソールに同じ文字列が表示される。
ここでは、「hello world!」と入力。
consumer側(起動したコンソール):
$ kafka-console-consumer --bootstrap-server 10.0.1.3:9092 --topic mytest1
hello world! <-- Producer側から投入したメッセージが表示される
(Optional): VNCのインストール
作業効率化目的でVNCをインストールし起動
# yum groupinstall "Server with GUI"
# yum install vnc-server
$ vncserver :1
(Optional): PORTの開放とFirewall設定
リモートマシンからのTOPICへの投入ができるよう設定する。具体的には、Oracle CloudのVCN(仮想ネットワーク)のPORT開放と、VMインスタンスのFirewall設定を行う。
設定方法はこちら
※PORT 9092と5901に読み替えて実施。(Kafka:9092, VNC:5901)