🦘

ローカルでApache Kafkaをたてる

2022/08/22に公開

目的

本番では AWS MSKを使って Apache Kafka を利用しているが、
ローカルでの構築のためdocker-composeでたてる。
localstackでも用意できそうなのですが、2022年8月現在有料版しかMSK対応していないようなのでこちらの方法にしています

bitnamiとは

今回はbitnami製のイメージを使います。
ちなみにbitnamiはWordpressやKubernetesなどを簡単に構築できるアプリケーションを提供しておりVMwareが買収しているよう。

コード

docker-compose.yml
version: '3.9'

services:
  # Zookeeper
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports: 
      - '2181:2181'
    container_name: zookeeper
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    tty: true
    networks:
      - kafka_network

  # Kafka Broker
  kafka:
    image: 'bitnami/kafka:latest'
    ports:
      - '9093:9093'
      - '9094:9094'
    container_name: kafka
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT,EXTERNAL_DOCKER:PLAINTEXT
      - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093,EXTERNAL_DOCKER://:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://localhost:9093,EXTERNAL_DOCKER://host.docker.internal:9094
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
    depends_on:
      - zookeeper
    tty: true
    networks:
      - kafka_network

  # Kafka UI
  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - '8080:8080'
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=2181
      - KAFKA_CLUSTERS_0_READONLY=false
    networks:
      - kafka_network

networks:
  kafka_network:

設定内容

bitnami/zookeeper

設定 内容 初期値
ALLOW_ANONYMOUS_LOGIN yas or no 認証が必要か? ローカルでは入らなそう no

bitnami/kafka

設定 内容 初期値
KAFKA_CFG_ZOOKEEPER_CONNECT zookeeperのHOST:PORT
ALLOW_PLAINTEXT_LISTENER yes or no 認証の有無 no
KAFKA_BROKER_ID ブローカーID
KAFKA_CFG_LISTENERS Kafkaリスナーをコンマ区切りでリストする
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP リスナーごとに指定するセキュリティプロトコルキーペア
KAFKA_CFG_ADVERTISED_LISTENERS リスナーのコンマ区切りリストで、ホストまたは IP およびポートを指定
KAFKA_INTER_BROKER_LISTENER_NAME ブローカー間通信に使用する対象のリスナー

起動

docker-compose up
略
kafka-ui     |  _   _ ___    __             _                _          _  __      __ _
kafka-ui     | | | | |_ _|  / _|___ _ _    /_\  _ __ __ _ __| |_  ___  | |/ /__ _ / _| |_____
kafka-ui     | | |_| || |  |  _/ _ | '_|  / _ \| '_ / _` / _| ' \/ -_) | ' </ _` |  _| / / _`|
kafka-ui     |  \___/|___| |_| \___|_|   /_/ \_| .__\__,_\__|_||_\___| |_|\_\__,_|_| |_\_\__,|
kafka-ui     |                                  |_|
kafka-ui     |
略

kafka UI

localhost:8080

参考

https://hub.docker.com/r/bitnami/zookeeper
https://hub.docker.com/r/bitnami/kafka/
https://github.com/bitnami/bitnami-docker-kafka
https://docs.confluent.io/ja-jp/platform/6.2.0/kafka/multi-node.html

Discussion