Strimzi Operator๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ ์–ธํ˜•์œผ๋กœ ๋””ํ”Œ๋กœ์ด ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ!

5 minute read

ํšŒ์‚ฌ์—์„œ Confluent๋ฅผ ํ†ตํ•ด Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด ์นดํ”„์นด์— ๋Œ€ํ•ด์„œ ์ข€๋” ์ž์„ธํžˆ ์•Œ๊ณ , ์ „๋ฌธ์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ 2025๋…„ ์ฒซ ๋ชฉํ‘œ๋กœ Confluent์˜ Kafka ์ž๊ฒฉ์ฆ์ธ Confluent Certified Developer for Apache Kafkaยฎ ์ž๊ฒฉ์ฆ์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค โœŒ๏ธ

๋“ค์–ด๊ฐ€๋ฉฐ

Kafka๋ฅผ ๊นŠ์ด์žˆ๊ฒŒ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ด€๋ จ๋œ eco-system๋„ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ํšŒ์‚ฌ์—์„œ Kafka ๊ด€๋ จ ์ž‘์—…์„ ๋งŽ์€ ์•„ํ‹ฐํด์ด๋‚˜ ํšŒ์‚ฌ๋“ค์—์„œ Strimzi๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋‚˜ Kafka Connect๋ฅผ ๋””ํ”Œ๋กœ์ด ํ•˜๋Š” ๊ฑธ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ๋ณด๋ฉด์„œ โ€˜์˜ค์˜คโ€ฆ! ๋‚˜๋„ ์–ธ์  ๊ฐ€ ํ•œ๋ฒˆ ์จ๋ด์•ผ ๊ฒ ๋‹ค!โ€™๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ์š”! ์ด๋ฒˆ์— ์ž๊ฒฉ์ฆ์„ ์ค€๋น„ํ•˜๋ฉด์„œ ํ•ธ์ฆˆ์˜จ๊ณผ ํ•จ๊ป˜ ์‚ดํŽด๋ณธ ์ด์•ผ๊ธฐ๋ฅผ ์ ์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ โ€œStrimziโ€œ๋Š” Stream์„ ์ฒด์ฝ”์–ด๋กœ ํ‘œํ˜„ํ•œ ๊ฑฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ‡จ๐Ÿ‡ฟ

Kafka Cluster

Zookeeper Mode

์•„๋ž˜์™€ ๊ฐ™์ด Kafka ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 3๊ฐœ์˜ ์ฃผํ‚คํผ์™€ 3๊ฐœ์˜ ๋ธŒ๋กœ์ปค๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ž…๋‹ˆ๋‹ค.

# @kafka-zookeper-cluster.yaml
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: strimzi
spec:
  kafka:
    version: 3.9.0
    replicas: 3
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
    storage:
      type: ephemeral
  zookeeper:
    replicas: 3
    storage:
      type: ephemeral
  entityOperator:
    topicOperator: {}
    userOperator: {}
$ kubectl apply -f kafka-zookeeper-cluster.yaml

Strimzi 0.45.0 ๋ฒ„์ „์€ Zookeeper ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋งˆ์ง€๋ง‰ Strimzi ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” Strimzi์—์„œ Kraft ๋ชจ๋“œ์˜ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ๋””ํ”Œ๋กœ์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kraft Mode

Strimzi๋Š” Kraft ๋ชจ๋“œ๋กœ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋””ํ”Œ๋กœ์ด ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค! ๋‹ค๋งŒ, ์•„๊นŒ ๋ดค๋˜ ์ฃผํ‚คํผ ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ KafkaNodePool ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ๋””ํ”Œ๋กœ์ด ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

To deploy a Kafka cluster in KRaft mode, you must use Kafka and KafkaNodePool custom resources. The Kafka resource using KRaft mode must also have the annotations strimzi.io/kraft: enabled and strimzi.io/node-pools: enabled. - Strimzi

์ผ๋‹จ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋””ํ”Œ๋กœ์ด ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: strimzi
  annotations:
    strimzi.io/kraft: enabled
    strimzi.io/node-pools: enabled
spec:
  kafka:
    version: 3.9.0
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
  entityOperator:
    topicOperator: {}
    userOperator: {}

์ฃผํ‚คํผ ๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ spec.kafka.replicas ํ•ญ๋ชฉ๊ณผ spec.kafka.storage ํ•ญ๋ชฉ์ด ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค!

์ด์„œ์„œ KafkaNodePool์„ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, strimzi.io/cluster ๋ ˆ์ด๋ธ”์ด ์•„๊นŒ ์ •์˜ํ•œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: controller-nodes
  namespace: strimzi
  labels:
    strimzi.io/cluster: my-cluster  # Kafka ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ
spec:
  replicas: 3  # ์ปจํŠธ๋กค๋Ÿฌ ๊ฐœ์ˆ˜
  roles:
    - controller
  storage:
    type: ephemeral
