λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
πŸ“š μ‹œλ¦¬μ¦ˆ/- ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ λ°°μ›Œλ³΄λŠ” kafka

[ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ λ°°μ›Œλ³΄λŠ” kafka] 6. ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ μΉ΄ν”„μΉ΄ νŒŒν‹°μ…˜(kafka partition) μ•Œμ•„λ³΄κΈ°

by Wonit 2023. 9. 7.

ν•΄λ‹Ή μ‹œλ¦¬μ¦ˆμ—μ„œ μ œκ³΅ν•˜λŠ” λͺ¨λ“  μ†ŒμŠ€μ½”λ“œλŠ” github repository μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. μžμ„Έν•œ μ½”λ“œμ™€ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” github repository μ—μ„œ ν™•μΈν•΄μ£Όμ„Έμš”.

 

GitHub - my-research/kafka: apache kafka docs & practical usages(with spring) that i composed

apache kafka docs & practical usages(with spring) that i composed - GitHub - my-research/kafka: apache kafka docs & practical usages(with spring) that i composed

github.com

이번 [ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ λ°°μ›Œλ³΄λŠ” kafka] μ‹œλ¦¬μ¦ˆλŠ” μ•„λž˜ μˆœμ„œλŒ€λ‘œ 챕터가 κ΅¬μ„±λ˜κ³ , μ‹œλ¦¬μ¦ˆ μ™Έλ‘œ kafka κ΄€λ ¨ν•˜μ—¬ λ”μš± λ§Žμ€ ν•™μŠ΅ μ •λ³΄λŠ” kafka 심화 μ„Έμ…˜ μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œλ¦¬μ¦ˆ λͺ©μ°¨

  1. μ‹œλ¦¬μ¦ˆλ₯Ό μ‹œμž‘ν•˜λ©°
  2. kafka λΉ λ₯΄κ²Œ 훑어보고 μ•„λŠ”μ²΄ν•˜κΈ°
  3. kafka 컨셉과 μš©μ–΄ 정리
  4. ν•™μŠ΅ν…ŒμŠ€νŠΈ μ€€λΉ„ν•˜κΈ°
  5. ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ kafka producer μ•Œμ•„λ³΄κΈ°
  6. ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ kafka consumer μ•Œμ•„λ³΄κΈ°
  7. ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ partitioning μ•Œμ•„λ³΄κΈ° <-- ν˜„μž¬ κΈ€
  8. ν•™μŠ΅ ν…ŒμŠ€νŠΈλ‘œ consumer group κ³Ό rebalancing μ•Œμ•„λ³΄κΈ°

ν•™μŠ΅μ˜ 단계별 μˆœμ„œλ‘œ λͺ©μ°¨κ°€ κ΅¬μ„±λ˜μ–΄μžˆμœΌλ―€λ‘œ μ„ ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” 챕터가 μ‘΄μž¬ν•©λ‹ˆλ‹€


 

μ§€λ‚œμ‹œκ°„ μš°λ¦¬λŠ” Producer 와 Consumer 의 java client 의 기본적인 λ‚΄μš©μ— λŒ€ν•΄μ„œ ν•™μŠ΅ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ•Œμ•„λ³΄μ•˜λ‹€.

 

이번 μ‹œκ°„μ—λŠ” Partition 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² λ‹€

 

partitioning

 

일반적인 데이터 처리의 νŒŒν‹°μ…”λ‹μ€ 데이터λ₯Ό νŠΉμ • 기쀀에 따라 λ‚˜λˆ„λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

μ΄λ ‡κ²Œ λ‚˜λ‰œ μ—¬λŸ¬κ°œμ˜ 덩어리듀을 λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬ν•΄μ„œ 데이터 처리 자체λ₯Ό λ³‘λ ¬λ‘œ λ§Œλ“€κ±°λ‚˜ 검색이 μš©μ΄ν•˜λ„λ‘ λ§Œλ“ λ‹€.

 

μΉ΄ν”„μΉ΄μ—μ„œλ„ λ™μΌν•˜λ‹€

 

μΉ΄ν”„μΉ΄λŠ” ν† ν”½λ³„λ‘œ νŒŒν‹°μ…”λ‹μ„ μ§€μ›ν•œλ‹€

 

ν† ν”½ λ‚΄μ˜ 데이터λ₯Ό ν•˜λ‚˜ ν˜Ήμ€ κ·Έ μ΄μƒμ˜ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄ 이벀트 λ‘œκ·Έλ“€μ„ κ΄€λ¦¬ν•œλ‹€

 

μΉ΄ν”„μΉ΄λŠ” μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ 토픽을 μ—¬λŸ¬κ°œμ˜ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λˆ μ„œ 데이터 λΆ„μ‚° μ €μž₯κ³Ό 병렬 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ„λ‘ ν•œλ‹€

 

μ™œ νŒŒν‹°μ…”λ‹μ„ ν•˜λŠ”κ°€?

 

데이터 처리의 κ°œλ…μ—μ„œ νŒŒν‹°μ…”λ‹μ΄λ‚˜ μΉ΄ν”„μΉ΄μ˜ νŒŒν‹°μ…”λ‹μ΄λ‚˜ κ²°κ΅­ 데이터λ₯Ό 더 빨리 μ²˜λ¦¬ν•˜κ³ μž ν•˜λŠ” λ‹ˆμ¦ˆμ— μ˜ν•΄ 생겨났닀.

 

λ§Œμ•½ ν•œκ°œμ˜ λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•˜κ³  λ‚΄λΆ€μ μœΌλ‘œ κ·Έ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° 1μ΄ˆκ°€ κ±Έλ¦°λ‹€κ³  ν•΄λ³΄μž.

 

그럼 6개의 λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•˜λŠ”λ° 총 6μ΄ˆκ°€ 걸릴 것이닀

 

 

ν•˜μ§€λ§Œ 6개의 λ©”μ‹œμ§€λ₯Ό 3개의 νŒŒν‹°μ…˜μ— μ €μž₯ν•΄μ•Ό ν•œλ‹€λ©΄ λ„ˆλ¬΄λ‚˜λ„ λ‹Ήμ—°ν•˜κ²Œ 2초둜 μ‹œκ°„μ΄ λ‹¨μΆ•λ˜λŠ” 컨셉이닀

 

 

토픽이 μ—¬λŸ¬κ°œμ˜ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λ‰˜λ©΄ 이제 μžμ—°μŠ€λŸ½κ²Œ λ©”μ‹œμ§€λ₯Ό μ–΄λ–€ νŒŒν‹°μ…˜μ— 보내야 ν•˜μ§€? ν˜Ήμ€ 토픽을 κ΅¬λ…ν•˜λŠ”κ±°μ•Ό? νŒŒν‹°μ…˜μ„ κ΅¬λ…ν•˜λŠ”κ±°μ•Ό? μ΄λΌλŠ” 주제둜 고민을 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€.

 

μΉ΄ν”„μΉ΄μ˜ νŒŒν‹°μ…˜ ν• λ‹Ή

 

μš°λ¦¬κ°€ μΉ΄ν”„μΉ΄ ν”„λ‘œλ“€μ„œ api λ₯Ό μ΄μš©ν•˜μ—¬ μΉ΄ν”„μΉ΄ λΈŒλ‘œμ»€μ— λ©”μ‹œμ§€(이벀트 둜그)λ₯Ό λ°œν–‰ν•œλ‹€κ³  ν–ˆμ„ λ•Œ, μΉ΄ν”„μΉ΄ λ‚΄λΆ€μ μœΌλ‘œλŠ” ν•΄λ‹Ήν•˜λŠ” λ©”μ‹œμ§€λ₯Ό μ–΄λ–€ νŒŒν‹°μ…˜μ— μ €μž₯ν•΄μ•Ό ν•˜λŠ”κ°€? 에 λŒ€ν•œ partition assign 과정을 거치게 λœλ‹€.

 

 

μœ„ 그림을 보면 μ•Œ 수 μžˆλ“― μΉ΄ν”„μΉ΄λŠ” λ‚΄λΆ€μ μœΌλ‘œ Partitiner κ°€ 이벀트 둜그(λ©”μ‹œμ§€)듀을 μ–΄λ–€ νŒŒν‹°μ…˜μ— 할당할지 κ²°μ •ν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€

νŒŒν‹°μ…”λ„ˆλŠ” 크게 2가지 νŒŒν‹°μ…˜ ν• λ‹Ή 기법을 μ œκ³΅ν•˜λŠ”λ°, λ‹€μŒκ³Ό κ°™λ‹€

 

  1. key based partitioning
  2. Round Robin Partitioning

 

