연재 시리즈

쿠버네티스 오퍼레이터 스터디 3주차 - strimzi operator를 이용한 카프카 토픽 생성

악분 2022. 6. 12. 15:20
반응형

저번 시간에는 strimzi operator를 이용하여 쿠버네티스에 카프카 클러스터를 구축했습니다. 이번 시간에는 strimzi operator에서 제공하는 crd를 이용하여 토픽을 관리하는 방법을 다룹니다.

 

1. 토픽 개념

kafkaTopic CRD를 이용하여 쉽게 토픽을 생성할 수 있지만, 카프카 토픽 설정에 대해 알고 있어야 crd를 사용할 수 있습니다.

 

토픽은 카프카 데이터를 관리하기 위한 단위입니다. 클라이언트가 카프카에 데이터를 쓰거나 가져올 때 토픽이름을 설정하게 되어 있습니다.

 

토픽은 데이터를 저장할 때 파티션 단위로 나누어 저장합니다. 클라이언트가 A이름을 갖는 토픽에 데이터를 저장하면, 실제로 데이터 저장은 A토픽 안에 있는 파티션이라는 공간에 저장됩니다. 파티션 갯수는 사용자가 직접 설정해야 합니다.

 

카프카는 데이터 안전성을 위해 복제(replication)기능을 가지고 있습니다.

 

파티션은 쓰기/읽기 기능에 따라 역할이 나눠집니다. 쓰기/읽기가 가능한 파티션을 리더(Leader) 파티션, 읽기만 가능한 파티션 팔로우(Follower) 파티션이라고 합니다.

 

2. CRD를 이용하여 토픽 생성

카프카 토픽에 대해 간단히 살펴봤으니 이제 직접 토픽을 생성해봅시다. 핵심 설정은 아래와 같습니다.

  • label: 카프카 클러스터 이름 지정
  • partitions: 파티션 갯수
  • replicas: 파티션 복제 갯수
  • min.insync.replicas: 복제 되야되는 필수 파티션 갯수

각 노드의 카프카 브로커에 토픽이 생성되면, crd 스펙에 따라 파티션이 생성되고 복제설정이 적용됩니다. 아래 그림은 replicas를 3개, insync을 2개로 설정한 예입니다.

 

mytopic1이라는 이름으로 토픽을 생성해보겠습니다.

kubectl apply -f mytopic1.yaml
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: mytopic1 
  labels:
    strimzi.io/cluster: "my-cluster"
spec:
  partitions: 1
  replicas: 3
  config:
    retention.ms: 7200000
    segment.bytes: 1073741824
    min.insync.replicas: 2

 

kafkatopic crd를 조회하면 의도한대로 파티션 1개, replica 3개가 설정되었습니다.

kubectl get kafkatopics -n kafka mytopic1

 

3. 카프카 클라이언트로 토픽조회

카프카 클라이언트를 이용하여 [챕터 1]에서 생성한 토픽을 자세히 살펴보겠습니다. 카프카 클라이언트는 bitnami/kafka 도커 이미지를 이용하여 pod로 실행할 겁니다. bitnami/kafka 도커이미지는 토픽 생성, 수정, 조회 등 카프카 명령어를 쉘 스크립트로 자동화 했습니다.

 

myclient2라는 이름으로 카프카 클라이언트를 생성하겠습니다.

kubectl apply -f myclient2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myclient2
  labels:
    app: myclient
spec:
  nodeName: k8s-m
  containers:
  - name: myclient2
    image: bitnami/kafka:3.2
    command: ["tail"]
    args: ["-f", "/dev/null"]
  terminationGracePeriodSeconds: 0

 

카프카 클라이언트를 사용하기 위해서는 카프카 엔드포인트가 필요합니다. 엔드포인트는 쿠버네티스 서비스를 사용합니다.

kubectl -n kafka get svc my-cluster-kafka-bootstrap

 

카프카 엔드포인트를 리눅스 변수로 저장합니다.

SVCDNS=my-cluster-kafka-bootstrap.kafka.svc:9092

 

카프카 클라이언트 파드에서 kafka-topics.sh스크립트를 이용하여 토픽정보를 조회할 수 있습니다. crd에서 조회한것처럼 파티션 1개, replica 3개가 출력됩니다. 그리고 리더파티션 이름과 Isr정보가 함꼐 출력됩니다.

kubectl exec -it myclient2 -- kafka-topics.sh --bootstrap-server $SVCDNS --topic mytopic1 --describe

반응형