Kafka์—์„œ Topic์„ ์กฐํšŒ, ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œ์— ์“ฐ๋Š” ๋„๊ตฌ! Kafka์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Shell ๋ช…๋ น์–ด!!

5 minute read

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

ํšŒ์‚ฌ์—์„œ Confluent๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๊ณ , CCDAK ์ž๊ฒฉ์ฆ ์‹œํ—˜์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” bin/kafka-topics.sh ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

๋กœ์ปฌ์—์„œ Kafka๋ฅผ ์‹คํ–‰ํ•ด ํ•ธ์ฆˆ์˜จ ํ•ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๋กœ์ปฌ ๋งฅ๋ถ์— Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋””ํ”Œ๋กœ์ด ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ โ€œDeploy Kafka on Kubernetes โ˜ธโ€ ํฌ์ŠคํŠธ์—์„œ ๊ธฐ์ˆ ํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค! ๋ณธ ํฌ์ŠคํŠธ๋Š” ํ•ด๋‹น ํฌ์ŠคํŠธ์— ๊ธฐ์ˆ ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋””ํ”Œ๋กœ์ดํ•œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ Broker ์ค‘ ํ•˜๋‚˜์— ์ ‘์†ํ•ด ์ง„ํ–‰ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ ‘์†

bitnami-kafka๋ฅผ Authentication ์—†์ด ์ ‘์†ํ•˜๋Š” PLAINTEXT ๋ชจ๋“œ๋กœ ๋””ํ”Œ๋กœ์ด ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋””ํ”Œ๋กœ์ดํ•œ Broker ์ค‘ ํ•˜๋‚˜์— kubectl exec๋กœ ์ ‘์† ํ•ฉ๋‹ˆ๋‹ค.

$ kubectl exec -it bitnami-kafka-broker-2 -n kafka -- sh

์ฐธ๊ณ ๋กœ bitnami-kafka๋ฅผ ๋””ํ”Œ๋กœ์ด ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Kafka Shell์ด /opt/bitnami/kafka/bin ๊ฒฝ๋กœ์— ๋ชจ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค! cd ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ด ๊ฒฝ๋กœ๋กœ ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ด๋„ ๋˜์ง€๋งŒ, Kafka Shell ๋„๊ตฌ๋“ค์ด ์ด๋ฏธ ๋“ฑ๋ก์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด ๊ฒฝ๋กœ์—์„œ ์ง„ํ–‰ํ•ด๋„ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค :)

Create topic

$ kafka-topics.sh \
    --bootstrap-server=bitnami-kafka.kafka.svc.cluster.local:9092 \
    --create \
    --topic test
Created topic test.

--create --topic test๋ฅผ ์ฃผ๋ฉด ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ํ† ํ”ฝ์ด ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด partition ๊ฐฏ์ˆ˜๋‚˜ replication.factor์™€ ๊ฐ™์€ ๊ฐ’์€ ๋ธŒ๋กœ์ปค์— ์„ค์ •๋œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ • ๋ฉ๋‹ˆ๋‹ค.

Describe all topics

$ kafka-topics.sh \
    --bootstrap-server=bitnami-kafka.kafka.svc.cluster.local:9092 \
    --describe
Topic: test     TopicId: fj5dT8R4QkGFObM3IsrLRA PartitionCount: 1       ReplicationFactor: 1    Configs: 
        Topic: test     Partition: 0    Leader: 102     Replicas: 102   Isr: 102        Elr: N/A        LastKnownElr: N/A