이 2가지에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž

Key Based Partitioning

 

key based partition 은 μš°λ¦¬κ°€ λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•  λ•Œ νŠΉμ • ν‚€λ₯Ό μž…λ ₯ν•˜μ—¬ ν•΄λ‹Ή ν‚€λ₯Ό hashing ν•œ κ°’μœΌλ‘œ νŒŒν‹°μ…˜μ„ κ²°μ •ν•˜λŠ” 방법이닀.

νŒŒν‹°μ…˜ ν‚€λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 과정을 κ±°μΉœλ‹€.

 

μš°μ„  νŒŒν‹°μ…˜ ν‚€λ‘œ λ“€μ–΄μ˜¨ input 값을 murmur2 λ₯Ό μ΄μš©ν•΄μ„œ 해싱을 ν•˜κ³ , κ·Έ 결과둜 λ‚˜μ˜¨ hash 값에 νŒŒν‹°μ…˜μ˜ 갯수만큼 mod 연산을 μˆ˜ν–‰ν•˜μ—¬ μ‹€μ œ λ“€μ–΄κ°ˆ partition 의 number λ₯Ό κ²°μ •ν•œλ‹€.

 

이제 ν…ŒμŠ€νŠΈλ₯Ό 해보며 λ°°μ›Œλ³΄μž

 

ν…ŒμŠ€νŠΈ 1. ν‚€λ₯Ό μ΄μš©ν•œ νŒŒν‹°μ…˜ Produce ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ μ„€λͺ…

  • 주석 1 & 2
    • for loop 을 λŒλ©΄μ„œ i κ°€ 짝수/ν™€μˆ˜μ— 따라 νŒŒν‹°μ…˜ ν‚€λ₯Ό 각각 λ§Œλ“€μ—ˆλ‹€.
  • 주석 3.
    • ProduceRecord 에 이벀트 둜그λ₯Ό partitionKey 와 value ν˜•νƒœλ‘œ μƒμ„±ν•œλ‹€
    • μ•žμ„œ producer μ—μ„œ ν•™μŠ΅ν–ˆλ˜ 것 처럼 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” callback 을 μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€
  • 주석 4.
    • μ½˜μ†” κ²°κ³Ό 좜λ ₯을 μœ„ν•΄ blocking ν•œλ‹€

 

ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€

 

 

그럼 μ•žμ„œ producer νŒŒνŠΈμ—μ„œ λ°°μ› λ˜ ν…ŒμŠ€νŠΈλ“€ 처럼 ν‚€λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ μ–΄λ–»κ²Œ 될까?

 

μ•„λž˜ ν…ŒμŠ€νŠΈμ—μ„œ ν™•μΈν•΄λ³΄μž

ν…ŒμŠ€νŠΈ 2. λΌμš΄λ“œ 둜빈 νŒŒν‹°μ…˜ Produce ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ μ„€λͺ…

  • 주석 1 & 2
    • for loop 을 총 6번 λˆλ‹€
  • 주석 2.
    • ProduceRecord 에 이벀트 둜그λ₯Ό partitionKey 없이 μƒμ„±ν•œλ‹€
    • μ•žμ„œ producer μ—μ„œ ν•™μŠ΅ν–ˆλ˜ 것 처럼 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” callback 을 μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€
  • 주석 4.
    • μ½˜μ†” κ²°κ³Ό 좜λ ₯을 μœ„ν•΄ blocking ν•œλ‹€

 

이 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λœλ‹€

 

 

μœ„μ˜ κ²°κ³Όλ₯Ό 보면 μ•Œ 수 μžˆλ“―μ΄, μ‹€μ œ ν‚€λ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ•˜μ§€λ§Œ λ‚΄λΆ€μ μœΌλ‘œ partitioner 에 μ˜ν•΄ Round Robin ν˜•νƒœλ‘œ ν‚€κ°€ ν• λ‹Ήλ˜μ–΄ κ³ λ₯΄κ²Œ νŒŒν‹°μ…˜μ— λ“€μ–΄κ°„ 것을 확인할 수 μžˆλ‹€

 

ν…ŒμŠ€νŠΈ 3. νŒŒν‹°μ…˜ ν‚€ 좩돌 ν…ŒμŠ€νŠΈ

 

μ•žμ„  νŒŒν‹°μ…˜ ν• λ‹Ή λ™μž‘μ€‘ ν•΄μ‹œ 과정을 κ±°μΉœλ‹€κ³  ν–ˆλŠ”λ°, μ—¬κΈ°μ„œ μ£Όμ˜ν•  점이 μžˆλ‹€.

 

μ•„λž˜μ˜ ν…ŒμŠ€νŠΈλ₯Ό ν™•μΈν•΄λ³΄μž

 

ν…ŒμŠ€νŠΈ μ„€λͺ…

  • 주석 1
    • kafka λŠ” λ‚΄λΆ€μ μœΌλ‘œ hash λ₯Ό ν•˜κΈ° μœ„ν•΄ murmur hashing λ₯Ό ν•œλ‹€.
    • key-1 μ΄λΌλŠ” λ¬Έμžμ—΄μ„ hash ν•˜κ³  μž„μ˜μ˜ νŒŒν‹°μ…˜ 수(2) 만큼 mod 연산을 μˆ˜ν–‰ν•˜μ—¬ νŒŒν‹°μ…˜ 번호λ₯Ό κ΅¬ν•œλ‹€
  • 주석 2.
    • key-2 μ΄λΌλŠ” λ¬Έμžμ—΄μ„ νŒŒν‹°μ…˜ ν‚€λ‘œ μ„€μ •ν•΄ νŒŒν‹°μ…˜ 번호λ₯Ό κ΅¬ν•œλ‹€
  • 주석 3.
    • 두 ν‚€κ°€ 달라야 ν•œλ‹€λŠ” ν…ŒμŠ€νŠΈ 단언문이닀

 

이 ν…ŒμŠ€νŠΈλŠ” μ„œλ‘œ λ‹€λ₯Έ ν‚€λ₯Ό λͺ…μ‹œν–ˆκΈ° λ•Œλ¬Έμ— μ‹€νŒ¨ν•΄μ•Όν•œλ‹€.

 

 

ν•˜μ§€λ§Œ μ•ˆνƒ€κΉκ²Œλ„ μ‹€νŒ¨ν•œλ‹€.

 

이것을 νŒŒν‹°μ…˜ ν‚€ 좩돌이라고 ν•œλ‹€.

 

μ„œλ‘œ λ‹€λ₯Έ νŒŒν‹°μ…˜ ν‚€λ₯Ό κ°€μ‘Œλ”λΌλ„ ν•΄μ‹œκ°’μ„ νŒŒν‹°μ…˜ 수둜 mod μ—°μ‚°ν•œ κ²°κ³Όκ°€ λ™μΌν•˜κΈ° λ•Œλ¬Έμ— 이와 같은 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 것이닀.

 

κ°œλ°œμžλŠ” νŒŒν‹°μ…˜ ν‚€λ₯Ό 잘 ν• λ‹Ήν–ˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ‹€μ œλ‘œ νŒŒν‹°μ…˜ ν‚€κ°€ λ™μΌν•˜κΈ° 떄문에 ν•œμͺ½μœΌλ‘œ λͺ°λ¦Ό ν˜„μƒμ΄ λ°œμƒν•  수 μžˆλŠ”λ°, 이둜 μΈν•΄μ„œ νŒŒν‹°μ…”λ‹μ„ ν–ˆμ§€λ§Œ μ‹€μ§ˆμ μœΌλ‘œλŠ” μ•„λ¬΄λŸ° νš¨κ³Όλ„ 얻을 수 μ—†λŠ” 상황이 λ˜μ–΄λ²„λ¦°λ‹€.

 

이런 ν‚€ μΆ©λŒμ„ μ΅œμ†Œν™” ν•˜κΈ° μœ„ν•΄μ„œ 킀에 λŒ€ν•΄μ„œ 사전에 μΆ©λΆ„ν•œ ν…ŒμŠ€νŠΈ 과정이 μžˆκ±°λ‚˜ νŒŒν‹°μ…˜ 수λ₯Ό λŠ˜λ¦¬λŠ” 것을 κ³ λ €ν•΄μ•Όν•  μˆ˜λ„ μžˆλ‹€.

 

νŒŒν‹°μ…˜κ³Ό λ©”μ‹œμ§€ μˆœμ„œ

 

νŒŒν‹°μ…˜μ„ 이야기할 λ•ŒλŠ” 항상 μˆœμ„œμ— λŒ€ν•œ 이야기가 λ‚˜μ˜¨λ‹€.

 

