遊びで使っている、MacBook Air (M1, 2020) メモリ 8GBの環境でKafkaを使ったアプリケーションを作ろうとしていた。 Kafka環境構築のために、当初はk8sを使おうとしていたのだが、メモリ不足で立ち上げることができなかった。 次にdocker composeを利用することも考えたが、興味の対象はKafkaの運用ではなく、Kafkaで実行されるアプリケーションにあったので、とりあえずOSX上で直接Kafkaを動かすことにした。 あくまで開発用のため、レプリケーションの設定も含めて適当である。
- ローカル環境で開発用のKafkaを起動する
- コマンドラインによりBrokerを起動する
- コマンドラインによりConsumerを起動する
Kafkaは今のところ(version 2.8)、ZooKeeperに依存している。 そのため、KafkaだけではなくZooKeeperもダウンロードする。
Apache ZooKeeper 3.7.0
をダウンロード。
http://zookeeper.apache.org/releases.html#download
Binary downloadsの kafka_2.13-2.8.0.tgz
をダウンロード。
https://kafka.apache.org/downloads
ダウンロードしたら展開する。 今後、次のようなディレクトリ構成を想定する。
kafka-dev
|- kafka
\- zookeeper
次の内容のファイルを kafka-dev/apache-zookeeper-3.7.0-bin/conf/zoo.cfg
として作成する。
開発用であるため、dataDirを /tmp
の下にしている。
必要に応じてパスを変えるとよい。
tickTime=2000
dataDir=/tmp/zookeeper
admin.serverAddress=127.0.0.1
clientPortAddress=127.0.0.1
clientPort=2181
次のコマンドで実行する
$ zookeeper/bin/zkServer.sh start-foreground
$ cp kafka/config/server.properties kafka/config/my_server.properties
$ echo "auto.create.topics.enable=false" >> kafka/config/my_server.properties
$ kafka/bin/kafka-server-start.sh config/my_server.properties
auto.create.topics.enable=false
は自動でtopicを生成しないための設定。
起動しない場合、 /tmp/kafka-logs
を消して再起動する。一度起動しないことがあったが、ちゃんと調査していないがこれでなおった。
quickstart-events
というtopicを生成する。
$ kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
2つのイベントを送信する。
$ kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event
C-c
で終了。
$ kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event
Brokerで送信したイベントを受信できたら成功。
C-c
で終了。
どちらも C-c
で終了できる。
開発環境ではあるが、Kafkaから落とした方が親切だろう。
https://zookeeper.apache.org/doc/current/zookeeperStarted.html https://kafka.apache.org/quickstart