ํ˜„์žฌ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์กด์žฌํ•˜๋Š” ํ† ํ”ฝ์„ ๋‚˜์—ดํ•˜๊ณ , ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋‚˜์—ด ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— Partition๊ณผ replication.factor๊ฐ€ ๋‘˜๋‹ค 1๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. replication.factor๋ผ๋Š” ๊ฒƒ์€ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์˜ ๋‚ด์šฉ์„ ๋ณต์ œํ•œ ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒŒํ‹ฐ์…˜์— ํ•˜๋‚˜์˜ ๋ณต์ œ๋ณธ๋งŒ ์กด์žฌํ•˜๋ฉด ์ด๊ฒƒ์ด ํŒŒํ‹ฐ์…˜ ๊ทธ ์ž์ฒด์ด์ž ๋ฆฌ๋” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Partition Level ์ •๋ณด ์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์„ ๊ฐ ํ•ญ๋ชฉ์„ ์„ค๋ช…ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Leader
    • ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜์ด Producer/Consumer์™€ ํ†ต์‹ ํ•˜๋ฉฐ ์‹ ๊ทœ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฑฐ๋‚˜, ์Œ“์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ๋น„ ๋˜๋Š” ํŒŒํ‹ฐ์…˜ ์ž…๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ๋กœ ๋ณด๋ฉด Partition: 0 Leader: 102๋กœ ๋˜์–ด ์žˆ์–ด, ์ฒซ๋ฒˆ์งธ ํŒŒํ‹ฐ์…˜์˜ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์ด 102๋ผ๋Š” Id์˜ ๋ธŒ๋กœ์ปค์— ์กด์žฌํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Replicas
    • ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์„ ๋ณต์ œํ•œ ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ์—์„œ๋Š” Replicas: 102๋กœ ๋˜์–ด ์žˆ์–ด ๋ธŒ๋กœ์ปค 102๊ฐ€ ๋ณต์ œ๋ณธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Isr
    • In-Sync Replica ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
    • ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜ ์ค‘์— ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜ ์žฅ์•  ์‹œ, ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์œผ๋กœ ์Šน๊ฒฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ณต์ œ๋ณธ์˜ โ€œ์ง‘ํ•ฉโ€์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ๋ ฅ์—์„œ๋Š” Isr: 102๋กœ ๋˜์–ด ์žˆ์–ด ๋ธŒ๋กœ์ปค 102์— ์กด์žฌํ•˜๋Š” ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์ด ์‹ฑํฌ ์ƒํƒœ์ธ ISR์— ์†ํ•ฉ๋‹ˆ๋‹ค.
  • Elr & LastKnownElr
    • End Log Region์˜ ์•ฝ์ž ์ž…๋‹ˆ๋‹ค.
    • Kafka์˜ ํ™•์žฅ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๋ณธ๋ž˜ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋กœ์ปค์˜ ๋””์Šคํฌ ๊ณต๊ฐ„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kafka Tiered Storage๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €๋ ดํ•œ ์Šคํ† ๋ฆฌ์ง€(ex: AWS S3)์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ELR์€ ํŒŒํ‹ฐ์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ์ปฌ์—์„œ ๋”์ด์ƒ ์œ ์ง€๋˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ด๋™ํ•œ ์‹œ์ ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ฆ‰, โ€œ๋กœ์ปฌ ๋””์Šคํฌ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋กœ๊ทธ์˜ ๋ ์ง€์ (offset)โ€์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ฐ’ ์ด์ „์˜ ๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€ ์Šคํ† ๋ฆฌ์ง€์—์„œ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Alter Topic Partition Number

$ kafka-topics.sh \
    --bootstrap-server=bitnami-kafka.kafka.svc.cluster.local:9092 \
    --alter \
    --topic test \
    --partitions 2 \
    --replication-factor 2

ํ† ํ”ฝ์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, --alter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, kafka-topics.sh --alter์—์„œ Topic์˜ ๋ชจ๋“  Config๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด ์•„๋‹ˆ๊ณ , ์˜ค์ง ํ† ํ”ฝ ํŒŒํ‹ฐ์…˜์— ๋Œ€ํ•œ ๊ฒƒ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜, ํ† ํ”ฝ ํŒŒํ‹ฐ์…˜์„ ๋Š˜๋ฆฌ๋Š” ๊ฑด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ค„์ด๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋ž˜์„œ ๋•Œ๋กœ๋Š” kafka-configs.sh๋ฅผ ์‚ฌ์šฉํ•ด ํ† ํ”ฝ์— ์„ค์ •๋œ Config๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kafka-configs.sh \
    --bootstrap-server=bitnami-kafka.kafka.svc.cluster.local:9092 \
    --alter \
    --topic test \
    --add-config retention.ms=360000

์ด๊ฒƒ์œผ๋กœ ํ† ํ”ฝ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ ํ•˜๋Š” ๊ธฐ๊ฐ„์ธ retention.ms๋ฅผ ๊ธฐ์กด 7์ผ(604800000)์—์„œ 1์‹œ๊ฐ„(3600000)์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kafka-configs.sh๋Š” ํ† ํ”ฝ ์™ธ์—๋„ ๋ธŒ๋กœ์ปค, ์‚ฌ์šฉ์ž์™€ ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ค์ •๋œ Config๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!


์ฐธ๊ณ ๋กœ ํ•œ๋ฒˆ ์„ค์ •ํ•˜๋ฉด ํ† ํ”ฝ์„ ์ง€์šฐ์ง€ ์•Š๋Š” ์ด์ƒ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Config๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ”๋กœ์›Œ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์„ ๋ณต์ œํ•˜๋Š” ์ •๋„์ธ replication.factor ๊ฐ’์ด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ Config ์ž…๋‹ˆ๋‹ค. (๋‹จ, ์ด๊ฒƒ๋„ ํŒŒํ‹ฐ์…˜ ์žฌํ• ๋‹น ๋„๊ตฌ์ธ kafka-reassign-partitions.sh๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

Delete topic

$ kafka-topics.sh \
    --bootstrap-server=bitnami-kafka.kafka.svc.cluster.local:9092 \
    --delete \
    --topic test

์‚ญ์ œ๋Š” --delete ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค EzEz

๋งบ์Œ๋ง

์ด๊ฒƒ์œผ๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด์ธ kafka-topics.sh๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค! (์–ํ˜ธ) ์ด์ œ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋“ค์„ ํ•ธ์ฆˆ์˜จ ํ•ด๋ด…์‹œ๋‹ค!

Categories:

Updated: