Strimzi - Apache Kafka on Kubernetes

Strimzi provides a way to run an Apache Kafka cluster on Kubernetes in various deployment configurations.

strimzi.io

What is Strimzi?

Strimzi는 Apache Kafka on Kubernetes and OpenShift를 목표로 운영되는 오픈소스 프로젝트입니다. 이 글은 strimzi on minikube 가이드 문서를 참고하여 맥에서 로컬 개발용 Kafka 구성 방법을 정리합니다.

Local setup

  1. minikube를 실행합니다. minikube 설치는 kubernetes 공식 문서를 참고합니다.
    minikube start
  2. kubernetes namespace를 생성합니다.
    kubectl create namespace kafka
  3. 설치 파일을 다운로드 및 적용합니다. (strimzi 0.13.0 버전 기준으로 진행)정상적으로 설정됐는지 보기 위해 pod를 확인합니다.
    curl -L https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.13.0/strimzi-cluster-operator-0.13.0.yaml \
      | sed 's/namespace: .*/namespace: kafka/' \
      | kubectl -n kafka apply -f -
    kubectl -n kafka get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    strimzi-cluster-operator-8697dcf649-x5wfw   1/1     Running   0          19h
  4. kafka 클러스터를 프로비저닝합니다. strimzi의 kafka 구성 example은 현재 4가지 정도 있는데, 여기서는 kafka와 zookeeper를 각각 persistent single 노드로 구성하는 예제를 적용해보겠습니다. 정상적으로 설치되고 있는지 보기 위해 pod를 watch 모드로 확인합니다.
    kubectl apply -f https://raw.githubusercontent.com/strimzi/strimzi-kafka-operator/0.13.0/examples/kafka/kafka-persistent-single.yaml -n kafka
    kubectl -n kafka get pods -w
    NAME                                        READY   STATUS              RESTARTS   AGE
    my-cluster-zookeeper-0                      0/2     ContainerCreating   0          2s
    strimzi-cluster-operator-8697dcf649-x5wfw   1/1     Running             0          20h
    my-cluster-zookeeper-0                      0/2     Running             0          43s
    my-cluster-zookeeper-0                      1/2     Running             0          57s
    my-cluster-zookeeper-0                      2/2     Running             0          66s
    my-cluster-kafka-0                          0/2     Pending             0          0s
    my-cluster-kafka-0                          0/2     Pending             0          0s
    my-cluster-kafka-0                          0/2     ContainerCreating   0          0s
    my-cluster-kafka-0                          0/2     Running             0          3s
    my-cluster-kafka-0                          1/2     Running             0          22s
    my-cluster-kafka-0                          2/2     Running             0          24s
    my-cluster-entity-operator-759fb59899-mnv7k   0/3     Pending             0          0s
    my-cluster-entity-operator-759fb59899-mnv7k   0/3     Pending             0          0s
    my-cluster-entity-operator-759fb59899-mnv7k   0/3     ContainerCreating   0          0s
    my-cluster-entity-operator-759fb59899-mnv7k   0/3     Running             0          1s
    my-cluster-entity-operator-759fb59899-mnv7k   1/3     Running             0          15s
    my-cluster-entity-operator-759fb59899-mnv7k   2/3     Running             0          18s
    my-cluster-entity-operator-759fb59899-mnv7k   3/3     Running             0          25s
    위 과정에서 Pending > Kill > retry를 반복한다면 minikube 인스턴스의 리소스 문제를 의심해봐야 합니다. 이를 해결하기 위해선 아래와 같이 진행하시기 바랍니다.
    • virtualBox 실행
    • minikube 인스턴스의 메모리, 프로세서 개수 등 리소스 조정
    • minikube 재실행

Message Pub/Sub

  1. kafka를 통해 메세지를 주고받아봅시다. kafka console 프로듀서를 실행합니다. 프롬프트가 실행되면 메세지를 입력해봅니다.
    kubectl -n kafka run kafka-producer -ti --image=strimzi/kafka:0.12.1-kafka-2.2.1 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092 --topic my-topic
    this is test
  2. 메세지를 확인해보기 위해 kafka console 컨슈머를 실행합니다. 메시지를 확인합니다.
    kubectl -n kafka run kafka-consumer -ti --image=strimzi/kafka:0.12.1-kafka-2.2.1 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
    this is test