๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ” database

MQTT์™€ Kakfa ๋น„๊ต

by ๋ฐ”์ฟ„๋ฆฌ 2024. 10. 23.

๊ฐœ์š”

์ตœ๊ทผ์— ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ ์ค‘์— socket ํ†ต์‹ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ , responce๋ฅผ ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ

๋„คํŠธ์›Œํฌ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•œ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•˜๋‹ˆ๊นŒ socket ์—ฐ๊ฒฐ ๋ถˆ์•ˆ์ •, ์—ฐ๊ฒฐ ์ง€์—ฐ ๋“ฑ๋“ฑ ์ด์Šˆ๋“ค์ด ๋ฐœ์ƒํ•ด์„œ

๋‹ค์Œ์—๋Š” mqtt ํ˜น์€ kafka๋ฅผ ์‚ฌ์šฉํ•ด๋ด์•ผ๊ฒ ๋‹ค ์‹ถ์–ด์„œ ์„œ์น˜ํ•ด๋ณด์•˜๋‹ค.

๊ฐ„๋‹จํ•œ ๋น„๊ต

· MQTT : ๊ฒฝ๋Ÿ‰ ๋ฉ”์‹œ์ง•, ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ๋‚ฎ์€ ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ์— ์ ํ•ฉํ•˜๋‹ค. IoT๋‚˜ ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์œ ๋ฆฌํ•˜๋‹ค.

· Kafka : ๋†’์€ ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ ๋ฐ ๋ฉ”์‹œ์ง€ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค. ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•  ๋•Œ ์œ ๋ฆฌํ•˜๋‹ค.

 

์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌ

โœ… MQTT

· Message Queuing Telemetry Transport

· ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง„ ์žฅ์น˜๋‚˜ IoT(์‚ฌ๋ฌผ์ธํ„ฐ๋„ท) ์žฅ์น˜ ์‚ฌ์ด์— ํ†ต์‹ ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ”„๋กœํ† ์ฝœ

· ๊ฒฝ๋Ÿ‰ํ™”๋œ ์„ค๊ณ„์™€ ํšจ์œจ์ ์ธ ๋ฉ”์‹œ์ง€ ์ „์†ก์œผ๋กœ ์ €์ „๋ ฅ, ์ €๋Œ€์—ญํญ ํ™˜๊ฒฝ์—์„œ ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•œ๋‹ค!

 

โœจ MQTT ํŠน์ง•

  1. ์†Œํ˜• ํŒจํ‚ท ํฌ๊ธฐ
    1. MQTT ๋ฉ”์‹œ์ง€๋Š” ๋งค์šฐ ์ž‘์€ ํฌ๊ธฐ์˜ ํŒจํ‚ท์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์—ญํญ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
    2. ํ—ค๋” ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.
      1. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ—ค๋”๋Š” 2๋ฐ”์ดํŠธ๋กœ ๋งค์šฐ ์ž‘๋‹ค.
  2. QoS (Quality of Service)
    1. MQTT๋Š” QoS๋ฅผ 3๊ฐ€์ง€ ์ˆ˜์ค€์œผ๋กœ ์ œ๊ณตํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ „์†ก์˜ ์•ˆ์ •์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜์žˆ๋‹ค.
      1. QoS 0 : At most once (์ตœ๋Œ€ 1ํšŒ ์ „์†ก, ์ „๋‹ฌ ๋ณด์žฅ ์—†์Œ)
      2. QoS 1 : At least once (์ตœ์†Œ 1ํšŒ ์ „์†ก, ์ค‘๋ณต ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ)
      3. QoS 2 : Exactly once (์ •ํ™•ํžˆ 1ํšŒ ์ „, ๋” ๋†’์€ ์‹ ๋ขฐ์„ฑ)
    2. ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ํ†ตํ•ด ์žฅ์น˜ ๊ฐ„ ํ†ต์‹ ์—์„œ ํŠธ๋ž˜ํ”ฝ๊ณผ ์‹ ๋ขฐ์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.
  3. ์—ฐ๊ฒฐ ์œ ์ง€์™€ ์ €์ „๋ ฅ ์„ค๊ณ„
    1. MQTT๋Š” ‘Keep Alive’ ๋ฉ”์‹œ์ง€๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์—ฌ ์žฅ์น˜๊ฐ€ ์ˆ˜์‹œ๋กœ ์žฌ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•œ๋‹ค.
    2. ์ด ๊ธฐ๋Šฅ์€ ์ €์ „๋ ฅ ํ™˜๊ฒฝ์—์„œ ์ „๋ ฅ ์†Œ๋น„๋ฅผ ์ค„์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํ„ฐ๋ฆฌ๋กœ ์ž‘๋™ํ•˜๋Š” ์žฅ์น˜๋“ค์— ์ ํ•ฉํ•˜๋‹ค.
  4. TCP ๊ธฐ๋ฐ˜์˜ ์—ฐ๊ฒฐ ์ง€ํ–ฅ์  ํ”„๋กœํ† ์ฝœ
    1. MQTT๋Š” TCP ์œ„์—์„œ ๋™์ž‘ํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ฉฐ ์†Œํ˜• ์žฅ์น˜ ๊ฐ„์˜ ํ†ต์‹ ์— ์œ ๋ฆฌํ•œ ๊ตฌ์กฐ

 

โœ… Kafka

· ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ๋ถ„์‚ฐํ˜• ๋ฉ”์‹œ์ง• ํ”Œ๋žซํผ

· ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„, ํ™•์žฅ์„ฑ์„ ๋ชฉํ‘œ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

· ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ถ„์„, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

 

โœจ Kafka ํŠน์ง•

  1. ๋ถ„์‚ฐํ˜• ์•„ํ‚คํ…์ฒ˜
    1. ๋ถ„์‚ฐํ˜•์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์—ฌ๋Ÿฌ ๋ธŒ๋กœ์ปค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. → ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋†’์€ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋‰˜์–ด ์ €์žฅ๋˜๋ฉฐ ๊ฐ ํŒŒํ‹ฐ์…˜์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ์ € ์ง€์—ฐ์„ฑ
    1. ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ์— ์žˆ์–ด ๋งค์šฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ž๋ž‘ํ•œ๋‹ค.
      1. ๋‚ด๋ถ€์ ์œผ๋กœ ‘Zero-Copy' ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋””์Šคํฌ๋กœ ๋ฐ”๋กœ ์ „์†กํ•˜๊ณ  ์ค‘๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ๊ณผ์ •์„ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ
    2. ๋ฐฐ์น˜ ์ „์†ก๊ณผ ์••์ถ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  3. offset ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ
    1. Consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•  ๋•Œ ํ•ด๋‹น ๋ฉ”์‹œ์ง€์˜ offset์„ ๊ธฐ๋กํ•œ๋‹ค. → ๋ฉ”์‹œ์ง€๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ ํ•˜๊ณ  Consumer๊ฐ€ ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•  ๋•Œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ง€์ ์—์„œ๋ถ€ํ„ฐ ์žฌ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋กœ๊ทธ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.
  4. ๋‚ด๊ตฌ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ณด๊ด€
    1. ๋ฉ”์‹œ์ง€๋ฅผ ๋ธŒ๋กœ์ปค์˜ ๋กœ๊ทธ์— ์ €์žฅํ•˜๋ฉฐ ์ง€์ •๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์†Œ๋น„๋˜์ง€ ์•Š๋”๋ผ๋„ ์†์‹ค ์—†์ด ์‹œ์Šคํ…œ์— ๋‚จ์•„ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์žฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    2. ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ์‹œ์Šคํ…œ์ด๋‚˜ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ์ฒ˜๋ฆฌ ๋“ฑ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

 

๐Ÿ“Œ ๋งˆ์ง€๋ง‰ ์ •๋ฆฌ

ํŠน์„ฑ MQTT Kafka
๋ฉ”์‹œ์ง€ ํฌ๊ธฐ ์ž‘๊ณ  ์ตœ์†Œํ•œ์˜ ํ—ค๋” ๋Œ€ํ˜• ๋กœ๊ทธ, ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ
QoS ์—ฌ๋Ÿฌ ์ˆ˜์ค€ ์ œ๊ณต (0, 1, 2) ๋ณด์žฅ๋œ ์ „๋‹ฌ (At least once)
์—ฐ๊ฒฐ ๋ฐฉ์‹ TCP ๊ธฐ๋ฐ˜, ๊ฒฝ๋Ÿ‰ํ™” ๋ถ„์‚ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ธฐ๋ฐ˜
์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€ IoT ์žฅ์น˜, ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค ํ†ต์‹  ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ, ์‹ค์‹œ๊ฐ„ ๋ถ„์„
๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋ณด๊ด€ ๋ฉ”์‹œ์ง€์˜ ๋‚ด๊ตฌ์„ฑ ๋ณด์žฅ, ๋กœ๊ทธ ์ €์žฅ