κ²°λ‘ λΆ€ν„° 이야기 ν•˜μžλ©΄,

 

νŒŒν‹°μ…˜ λ‚΄λΆ€μ˜ λ©”μ‹œμ§€ μˆœμ„œλŠ” 보μž₯이 λ˜μ§€λ§Œ νŒŒν‹°μ…˜κ°„μ˜ μˆœμ„œλŠ” 보μž₯λ˜μ§€ μ•ŠλŠ”λ‹€.

 

μ—­μ‹œ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ•Œμ•„λ³΄μž

 

ν…ŒμŠ€νŠΈ 4. 단일 νŒŒν‹°μ…˜μ—μ„œ λ©”μ‹œμ§€ μˆœμ„œ 확인 ν…ŒμŠ€νŠΈ

 

μ•„λž˜ ν…ŒμŠ€νŠΈλŠ” 단일 νŒŒν‹°μ…˜μ΄ μ„€μ •λœ ν† ν”½μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•˜κ³  μ†ŒλΉ„ν•˜λŠ” ν…ŒμŠ€νŠΈμ΄λ‹€. ν…ŒμŠ€νŠΈ 전문은 github μ—μ„œ 확인할 수 μžˆλ‹€.

 

ν…ŒμŠ€νŠΈ μ„€λͺ…

  • 주석 1
    • λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•œλ‹€.
    • μˆœμ„œλŒ€λ‘œ μ•ŒνŒŒλ²³κ³Ό 이λͺ¨μ§€λ₯Ό λ°œν–‰ν•œλ‹€.
  • 주석 2.
    • consumer 에 νŠΉμ • 토픽에 λŒ€ν•΄ subscribe ν•œλ‹€.
  • 주석 3 & 4
    • consumer 의 poll() 연산을 ν†΅ν•΄μ„œ λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„ν•˜κ³  ν•΄λ‹Ή λ©”μ‹œμ§€ μŠ€νŠΈλ¦Όμ„ String 리슀트둜 λ³€ν™˜ν•œλ‹€
  • 주석 5
    • ν…ŒμŠ€νŠΈ 단언문을 톡해 List 의 λ‚΄μš©λ¬Όκ³Ό λ™μΌν•œ μˆœμ„œμΈμ§€ κ²€μ¦ν•œλ‹€

이 ν…ŒμŠ€νŠΈλŠ” μ„±κ³΅ν•œλ‹€

ν…ŒμŠ€νŠΈ 5. 닀쀑 νŒŒν‹°μ…˜μ—μ„œ λ©”μ‹œμ§€ μˆœμ„œ 확인 ν…ŒμŠ€νŠΈ

μ•„λž˜ ν…ŒμŠ€νŠΈλŠ” 닀쀑 νŒŒν‹°μ…˜μ΄ μ„€μ •λœ ν† ν”½μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•˜κ³  μ†ŒλΉ„ν•˜λŠ” ν…ŒμŠ€νŠΈμ΄λ‹€.

ν…ŒμŠ€νŠΈ μ„€λͺ…

  • 주석 1
    • λ©”μ‹œμ§€λ₯Ό λ°œν–‰ν•œλ‹€.
    • μˆœμ„œλŒ€λ‘œ μ•ŒνŒŒλ²³κ³Ό 이λͺ¨μ§€λ₯Ό λ°œν–‰ν•œλ‹€.
  • 주석 2.
    • consumer 에 νŠΉμ • 토픽에 λŒ€ν•΄ subscribe ν•œλ‹€.
  • 주석 3 & 4
    • consumer 의 poll() 연산을 ν†΅ν•΄μ„œ λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„ν•˜κ³  ν•΄λ‹Ή λ©”μ‹œμ§€ μŠ€νŠΈλ¦Όμ„ String 리슀트둜 λ³€ν™˜ν•œλ‹€
  • 주석 5
    • ν…ŒμŠ€νŠΈ 단언문을 톡해 List 의 λ‚΄μš©λ¬Όκ³Ό λ™μΌν•œ μˆœμ„œμΈμ§€ κ²€μ¦ν•œλ‹€
    • μˆœμ„œλŒ€λ‘œ μ†ŒλΉ„λ˜μ§€ μ•ŠλŠ”λ‹€.

