λ°˜μ‘ν˜•
"μ•„νŒŒμΉ˜ μΉ΄ν”„μΉ΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œκ·Έλž˜λ° with μžλ°”"
ꡐ재의 ν•™μŠ΅ λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€

 

 

 

 

μš°μ„  ν† ν”½μ΄λž€?

 

 

토픽은 μΉ΄ν”„μΉ΄μ—μ„œ 데이터λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ‹¨μœ„μž„!

 

=> 토픽은 1개 μ΄μƒμ˜ νŒŒν‹°μ…˜μ„ μ†Œμœ ν•˜κ³  있음

 

(νŒŒν‹°μ…˜μ—λŠ” ν”„λ‘œλ“€μ„œκ°€ 보낸 데이터듀이 λ“€μ–΄κ°€ μ €μž₯λ˜λŠ”λ° 이 데이터λ₯Ό 'λ ˆμ½”λ“œ' 라고 뢀름)

 

λ ˆμ½”λ“œμ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ³  κ°€μž

 

λ ˆμ½”λ“œλŠ” νƒ€μž„μŠ€νƒ¬ν”„, λ©”μ‹œμ§€ ν‚€,  λ©”μ‹œμ§€ κ°’, μ˜€ν”„μ…‹, ν—€λ”λ‘œ κ΅¬μ„±λ˜μ–΄ 있음

 

ν”„λ‘œλ“€μ„œκ°€ μƒμ„±ν•œ λ ˆμ½”λ“œκ°€ 브둜컀둜 μ „μ†‘λ˜λ©΄ μ˜€ν”„μ…‹κ³Ό νƒ€μž„μŠ€νƒ¬ν”„κ°€ μ§€μ •λ˜μ–΄ μ €μž₯됨

 

=> λΈŒλ‘œμ»€μ— ν•œλ²ˆ 적재된 λ ˆμ½”λ“œλŠ” μˆ˜μ •ν•  수 μ—†κ³  둜그 λ¦¬ν…μ…˜ κΈ°κ°„ λ˜λŠ” μš©λŸ‰μ— λ”°λΌμ„œλ§Œ μ‚­μ œλ¨

 

둜그 λ¦¬ν…μ…˜μ΄λž€ μΉ΄ν”„μΉ΄ λΈŒλ‘œμ»€μ— μ €μž₯된 λ©”μ‹œμ§€(λ ˆμ½”λ“œ)λ₯Ό μ–Όλ§ˆλ‚˜ 였래 보관할지λ₯Ό κ²°μ •ν•˜λŠ” μ •μ±…μž„

=> μΉ΄ν”„μΉ΄λŠ” 데이터λ₯Ό 둜그(log)λΌλŠ” ν˜•νƒœλ‘œ λ””μŠ€ν¬μ— μ €μž₯ν•˜κ³ , 이 데이터가 μ–Όλ§ˆλ‚˜ 였래 μœ μ§€λ μ§€λ₯Ό λ¦¬ν…μ…˜ 섀정에 따라 관리

 

νƒ€μž„μŠ€νƒ¬ν”„λŠ” ν”„λ‘œλ“€μ„œμ—μ„œ ν•΄λ‹Ή λ ˆμ½”λ“œκ°€ μƒμ„±λœ μ‹œμ μ˜ μœ λ‹‰μŠ€ νƒ€μž„μ΄ 섀정됨

(μ»¨μŠˆλ¨ΈλŠ” 이λ₯Ό ν† λŒ€λ‘œ λ ˆμ½”λ“œκ°€ μ–Έμ œ μƒμ„±λ˜μ—ˆλŠ”μ§€ μ•Œ 수 있음)

 

ν•˜μ§€λ§Œ ν”„λ‘œλ“€μ„œκ°€ λ ˆμ½”λ“œλ₯Ό 생성할 λ•Œ μž„μ˜μ˜ νƒ€μž„μŠ€νƒ¬ν”„ 값을 μ„€μ •ν•  수 있고, ν† ν”½ 섀정에 따라 λΈŒλ‘œμ»€μ— 적재된 μ‹œκ°„(LogAppendTime)으둜 섀정될 μˆ˜λ„ 있음

 

λ©”μ‹œμ§€ ν‚€λŠ” λ©”μ‹œμ§€ 값을 μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜κ±°λ‚˜ λ©”μ‹œμ§€ κ°’μ˜ μ’…λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λ¨

(ν”„λ‘œλ“€μ„œκ°€ 토픽에 λ ˆμ½”λ“œλ₯Ό 전솑할 λ•Œ λ©”μ‹œμ§€ ν‚€μ˜ ν•΄μ‹œκ°’μ„ ν† λŒ€λ‘œ νŒŒν‹°μ…˜μ„ μ§€μ •ν•˜κ²Œλ¨)

 