---
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: broker-nodes
  namespace: strimzi
  labels:
    strimzi.io/cluster: my-cluster  # Kafka ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ
spec:
  replicas: 3  # ๋ธŒ๋กœ์ปค ๊ฐœ์ˆ˜
  roles:
    - broker
  storage:
    type: ephemeral

๊ทธ๋ฆฌ๊ณ  ๋””ํ”Œ๋กœ์ด ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด Kraft ๋ชจ๋“œ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋””ํ”Œ๋กœ์ด ๋ฉ๋‹ˆ๋‹ค!!

NAME                                          READY   STATUS    RESTARTS      AGE
strimzi-cluster-operator-74f9cd5689-v7tcz     1/1     Running   7 (28m ago)   4h40m
my-cluster-controller-nodes-3                 1/1     Running   0             5m39s
my-cluster-broker-nodes-2                     1/1     Running   0             5m39s
my-cluster-controller-nodes-5                 1/1     Running   0             5m39s
my-cluster-controller-nodes-4                 1/1     Running   0             5m39s
my-cluster-broker-nodes-0                     1/1     Running   0             5m39s
my-cluster-broker-nodes-1                     1/1     Running   0             5m39s
my-cluster-entity-operator-7c4b65b7cb-x9gz8   2/2     Running   0             5m16s

ํ•จ๊ป˜ ์ƒ์„ฑ๋œ entity-operator๋Š” Kafka ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ์ž(KafkaUser)์™€ ํ† ํ”ฝ(KafkaTopic) ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์ž…๋‹ˆ๋‹ค. ์š” entity-operator๋ฅผ ํ†ตํ•ด Kafka์˜ ์œ ์ €์™€ ํ† ํ”ฝ์„ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kafka Topic

Strimzi์—์„œ๋Š” Kafka Topic์„ ์„ ์–ธ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster
spec:
  partitions: 3
  replicas: 3
  config:
    retention.ms: 7200000
    segment.bytes: 1073741824
$ kubectl get kafkatopic
NAME       CLUSTER      PARTITIONS   REPLICATION FACTOR   READY
my-topic   my-cluster   3            3                    True

ํ™•์ธ์„ ์œ„ํ•ด Kafka CLI๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์† ํ•ด๋ด…์‹œ๋‹ค.

$ kafka-topics.sh \
  --bootstrap-server my-cluster-kafka-bootstrap.strimzi:9092 \
  --list
my-topic

๋งบ์Œ๋ง

Strimzi๋กœ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋””ํ”Œ๋กœ์ด ํ•˜๋‹ˆ zookeeper ๋””ํ”Œ๋กœ์ด ํ›„์— broker๋“ค์ด ๋””ํ”Œ๋กœ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! bitnami-kafka ๋•Œ๋Š” ์ฃผํ‚คํผ์™€ ๋ธŒ๋กœ์ปค๊ฐ€ ๋™์‹œ์— ๋””ํ”Œ๋กœ์ด ๋˜์—ˆ๊ณ , ์ฃผํ‚คํผ๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋ธŒ๋กœ์ปค๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ๋ธŒ๋กœ์ปค retry๊ฐ€ ์ข€ ์žˆ์—ˆ๋Š”๋ฐ์š”. Strimzi์—์„  ๊ทธ๋Ÿฐ ํ˜„์ƒ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค!!

Kafka ํ† ํ”ฝ์„ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•œ ์žฅ์ ์ž…๋‹ˆ๋‹ค! Kafka์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ yaml ํŒŒ์ผ๋กœ ์ฝ”๋“œํ™” ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ! ์ •๋ง ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๊ทธ๋™์•ˆ Confluent์—์„œ ์›น์ด๋‚˜ Confluent SDK๋กœ ํ† ํ”ฝ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ด€๋ฆฌ ํ–ˆ๋Š”๋ฐ์š”. Strimzi๋Š” โ€œKafka๋„ IaC ํ•  ์ˆ˜ ์žˆ์–ด์š”!โ€๋ผ๋Š” ์ƒ๊ฐ์„ ์ผ๊นจ์›Œ ์ค€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

๊ทธ๋ฆฌ๊ณ  ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋””ํ”Œ๋กœ์ด ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋ถ„๋ช…ํ•œ ์žฅ์ ์ด๊ตฌ์š”!! ์•ž์œผ๋กœ ์นดํ”„์นด ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๊ฐ€๋ฉด์„œ Strimzi๋ฅผ ์–ด๋–ป๊ฒŒ ๋” ํ™œ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์„์ง€ ์ด๋ฆฌ์ €๋ฆฌ ์ฆ๊ฒ๊ฒŒ ๊ณ ๋ฏผ ํ•ด๋ด์•ผ ๊ฒ ์Šต๋‹ˆ๋‹ค!

References

Categories:

Updated: