본문 바로가기

Apache Kafka

EKS에 Kafka를 설치 후 테스트 하기

# EKS 클러스터에 Kafka를 설치 후 테스트를 진행해 보자.

1. 헬름을 통한 설치를 진행한다.

- 헬름이란?

2021.10.24 - [⭐ Kubernetes & EKS/Helm] - Helm이란? 및 기본 명령어 정리

 

Helm이란? 및 기본 명령어 정리

 Helm 차트를 활용한 애플리케이션 패키지 배포 쿠버네티스 애플리케이션 관리를 지원하는 도구 Helm 이란? Helm 은 쿠버네티스 package managing tool 이다. node.js 의 npm 과 비슷한 형태로 쿠버네티

may9noy.tistory.com

2. 헬름을 통해 카프카를 설치해보자.

helm repo add bitnami https://charts.bitnami.com/bitnami

# kafka 설치하기
helm install my-kafka bitnami/kafka

# kafka 브로커 3개 설치
helm install my-kafka --set replicaCount=3 bitnami/kafka

3. 설치된 pod를 확인해보자.

kubectl get pod
NAME                   READY   STATUS    RESTARTS   AGE
my-kafka-0             1/1     Running   0          20m
my-kafka-client        1/1     Running   0          17m
my-kafka-zookeeper-0   1/1     Running   0          20m

- kafka는 별도의 namespace를 주지 않았으므로, default옵션으로 조회가 가능하다.

kubectl get pod
NAME                   READY   STATUS    RESTARTS   AGE
my-kafka-0             1/1     Running   0          20m
my-kafka-client        1/1     Running   0          17m
my-kafka-zookeeper-0   1/1     Running   0          20m
seungkim:~/environment $ kubectl get all
NAME                       READY   STATUS    RESTARTS   AGE
pod/my-kafka-0             1/1     Running   0          22m
pod/my-kafka-client        1/1     Running   0          18m
pod/my-kafka-zookeeper-0   1/1     Running   0          22m

NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
service/kubernetes                    ClusterIP   172.20.0.1      <none>        443/TCP                      9d
service/my-kafka                      ClusterIP   172.20.224.33   <none>        9092/TCP                     22m
service/my-kafka-headless             ClusterIP   None            <none>        9092/TCP,9093/TCP            22m
service/my-kafka-zookeeper            ClusterIP   172.20.87.252   <none>        2181/TCP,2888/TCP,3888/TCP   22m
service/my-kafka-zookeeper-headless   ClusterIP   None            <none>        2181/TCP,2888/TCP,3888/TCP   22m

NAME                                  READY   AGE
statefulset.apps/my-kafka             1/1     22m
statefulset.apps/my-kafka-zookeeper   1/1     22m

4. Kafka 테스트 

- 기본 명령어 확인, helm으로 설치를 하면 아래와 같이 기본적인 명령어를 제공해 준다.

- 프로듀서를 활용하여 메세지를 보내는것과 컨슈머를 활용하여 메세지를 받는 명령어 등을 확인할 수 있다.

helm install my-kafka bitnami/kafka
NAME: my-kafka
LAST DEPLOYED: Mon Sep 26 00:15:37 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kafka
CHART VERSION: 18.4.4
APP VERSION: 3.2.3

** Please be patient while the chart is being deployed **

Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster:

    my-kafka.default.svc.cluster.local

Each Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:

    my-kafka-0.my-kafka-headless.default.svc.cluster.local:9092

To create a pod that you can use as a Kafka client run the following commands:

    kubectl run my-kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.2.3-debian-11-r1 --namespace default --command -- sleep infinity
    kubectl exec --tty -i my-kafka-client --namespace default -- bash

    PRODUCER:
        kafka-console-producer.sh \
            
            --broker-list my-kafka-0.my-kafka-headless.default.svc.cluster.local:9092 \
            --topic test

    CONSUMER:
        kafka-console-consumer.sh \
            
            --bootstrap-server my-kafka.default.svc.cluster.local:9092 \
            --topic test \
            --from-beginning

- Kafka 클라이언트용 프로그램을 실행

kubectl run my-kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.2.3-debian-11-r1 --namespace default --command -- sleep infinity

- 실행된 클라이언트용 pod로 접속

kubectl exec --tty -i my-kafka-client --namespace default -- bash

- Producer - 브로커에서 메세지 전송

- 클라이언트 pod에 접속된 상태에서 실행

kafka-console-producer.sh \
> --broker-list my-kafka-0.my-kafka-headless.default.svc.cluster.local:9092 \
> --topic test
>hello 
>world
>hi
>hi
>hi
>hi
>hi

- Consumer - 브로커로부터 메세지 받기

브로커로부터 메세지를 받기 위해 별도의 터미널에서 kafka 클라이언트 pod로 접근한다.

kubectl exec --tty -i my-kafka-client --namespace default -- bash

- 위의 Producer에서 생성한 메세지를 모두 받으려면 --from-beginning 옵션을 사용하여 확인을 할 수 있다.

# 새로운 터미널 생성 후 클라이언트 접속
kubectl exec --tty -i my-kafka-client --namespace default -- bash

# 메세지 확인
kafka-console-consumer.sh \
> --bootstrap-server my-kafka.default.svc.cluster.local:9092 \
> --topic test \
> --from-beginning
hello
world
hi
hi
hi
hi
hi