=> λ™μΌν•œ λ©”μ‹œμ§€ 킀라면 동일 νŒŒν‹°μ…˜μ— 듀어감

(μ–΄λŠ νŒŒν‹°μ…˜μ— 지정될지 μ•Œ 수 μ—†κ³  νŒŒν‹°μ…˜ κ°œμˆ˜κ°€ λ³€κ²½λ˜λ©΄ λ©”μ‹œμ§€ν‚€μ™€ νŒŒν‹°μ…˜ 맀칭이 λ‹¬λΌμ§€λ―€λ‘œ 주의)

 

λ©”μ‹œμ§€ ν‚€λ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ null둜 μ„€μ •λ˜κ³  이런 λ ˆμ½”λ“œλŠ” ν”„λ‘œλ“€μ„œ κΈ°λ³Έ μ„€μ • νŒŒν‹°μ…”λ„ˆμ— λ”°λΌμ„œ νŒŒν‹°μ…˜μ— λΆ„λ°°λ˜μ–΄ 적재

 

λ©”μ‹œμ§€ κ°’μ—λŠ” μ‹€μ§ˆμ μœΌλ‘œ μ²˜λ¦¬ν•  데이터가 λ“€μ–΄μžˆμŒ

 

λ©”μ‹œμ§€ 킀와 값은 μ§λ ¬ν™”λ˜μ–΄ 브둜컀둜 μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— μ»¨μŠˆλ¨Έκ°€ μ΄μš©ν•  λ•Œ μ§λ ¬ν™”ν•œ ν˜•νƒœμ™€ λ™μΌν•œ ν˜•νƒœλ‘œ 역직렬화λ₯Ό μˆ˜ν–‰ν•΄μ•Ό 함

 

(ν”„λ‘œλ“€μ„œκ°€ StringSerializer둜 μ§λ ¬ν™”ν•œ λ©”μ‹œμ§€ 값을 μ»¨μŠˆλ¨Έκ°€ IntegerDeserializer둜 μ—­μ§λ ¬ν™”ν•˜λ©΄ 정상적인 데이터λ₯Ό 얻을 수 X)

 

λ ˆμ½”λ“œμ˜ μ˜€ν”„μ…‹μ€ 0 μ΄μƒμ˜ 숫자둜 이루어져 있고 μ΄λŠ” 직접 μ§€μ •ν•  수 μ—†μœΌλ©° λΈŒλ‘œμ»€μ— μ €μž₯될 λ•Œ 이전에 μ „μ†‘λœ λ ˆμ½”λ“œμ˜ μ˜€ν”„μ…‹μ— +1 κ°’μœΌλ‘œ 생성됨

 

=> 이 μ˜€ν”„μ…‹μ€ μΉ΄ν”„μΉ΄ μ»¨μŠˆλ¨Έκ°€ 데이터λ₯Ό κ°€μ Έκ°ˆ λ•Œ μ‚¬μš©λ¨

(컨슈머 그룹으둜 이루어진 μΉ΄ν”„μΉ΄ μ»¨μŠˆλ¨Έλ“€μ΄ νŒŒν‹°μ…˜μ˜ 데이터λ₯Ό μ–΄λ””κΉŒμ§€ κ°€μ Έκ°”λŠ”μ§€ λͺ…ν™•νžˆ μ§€μ •ν•  수 있음)

 

ν—€λ”λŠ” λ ˆμ½”λ“œμ˜ 좔가적인 정보λ₯Ό λ‹΄λŠ” 메타데이터 μ €μž₯μ†Œ μš©λ„λ‘œ μ‚¬μš©ν•¨

(ν‚€/κ°’ ν˜•νƒœλ‘œ 데이터λ₯Ό μΆ”κ°€ν•˜μ—¬ λ ˆμ½”λ“œμ˜ 속성을 μ €μž₯ν•˜μ—¬ μ»¨μŠˆλ¨Έμ—μ„œ μ°Έμ‘° κ°€λŠ₯)

 

ν”„λ‘œλ“€μ„œκ°€ μ „μ†‘ν•œ λ ˆμ½”λ“œλŠ” νŒŒν‹°μ…˜μ— μ €μž₯

 

=> κ·Έλž˜μ„œ κ²°λ‘ μ μœΌλ‘œλŠ” 그림을 보면 λ ˆμ½”λ“œκ°€ ν† ν”½μ˜ νŒŒν‹°μ…˜μ— μ €μž₯λ˜λŠ” 것을 λ³Ό 수 있음

 

