๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ ์‚ฌ๋ก€ ์—ฐ๊ตฌ: ๋ชจ๋ฒ” ์‚ฌ๋ก€์™€ ์ตœ์‹  ๋™ํ–ฅ

okrestart 2024. 10. 23.

 

Apache Kafka ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ๋„๊ตฌ๋กœ ์ž๋ฆฌ ์žก์•˜์œผ๋ฉฐ, ์Šคํ”„๋ง ๋ถ€ํŠธ ์™€์˜ ๊ฒฐํ•ฉ์€ ์ด๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ–ฅํ›„ ๋ฐœ์ „ ๋ฐฉํ–ฅ๊ณผ ์ตœ์‹  ๋™ํ–ฅ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

 


 

 

1. ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ œ ์‚ฌ๋ก€

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์„œ๋น„์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ Kafka๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ก€ 1: ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

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

 

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

[์„œ๋ฒ„ ๋กœ๊ทธ] -> [Kafka Producer] -> [Kafka Topic] -> [Spring Boot Consumer] -> [์•Œ๋ฆผ ์‹œ์Šคํ…œ]

 

์ฃผ์š” ์„ค์ •

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: log-group
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

 

๊ฒฐ๊ณผ

  • ์ด์ƒ ์ง•ํ›„ ํƒ์ง€์œจ ์ด 90% ์ด์ƒ ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ์„œ๋ฒ„ ๋‹ค์šดํƒ€์ž„ ์ด ๋Œ€ํญ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

 


 

2. ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 

๋ฌธ์ œ์  1: ๋ฉ”์‹œ์ง€ ์†์‹ค ๋ฌธ์ œ

Kafka ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • acks ์„ค์ • : ํ”„๋กœ๋“€์„œ์˜ acks=all ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒฉํ„ฐ : replication.factor=3 ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณต์ œ๋ณธ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
spring:
  kafka:
    producer:
      acks: all
      retries: 3

๋ฌธ์ œ์  2: ์˜คํ”„์…‹ ๊ด€๋ฆฌ ๋ฌธ์ œ

์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„์—๋„ ์˜คํ”„์…‹์ด ์ ์ ˆํžˆ ์ปค๋ฐ‹๋˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋‚˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • ์˜คํ†  ์ปค๋ฐ‹ ๋น„ํ™œ์„ฑํ™” : enable.auto.commit=false ๋กœ ์„ค์ •ํ•˜๊ณ , ๋ช…์‹œ์ ์œผ๋กœ ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
spring:
  kafka:
    consumer:
      enable-auto-commit: false

๋ฌธ์ œ์  3: ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๋ฌธ์ œ

Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ฆ๊ฐ€ ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ : ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • ์••์ถ• ์‚ฌ์šฉ : Kafka ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด compression.type=snappy ๋˜๋Š” lz4 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ์ค„์ž…๋‹ˆ๋‹ค.

 


 

3. ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

Kafka ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๊ณต์ ์ธ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

1. ์ ์ ˆํ•œ ํŒŒํ‹ฐ์…˜ ์„ค์ •

Kafka๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒํ‹ฐ์…˜ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ ์œผ๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ , ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํŒŒํ‹ฐ์…˜ ์ˆ˜ ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ

Kafka๋Š” ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์— ๊ฑธ์ณ ์žˆ๋Š” ๊ฒฝ์šฐ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ‚ค ํŒŒํ‹ฐ์…”๋‹ ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์ด์ƒ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋Œ€์‘ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก Prometheus ๋ฐ Grafana ์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ๋ฐฐํฌ ์ž๋™ํ™”

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ , Kafka ์„ค์ •์„ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 


 

4. ํ–ฅํ›„ ๋ฐœ์ „ ๋ฐฉํ–ฅ๊ณผ ์ตœ์‹  ๋™ํ–ฅ

Kafka๋Š” ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „ํ•˜๋ฉฐ, ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ ์™€ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1. Kafka Streams์™€ ksqlDB์˜ ํ™•์žฅ

Kafka Streams ๋Š” ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๋”์šฑ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•˜๋ฉฐ, ksqlDB ๋Š” SQL ๊ธฐ๋ฐ˜์œผ๋กœ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Kafka ์„œ๋น„์Šค

Confluent Cloud ์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Kafka ์„œ๋น„์Šค๊ฐ€ ํ™•์‚ฐ๋˜๋ฉด์„œ, Kafka๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ํด๋ผ์šฐ๋“œ์—์„œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. ๋ณด์•ˆ ๊ฐ•ํ™”

Kafka์˜ SSL/TLS ์ง€์›๊ณผ SASL ์ธ์ฆ ์ด ๋”์šฑ ๊ฐ•ํ™”๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ์™€ ์‚ฌ์šฉ์ž ์ธ์ฆ ์„ ํ†ตํ•œ ๋ณด์•ˆ์ด ์ค‘์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

Q1. ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
A1. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ Kafka์™€ ํ†ตํ•ฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์— ์ ํ•ฉํ•œ Kafka๋ฅผ ์†์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q2. Kafka์—์„œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
A2. ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์— ๊ฑธ์นœ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ ค๋ฉด ํ‚ค ํŒŒํ‹ฐ์…”๋‹ ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ํŠน์ • ํŒŒํ‹ฐ์…˜์— ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q3. Kafka ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
A3. ๋ฉ”์‹œ์ง€ ์†์‹ค, ์˜คํ”„์…‹ ๊ด€๋ฆฌ ๋ฌธ์ œ, ์„ฑ๋Šฅ ์ €ํ•˜ ๋“ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ ์ ˆํ•œ ์„ค์ •๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q4. Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
A4. JMX(Java Management Extensions) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Prometheus ๋ฐ Grafana ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q5. ํ–ฅํ›„ Kafka์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
A5. ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ ์™€ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ์˜ ํ™•์žฅ์ด ์˜ˆ์ƒ๋˜๋ฉฐ, Kafka Streams ์™€ ksqlDB ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ๋” ๋„๋ฆฌ ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Kafka ์„œ๋น„์Šค ์˜ ํ™•์‚ฐ๊ณผ ๋ณด์•ˆ ๊ธฐ๋Šฅ ๊ฐ•ํ™”๊ฐ€ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ์จ ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ Kafka๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ ์‚ฌ๋ก€ ์—ฐ๊ตฌ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŒ…์€ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์†Œ๊ฐœํ•˜์—ฌ, Kafka์™€ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€