λ°œν–‰ μˆœμ„œλŒ€λ‘œ μ†ŒλΉ„ν•˜μ§€ μ•ŠλŠ”κ²ƒμ„ ν™•μΈν•˜λŠ” μœ„μ˜ ν…ŒμŠ€νŠΈ μ—­μ‹œ ν†΅κ³Όν•œλ‹€.

νŒŒν‹°μ…˜ μˆ˜λŠ” μ–Όλ§ˆκ°€ μ λ‹Ήν• κΉŒ?

 

μ•žμ„  λ‚΄μš©λ“€μ„ μ’…ν•©μ μœΌλ‘œ 생각해봀을 λ•Œ, νŒŒν‹°μ…˜ 수λ₯Ό κ²°μ •ν•˜λŠ” 일은 맀우 μ€‘μš”ν•˜λ‹€.

 

μš°λ¦¬λŠ” λ©”μ‹œμ§€μ˜ μ²˜λ¦¬λŸ‰μ„ 높이기 μœ„ν•΄μ„œ νŒŒν‹°μ…”λ‹μ„ ν•œλ‹€.

 

그럼 μ²˜λ¦¬λŸ‰μ„ 맀우 높이기 μœ„ν•΄μ„œ νŒŒν‹°μ…˜μ„ 100개, 1000개 λŠ˜λ €λ„ 될까? λ‹Ήμ—°νžˆ μ•ˆλœλ‹€.

 

νŒŒν‹°μ…˜μ€ μΉ΄ν”„μΉ΄ 브둜컀 λ‚΄λΆ€μ˜ ν† ν”½ λ””λ ‰ν† λ¦¬λž‘ λ§€ν•‘λ˜κ³  νŒŒν‹°μ…˜μ— μ €μž₯λ˜λŠ” λ©”μ‹œμ§€λ§ˆλ‹€ 2개의 파일(인덱슀, 데이터)κ°€ μ €μž₯λœλ‹€.

 

κ²°κ΅­ νŒŒν‹°μ…˜μ΄ λ§Žμ„μˆ˜λ‘ 파일 ν•Έλ“€λŸ¬ μˆ˜κ°€ λ§Žμ•„μ Έ 파일 ν•Έλ“€λŸ¬κ°€ λ‚­λΉ„κ°€ 될 수 μžˆλ‹€.

 

ν•˜μ§€λ§Œ νŒŒν‹°μ…˜ μˆ˜κ°€ 적닀면 λ©”μ‹œμ§€ μ²˜λ¦¬λŸ‰μ΄ 쀄어듀어 μ„±λŠ₯이 μ „λ°˜μ μœΌλ‘œ μ €ν•˜λ  수 μžˆλ‹€.

 

λ¬Όλ‘  상황과 쑰건에 λ”°λΌμ„œ κ²°μ • 사항이 계속 λ°”λ€Œκ²Œ 될 것인데, μ΄λŸ¬ν•œ 사항듀을 μΈμ§€ν•˜κ³  있으면 선택에 도움이 될 것이닀

 

ν•™μŠ΅ ν…ŒμŠ€νŠΈ 정리

  • βœ… νŒŒν‹°μ…˜ ν‚€λ₯Ό λͺ…μ‹œν•˜λ©΄ ν•΄λ‹Ή 킀에 ν•΄λ‹Ήν•˜λŠ” νŒŒν‹°μ…˜μ— λ©”μ‹œμ§€(이벀트 둜그)κ°€ λ°œν–‰λœλ‹€
  • βœ… νŒŒν‹°μ…˜ ν‚€λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ partitioner 에 μ˜ν•΄ 적절히 νŒŒν‹°μ…˜μ— κ³ λ₯΄κ²Œ λΆ„λ°°λœλ‹€
  • βœ… νŒŒν‹°μ…˜ ν‚€λ₯Ό λͺ…μ‹œν•˜λ”λΌλ„ νŒŒν‹°μ…˜ ν• λ‹Ή 좩돌이 λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ κ·Έ 점을 κ³ λ €ν•΄μ•Όν•œλ‹€
  • βœ… νŒŒν‹°μ…˜ λ‚΄μ—μ„œλŠ” μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€
  • βœ… ν† ν”½ λ‚΄μ˜ μ—¬λŸ¬ νŒŒν‹°μ…˜κ°„μ˜ μˆœμ„œλŠ” 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€

λŒ“κΈ€