νŒŒν‹°μ…˜μ€ μΉ΄ν”„μΉ΄μ˜ λ³‘λ ¬μ²˜λ¦¬μ˜ ν•΅μ‹¬μœΌλ‘œμ¨ 그룹으둜 묢인 μ»¨μŠˆλ¨Έλ“€μ΄ λ ˆμ½”λ“œλ₯Ό λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 맀칭됨

 

 

 

 

=> 컨슈머의 μ²˜λ¦¬λŸ‰μ΄ ν•œμ •λœ μƒν™©μ—μ„œ λ§Žμ€ λ ˆμ½”λ“œλ₯Ό λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ 쒋은 방법은 컨슈머 수λ₯Ό 늘렀 μŠ€μΌ€μΌ 아웃 ν•˜λŠ” κ²ƒμž„!

(컨슈머 개수λ₯Ό 늘림과 λ™μ‹œμ— νŒŒν‹°μ…˜ κ°œμˆ˜λ„ 늘리면 μ²˜λ¦¬λŸ‰μ΄ μ¦κ°€ν•˜λŠ” 효과λ₯Ό λ³Ό 수 있음)

 

νŒŒν‹°μ…˜μ€ queue와 λΉ„μŠ·ν•œ ꡬ쑰라고 μƒκ°ν•˜λ©΄ μ΄ν•΄ν•˜κΈ° 쉬움

FIFO ꡬ쑰와 같이 λ¨Όμ € λ“€μ–΄κ°„ λ ˆμ½”λ“œλŠ” μ»¨μŠˆλ¨Έκ°€ λ¨Όμ € 가져감
(μΉ΄ν”„μΉ΄μ—μ„œλŠ” pop 같이 λ ˆμ½”λ“œλ₯Ό μ‚­μ œν•˜μ§„ X)

=> μ΄λŸ¬ν•œ νŠΉμ§• λ•Œλ¬Έμ— ν† ν”½μ˜ λ ˆμ½”λ“œλŠ” λ‹€μ–‘ν•œ λͺ©μ μ„ κ°€μ§„ μ—¬λŸ¬ 컨슈머 그룹듀이 ν† ν”½μ˜ 데이터λ₯Ό μ—¬λŸ¬ 번 κ°€μ Έκ°ˆ 수 있음

 

 

ν† ν”½ 이름 μ œμ•½ 쑰건

 

ν† ν”½ 이름을 생성할 λ•Œ μ œμ•½ 쑰건이 있음

 

  • 빈 λ¬Έμžμ—΄ ν† ν”½ 이름은 μ§€μ›ν•˜μ§€ μ•ŠμŒ
  • ν† ν”½ 이름은 λ§ˆμΉ¨ν‘œ ν•˜λ‚˜(.) λ˜λŠ” λ§ˆμΉ¨ν‘œ λ‘˜(..)둜 생성될 수 μ—†μŒ

  • ν† ν”½ μ΄λ¦„μ˜ κΈΈμ΄λŠ” 249자 미만으둜 μƒμ„±λ˜μ–΄μ•Ό 함

  • ν† ν”½ 이름은 μ˜μ–΄ λŒ€μ†Œλ¬Έμžμ™€ 숫자 0λΆ€ν„° 9 그리고 λ§ˆμΉ¨ν‘œ(.), 언더바(_), ν•˜μ΄ν”ˆ(-) μ‘°ν•©μœΌλ‘œ 생성할 수 있음
    (μ΄μ™Έμ˜ λ¬Έμžμ—΄μ΄ ν¬ν•¨λœ ν† ν”½ 이름은 생성 λΆˆκ°€)

  • μΉ΄ν”„μΉ΄ λ‚΄λΆ€ 둜직 관리 λͺ©μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 2개 ν† ν”½(__consumer_offsets, __transaction_state)κ³Ό λ™μΌν•œ μ΄λ¦„μœΌλ‘œ 생성 λΆˆκ°€λŠ₯

  • μΉ΄ν”„μΉ΄ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 둜직 λ•Œλ¬Έμ— ν† ν”½ 이름에 λ§ˆμΉ¨ν‘œ(.)와 언더바(_)κ°€ λ™μ‹œμ— λ“€μ–΄κ°€λ©΄ μ•ˆλ¨
    (생성은 κ°€λŠ₯ν•˜λ‚˜ μ‚¬μš© μ‹œ μ΄μŠˆκ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— WARNING λ©”μ„Έμ§€κ°€ λ°œμƒν•¨)

  • 이미 μƒμ„±λœ ν† ν”½ μ΄λ¦„μ˜ λ§ˆμΉ¨ν‘œ(.)λ₯Ό 언더바(_)둜 λ°”κΎΈλŠ” κ²½μš°λ‚˜ 이 λ°˜λŒ€μ˜ 경우 μ‹ κ·œ ν† ν”½ 이름과 λ™μΌν•˜λ‹€λ©΄ 생성할 수 μ—†μŒ
    (to.pic μ΄λ¦„μ˜ 토픽이 μƒμ„±λ˜μ–΄ μžˆλ‹€λ©΄ to_pic μ΄λ¦„μ˜ 토픽을 생성할 수 μ—†μŒ)

 

