๋ณธ๋ฌธ

Kafka Overview

๋ฐ˜์‘ํ˜•

๐Ÿ’ก ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์•„ํŒŒ์น˜ Kafka ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์†Œ์Šค Application  →  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก๋ฐ›๋Š” Target Application

 

๋ณต์žกํ•ด์ง€๋Š” ์•„ํ‚คํ…์ฒ˜

 

์ด๋ฅผ ํ•ด๊ฒฐํ•ด๊ธฐ์œ„ํ•ด ๋‚˜์˜จ๊ฒƒ์ด - Apache Kafka

 

๐Ÿ’ก kafka ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ

kafka ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

 

kafka ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

 

๐Ÿ’ก Apache Kafka ํŠน์ง•

LinkedIn์—์„œ ์ตœ์ดˆ๋กœ ๋งŒ๋“ค๊ณ  opensourceํ™” ํ•œ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง€ ํ(FIFO : First In First Out)

 

→ ๋ถ„์‚ฐ ์•„ํ‚คํ…์ณ ๊ตฌ์„ฑ, Fault-toleranceํ•œ architecture(with zookeeper), ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ๊ตฌ์„ฑ์ด ์ž˜๋˜์–ด ์žˆ์Œ

→ AMQP, JMS API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ TCP๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ

→ Pub / Sub ๋ฉ”์‹œ์ง• ๋ชจ๋ธ์„ ์ฑ„์šฉ

→ ์ฝ๊ธฐ / ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ค‘์‹œ

→ Producer๊ฐ€ Batchํ˜•ํƒœ๋กœ broker๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์†๋„ ๊ฐœ์„ 

→ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ ๋ณด์žฅ

→ Consume๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ณง๋ฐ”๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  offset์„ ํ†ตํ•œ consumer-group๋ณ„ ๊ฐœ๋ณ„ consume๊ฐ€๋Šฅ

 


๐Ÿ’ก ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ํ† ํ”ฝ

 

ํ† ํ”ฝ: ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ณต๊ฐ„

 

patition์˜ record๊ฐ€ (์ผ์ •๊ธฐ๊ฐ„)์‚ญ์ œ๋˜์ง€์•Š์Œ: up to option

* partition์˜ record  ์ƒ๋ช…์ฃผ๊ธฐ
→ log.retention.ms: ์ตœ๋Œ€ record ๋ณด์กด ์‹œ๊ฐ„
→ log.retention.byte: ์ตœ๋Œ€ record ๋ณด์กด ํฌ๊ธฐ(byte)

 

์ด์— ๋ชฉ์ ์— ๋”ฐ๋ผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค (ElasticSearch, Hadoop)

 

partition๊ณผ consumer๋ฅผ ๋Š˜๋ ค ๋ณ‘๋ ฌ์ฒ˜๋ฆฌํ•œ๋‹ค

- ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์— ์ €์žฅ

- ๋ฐ์ดํ„ฐ ๋ฐฑ์—…์„ ์œ„ํ•ด ํ•˜๋‘ก์— ์ €์žฅ


๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ์นดํ”„์นด๋กœ ์ „์†กํ•˜๋Š” ํ”„๋กœ๋“€์„œ

์นดํ”„์นด ํ”„๋กœ๋“€์„œ: ๋ฐ์ดํ„ฐ๋ฅผ ํ† ํ”ฝ์— ๋ณด๋‚ด๋Š” ์—ญํ• 

 

- Topic์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑ
- ํŠน์ • Topic์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ publish
- ์ฒ˜๋ฆฌ ์‹คํŒจ/์žฌ์‹œ๋„


๐Ÿ’ก Broker, Replication, ISR ํ•ต์‹ฌ์š”์†Œ 3๊ฐ€์ง€!

broker๋Š” kafka๊ฐ€ ์„ค์น˜๋œ ์„œ๋ฒ„๋‹จ์œ„๋ฅผ ์˜๋ฏธ

 

replication
ISR


๐Ÿ’ก ์นดํ”„์นด ์ปจ์Šˆ๋จธ ์—ญํ• 

 

 

์นดํ”„์นด ์ปจ์Šˆ๋จธ

- Topic์˜ partition์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ polling: ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ํŠน์ • DB์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํŒŒ์ดํ”„๋ผ์ธ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค
- Partition offset ์œ„์น˜ ๊ธฐ๋ก(commit): offset์€ ํŒŒํ‹ฐ์…˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์œ„์น˜๋ฅผ ์˜๋ฏธ
- Consumer group์„ ํ†ตํ•ด ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ: ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ปจ์Šˆ๋จธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๋ฉด ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ → ๋”์šฑ ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

 

* ์นดํ”„์นด ์ปจ์Šˆ๋จธ์˜ ๋™์ž‘์€ ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ค์†Œ ๋‹ค๋ฆ„
- ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ: ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ํ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง
- ์นดํ”„์นด์—์„œ๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ
→ ์ด ํŠน์ง•์€ ์นดํ”„์นด ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์šด์˜ํ•˜๋Š”๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•จ

 

 

* ์นดํ”„์นด ์žฅ์•  ๋ฐ ์ปจ์Šˆ๋จธ ์žฌ์‹คํ–‰์‹œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

__consumer_offsets ํ† ํ”ฝ์˜ offset ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ์‹œ์ž‘์œ„์น˜ ๋ณต๊ตฌ ๊ฐ€๋Šฅ → ๊ณ ๊ฐ€์šฉ์„ฑ์˜ ํŠน์ง•์„ ๊ฐ–์Œ

 


๐Ÿ’ก ์นดํ”„์นด ์ปจ์Šˆ๋จธ Lag์ด๋ž€?

 

lag๋Š” ์นดํ”„์นด๋ฅผ ์šด์˜ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์•„์ฃผ ์ค‘์š”ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์ง€ํ‘œ

- ํ”„๋กœ๋“€์„œ๋Š” ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ๋„ฃ๋Š”๋‹ค
- ์ด ํŒŒํ‹ฐ์…˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋“ค์–ด๊ฐ€๊ฒŒ๋˜๋ฉด, ๊ฐ ๋ฐ์ดํ„ฐ์—๋Š” ์˜คํ”„์…‹์ด๋ผ๊ณ ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ๋ถ™๊ฒŒ ๋œ๋‹ค.

→ ์ปจ์Šˆ๋จธ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ offset, ํ”„๋กœ๋“€์„œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋„ฃ์€ offset์˜ ์ฐจ์ด: Lag

 

 

 

๋ฐ˜์‘ํ˜•

๊ณต์œ 

๋Œ“๊ธ€