[Kafka] MacOS์—์„œ ๐Ÿ› ๏ธ Apache Kafka ๋กœ์ปฌ ํ™˜๊ฒฝ ์‹คํ–‰ ๋ฐ CLI ์‹ค์Šต ๊ฐ€์ด๋“œ

๊ณฝํƒœ๋ฏผยท2025๋…„ 12์›” 14์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
74/74

๐Ÿ› ๏ธ Apache Kafka ๋กœ์ปฌ ํ™˜๊ฒฝ ์‹คํ–‰ ๋ฐ CLI ์‹ค์Šต ๊ฐ€์ด๋“œ

์ด ๊ธ€์—์„œ๋Š” Apache Kafka๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋„์šฐ๊ณ , CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํ”ฝ ์ƒ์„ฑ, ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ ๋ฐ ๊ตฌ๋…์„ ์ง์ ‘ ์‹ค์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

(์ด ๊ฐ€์ด๋“œ๋Š” Docker Descktop์ด ์„ค์น˜๋œ MacOS ํ™˜๊ฒฝ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์žˆ๋‹ค.)

1. ํ™˜๊ฒฝ ์„ค์ •: Docker-Compose Kafka ํด๋Ÿฌ์Šคํ„ฐ ์‹คํ–‰

์นดํ”„์นด๋Š” ์•ˆ์ •์ ์ธ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”ํ„ฐ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Zookeper์™€ ํ•จ๊ป˜ ๊ตฌ๋™๋œ๋‹ค. Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋‘ ์„œ๋ฒ„๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•œ๋‹ค.

1.1. docker-compose.yml ํŒŒ์ผ ์ž‘์„ฑ

์ž‘์—… ํด๋”๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์•„๋ž˜ ๋‚ด์šฉ์„ docker-compose.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค. ์ด ์„ค์ •์€ ์นดํ”„์นด ๋ธŒ๋กœ์ปค๋ฅผ localhost:9092 ํฌํŠธ๋กœ ์™ธ๋ถ€์— ๋…ธ์ถœํ•œ๋‹ค.

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.5.0
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:7.5.0
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - "9092:9092" # ํ˜ธ์ŠคํŠธ ํฌํŠธ: ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

1.2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

ํ„ฐ๋ฏธ๋„์—์„œ docker-compose.yml ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

# ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker-compose up -d

# ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ
docker ps

๐Ÿ’ก ํ™•์ธ: kafka์™€ zookeeper ๋‘ ์ปจ๋„ค์ดํ„ฐ ์ƒํƒœ๊ฐ€ Up์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด ์„ฑ๊ณต.


2. CLI๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ํ๋ฆ„ ์‹ค์Šต

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด, ์ด์ œ ์นดํ”„์นด์˜ ๊ธฐ๋ณธ ๋ช…๋ น์–ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ํ๋ฆ„์„ ์•Œ์•„๋ณด๋„๋กํ•˜์ž. ๋ชจ๋“  ๋ช…๋ น์€ ์นดํ”„์นด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋œ๋‹ค.

2.1. ์ปจํ…Œ์ด๋„ˆ ์ ‘์† ๋ฐ ํ† ํ”ฝ ์ƒ์„ฑ

๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด study-topic์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํ† ํ”ฝ์„ ๋จผ์ € ์ƒ์„ฑํ•œ๋‹ค.

# ์นดํ”„์นด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์‰˜ ์ ‘์†
docker exec -it kafka /bin/bash

# ํ† ํ”ฝ ์ƒ์„ฑ ๋ช…๋ น์–ด
kafka-topics --create --topic study-topic --bootstrap-server localhost:9092 --replication-factor 1

2.2. Consumper (๊ตฌ๋…์ž) ์‹คํ–‰

์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„ ํƒญ์„ ์—ด๊ณ , ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค์‹œ ์ ‘์†ํ•œ ๋’ค Consumer๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. Consumer๋Š” --from-beginnig ์˜ต์…˜์œผ๋กœ ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๋ถ€ํ„ฐ ์ฝ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

# ์ƒˆ ํ„ฐ๋ฏธ๋„ ํƒญ์—์„œ ์นดํ”„์นด ์ปจํ…Œ์ด๋„ˆ ์ ‘์†
docker exec -it kafka /bin/bash

# Consumer ์‹คํ–‰ (๊ตฌ๋… ์‹œ์ž‘)
kafka-console-consumer --topic study-topic --from-beginning --bootstrap-server localhost:9092
# ์ด์ œ ์ด ์ฐฝ์€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

2.3. Producer (๋ฐœํ–‰์ž) ์‹คํ–‰

๋˜ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„ ํƒญ์„ ์—ด๊ณ , Producer๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค.

# ์„ธ ๋ฒˆ์งธ ํ„ฐ๋ฏธ๋„ ํƒญ์—์„œ ์นดํ”„์นด ์ปจํ…Œ์ด๋„ˆ ์ ‘์†
docker exec -it kafka /bin/bash

# Producer ์‹คํ–‰ (๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ์‹œ์ž‘)
kafka-console-producer --topic study-topic --bootstrap-server localhost:9092

๐Ÿ“Œ ์‹ค์Šต ๋ฐ ํ™•์ธ
1. Producer ํ„ฐ๋ฏธ๋„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Enter.
2. ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ฆ‰์‹œ Consumer ํ„ฐ๋ฏธ๋„์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ.
3. Consumper ํ„ฐ๋ฏธ๋„์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š์€ ์ฑ„ Producer๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๊ณ„์† ๋ณด๋‚ด๋ณด๋ฉด ์ด๊ฒƒ์ด ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2.4. ์˜์†์„ฑ (Durability) ํ™•์ธ

Consumper๋ฅผ ์ข…๋ฃŒํ•œ ํ›„, Producer๋กœ ๋ฉ”์‹œ์ง€๋ฅผ 5๊ฐœ ๋” ๋ณด๋‚ด๋ณธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Consumper๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

# Consumer๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ (์ƒˆ๋กœ์šด Consumer)
docker exec -it kafka /bin/bash
kafka-console-consumer --topic study-topic --from-beginning --bootstrap-server localhost:9092

๐Ÿ’ก ํ™•์ธ: Consumer๊ฐ€ ๊บผ์ ธ์žˆ์„ ๋•Œ ์ „์†กํ–ˆ๋˜ 5๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค์‹œ ์ถœ๋ ฅ๋œ๋‹ค.
์ด๋Š” ์นดํ”„์นด๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋””์Šคํฌ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ(์˜์†์„ฑ) ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


3. ์‹ค์Šต ํ™˜๊ฒฝ ์ •๋ฆฌ

์‹ค์Šต์„ ๋งˆ์ณค๋‹ค๋ฉด, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

# docker-compose.yml์ด ์žˆ๋Š” ํด๋”์—์„œ ์‹คํ–‰
docker-compose down

์ด์ œ ์นดํ”„์นด์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ/๊ตฌ๋… ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ฒŒ ๋๋‹ค. ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์นดํ”„์นด๋ฅผ ์ ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ์‹ฌํ™”์ ์ธ ๊ณผ์ •์„ ๋ฐฐ์šฐ๋ฉด ๋  ๊ฑฐ ๊ฐ™๋‹ค.

profile
Node.js ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€