μ˜λ―ΈμžˆλŠ” ν† ν”½ 이름 μž‘λͺ… 방법

 

ν† ν”½ 이름을 λͺ¨ν˜Έν•˜κ²Œ μž‘μ„±ν•˜λ©΄ μœ μ§€λ³΄μˆ˜ μ‹œ 큰 어렀움을 κ²ͺ을 수 있음


(μ΅œμ†Œν•œ ν† ν”½ 이름을 톡해 μ–΄λ–€ κ°œλ°œν™˜κ²½μ—μ„œ μ‚¬μš©λ˜λŠ” 것인지 νŒλ‹¨ κ°€λŠ₯ν•΄μ•Όν•˜κ³  μ–΄λ–€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ–΄λ–€ 데이터 νƒ€μž…μœΌλ‘œ μ‚¬μš©λ˜λŠ”μ§€ μœ μΆ”ν•  수 μžˆμ–΄μ•Ό 함!)

 

μ „μ‚¬μ—μ„œ 곡용으둜 μ‚¬μš©ν•˜κ³  μžˆλŠ” 카프카라면 ν† ν”½μ˜ ownership을 κ°€μ§„ νŒ€μ˜ 이름을 μΆ”κ°€ν•˜λŠ” 것도 κ³ λ €ν•΄λ³Όλ§Œ ν•˜κ³ 

νžˆμŠ€ν† λ¦¬λ₯Ό λͺ…ν™•νžˆ ν•˜κ³  μ‹Άλ‹€λ©΄ νšŒμ‚¬ λ‚΄λΆ€μ—μ„œ μ‚¬μš© 쀑인 JIRA νƒ€κ²Ÿ 번호λ₯Ό ν† ν”½ 이름에 λ„£λŠ” 것도 쒋은 방법
(μΉ΄ν”„μΉ΄ ν΄λŸ¬μŠ€ν„°λ₯Ό 2λŒ€ 이상 μš΄μ˜ν•˜λŠ” κ²½μš°μ—λŠ” ν΄λŸ¬μŠ€ν„°λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μΉ΄ν”„μΉ΄ ν΄λŸ¬μŠ€ν„° 이름을 넣을 수 도 있음)

μ΄λŸ°μ‹μœΌλ‘œ μž‘λͺ…ν•˜λŠ”κ²Œ 쒋은데 μœ„μ—μ„œ λ§ν–ˆλ“―μ΄ μΉ΄ν”„μΉ΄ ν”„λ‘œλ“€μ„œλ‚˜ μ»¨μŠˆλ¨Έμ—μ„œ 토픽을 μ‚¬μš©ν•  λ•Œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜κΈ° λ•Œλ¬Έμ— human error λ°©μ§€λ₯Ό μœ„ν•΄ λŒ€μ†Œλ¬Έμžλ₯Ό μ„žμ–΄ μ“°λŠ” μΉ΄λ©œμΌ€μ΄μŠ€λŠ” μ§€μ–‘ν•˜λŠ”κ²Œ μ’‹μŒ
(κ΅¬λΆ„μžλ‘œ 특수문자λ₯Ό μ‘°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ μ’‹μŒ)

 

ν† ν”½ 이름에 λŒ€ν•œ κ·œμΉ™μ„ 사전에 μ •μ˜ν•˜κ³  ꡬ성원듀이 κ·Έ κ·œμΉ™μ„ 잘 λ”°λ₯΄λŠ” 것이 κ°€μž₯ μ€‘μš”ν•¨

 

=> 아무리 κ·œμΉ™μ„ 정해도 λ”°λ₯΄μ§€ μ•ŠμœΌλ©΄ μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•œ λ°©ν–₯으둜 토픽이름이 생성될 κ²ƒμž„


(μΉ΄ν”„μΉ΄λŠ” ν† ν”½ 이름 변경을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 이름 변경을 μœ„ν•΄μ„  μ‚­μ œ ν›„ λ‹€μ‹œ 생성해야 함)

 

λ°˜μ‘ν˜•