Apache Kafka ๋ž€?

๋‚˜๋‚˜'s Brainยท2023๋…„ 9์›” 2์ผ
0

๊ฐœ๋…Study

๋ชฉ๋ก ๋ณด๊ธฐ
2/21
post-thumbnail

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๊ฐ€๋Šฅ


์นดํ”„์นด๋Š” ๋ฉ”์„ธ์ง€ํ์ด๋ฉฐ, ๋ฉ”์„ธ์ง€ํ์˜ ๋ชฉ์ ์€ ๋‹จ์ˆœํ•˜๋‹ค. ๋ฉ”์„ธ์ง€๋ฅผ ํ•œ๊ณณ์— ๋˜์ง€๊ณ  ๊ทธ๊ฑธ ํ•„์š”ํ•œ ์ฃผ์ฒด๊ฐ€ ๊ฐ€์ ธ๋‹ค ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๊ฑด RabbitMQ, ์นดํ”„์นด, ๋ฉค์บ์‹œ ๋“ฑ ๋‹ค์ˆ˜์˜ ์ œํ’ˆ๋“ค์˜ ๊ธฐ๋ณธ๊ธฐ๋Šฅ์ด๋‹ค. ์ผ๋‹จ ๋ฉ”์„ธ์ง€ํ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด์“ฐ๋Š” ์„œ๋น„์Šค๋Š” ๋กœ๊ทธ ๊ด€๋ฆฌ์ด๋‹ค. ์–ด๋А ํšŒ์‚ฌ๋“ค ๋กœ๊ทธ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ๊ทธ์— ๋งž๋Š” ๋กœ๊ทธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค.

๐Ÿšฉ RabbitMQ

  • ๊ตฌ์„ฑ์ด ์‰ฝ๋‹ค.

  • ์œ ์—ฐํ•œ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๋ฉด ๊ด€๋ฆฌ UI ๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.

  • ์ œํ’ˆ ์„ฑ์ˆ™๋„๊ฐ€ ๋†’๋‹ค.

  • ๊ฐœ๋ฐฉํ˜• ํ”„๋กœํ† ์ฝœ์„ ์œ„ํ•œ AMQP ๋ฅผ ๊ตฌํ˜„ ์œ„ํ•ด ๊ฐœ๋ฐœ

  • ํ•„์š”์— ๋”ฐ๋ผ ๋™๊ธฐ/๋น„๋™๊ธฐ์‹์ด ๊ฐ€๋Šฅํ•จ

  • ์†Œ๋น„์ž์ค‘์‹ฌ์˜ ์„ค๊ณ„

  • 20k/sec ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์žฅ

๐Ÿšฉ Apache Kafka

  • ๊ตฌ๋…๋ฐฉ์‹์˜ ๋น„๋™๊ธฐ์‹ ๊ตฌ์„ฑ

  • ๊ณ ์„ฑ๋Šฅ ๊ณ ๊ฐ€์šฉ์„ฑ

  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ์— ํšจ๊ณผ์ ์œผ๋กœ ์„ค๊ณ„ ๋จ.

  • ์ƒ์‚ฐ์ž ์ค‘์‹ฌ์˜ ์„ค๊ณ„

  • ๋ฒ”์šฉ ๋ฉ”์„ธ์ง• ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์€ ์ œ๊ณต๋˜์ง€ ์•Š์Œ.

  • 100k/sec ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์žฅ


๐Ÿ‘จโ€๐Ÿ’ป Kafka Architecture

Broker : Kafka๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ์„œ๋ฒ„ 1๋Œ€ = 1 broker

Topic : Data๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ

Producer : Broker์— data๋ฅผ writeํ•˜๋Š” ์—ญํ• 

Consumer : Broker์—์„œ data๋ฅผ readํ•˜๋Š” ์—ญํ• 

Consumer-Group : ๋ฉ”์„ธ์ง€ ์†Œ๋น„์ž ๋ฌถ์Œ ๋‹จ์œ„(n consumers)

Zookeeper : Kafka๋ฅผ ์šด์šฉํ•˜๊ธฐ ์œ„ํ•œ Coordination service(zookeeper ์†Œ๊ฐœ)

Partition : topic์ด ๋ณต์‚ฌ(replicated)๋˜์–ด ๋‚˜๋‰˜์–ด์ง€๋Š” ๋‹จ์œ„


๐Ÿ’ก๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’ก๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’ก๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’ก๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ’ก

Producer : ๋ฐ์ดํ„ฐ ๋„ฃ์Œ
Consumer : ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ๊ฐ
Topic : ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„ = ํ…Œ์ด๋ธ”
( ํ† ํ”ฝ ๋ช… ํ™•์‹คํ•  ์‹œ , ์œ ์ง€๋ณด์ˆ˜์‹œ ํŽธ๋ฆฌ)

๐Ÿ”– ํŒŒํ‹ฐ์…˜์€ ๋Š˜๋ฆฌ๋Š”๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋‹ค์‹œ ์ค„์ผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผํ•˜๋ฉฐ ํŒŒํ‹ฐ์…˜์„ ๋Š˜๋ฆฌ๋ฉด ์ปจ์Šˆ๋จธ ๊ฐฏ์ˆ˜๋ฅผ ๋Š˜๋ ค์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ํ† ํ”ฝ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ 0๋ฒˆ๋ถ€ํ„ฐ ํŒŒํ‹ฐ์…˜ ์‹œ์ž‘

  • ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜์€ ํ์™€ ๊ฐ™์ด ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒํ‹ฐ์…˜ ๋์—์„œ ๋ถ€ํ„ฐ ์ฐจ๊ณก ์Œ“์ด๊ฒŒ ๋จ

  • ์ฐจ๊ณก ์Œ“์ธ ๋ฐ์ดํ„ฐ๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ

  • ๋”์ด์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค์ง€ ์•Š์œผ๋ฉด ์ปจ์Šˆ๋จธ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ

  • ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ ( reord )๋“ค์„ ๊ฐ€์ ธ๊ฐ€๋„ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š์Œ

= ํŒŒํ‹ฐ์…˜์— ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒŒ๋˜๋Š”๊ฒƒ


๐Ÿšจ ๊ทธ๋ ‡๋‹ค๋ฉด , ์ด ํŒŒํ‹ฐ์…˜์— ๋‚จ์€ ๋ฐ์ดํ„ฐ๋Š” ๋ˆ„๊ฐ€ ๋“ค๊ณ ๊ฐ€๋Š”๊ฒƒ์ผ๊นŒ?

์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ๋ถ™์—ˆ์„๋•Œ ๋‹ค์‹œ 0๋ฒˆ๋ถ€ํ„ฐ ๊ฐ€์ ธ๊ฐ€์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค๋งŒ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ๋‹ฌ๋ผ์•ผํ•˜๊ณ , outo.offset.reset = earlist ์„ธํŒ…๋˜์–ด์•ผํ•œ๋‹ค.

๋™์ผ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๋‘๋ฒˆ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ

ํŒŒํ‹ฐ์…˜์ด ๋‘๊ฐœ์ผ ๊ฒฝ์šฐ
( ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ๋•Œ ํ‚ค๋ฅผ ์ง€์ •๊ฐ€๋Šฅํ•˜๋‹ค. )

1) ํ‚ค๊ฐ€ null์ด๊ณ , ๊ธฐ๋ณธํŒŒํ‹ฐ์…”๋„ˆ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
โžก๏ธ ๋ผ์šด๋“œ๋กœ๋นˆ์œผ๋กœ ํ• ๋‹น
2) ํ‚ค๊ฐ€ ์žˆ๊ณ , ๊ธฐ๋ณธํŒŒํ‹ฐ์…”๋„ˆ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
โžก๏ธ ํ‚ค์˜ ํ•ด์‹œ ๊ฐ’์„ ๊ตฌํ•˜๊ณ , ํŠน์ • ํŒŒํ‹ฐ์…˜์— ํ• ๋‹น

๐Ÿ“Œ ํŒŒํ‹ฐ์…˜์˜ ๋ฐ์ดํ„ฐ(record)๋Š” ์–ธ์ œ ์‚ญ์ œ ๋˜๋Š”๊ฐ€?

๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ตœ์žฌ์‹œ๊ฐ„๊ณผ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
log.retention.ms : ์ตœ๋Œ€ record ๋ณด์กด์‹œ๊ฐ„
log.retention.byte: ์ตœ๋Œ€ record ๋ณด์กดํฌ๊ธฐ


โœจ ์นดํ‘ธ์นด ์šด์˜์—์„œ ์ค‘์š”ํ•œ ์—ญํ•  3๊ฐ€์ง€

๐Ÿ’ก Broker, Replication, ISR

Broker : ์นดํ”„์นด๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์„œ๋ฒ„๋‹จ์œ„ (๋ณดํ†ต 3๊ฐœ์ด์ƒ ๊ถŒ์žฅ )
Replication: ๋ณต์ œ/ ๊ฐ€์šฉ์„ฑ๋ณด์žฅ (ex. Replication 3๊ฐœ = ์›๋ณธ 1๊ฐœ, ๋ณต์ œ๋ณธ 2๊ฐœ ) = ๋ธŒ๋กœ์ปค ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ์„œ Replication ๊ฐœ์ˆ˜๊ฐ€ ์ œํ•œ๋œ๋‹ค.

์›๋ณธ : Leader partiton (ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ• ๋•Œ ๋ฐ›๋Š” ๊ณณ)
๋ณต์ œ๋ณธ : Follower partiton

Leader partiton + Follower partiton โžก๏ธ In Sync Replica (ISR)

๐Ÿ“Œ Producer

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

ํ”„๋กœ๋“€์„œ์˜ ack ๋™์ž‘ โžก๏ธ ์ƒ์„ธ์˜ต์…˜ โžก๏ธ ๊ณ ๊ฐ€์šฉ์„ฑ ์œ ์ง€

๐Ÿ’ก ack ์ข…๋ฅ˜ : 0, 1, all

0: ๋ฐ์ดํ„ฐ ์ „์†ก ํ™•์ธ ์‘๋‹ต๊ฐ’ X , ํŒŒํ‹ฐ์…˜ ๋ณต์ œ์‘๋‹ต๊ฐ’ X
1: ๋ฐ์ดํ„ฐ ์ „์†ก ํ™•์ธ ์‘๋‹ต๊ฐ’ O , ํŒŒํ‹ฐ์…˜ ๋ณต์ œ์‘๋‹ต๊ฐ’ X
all: ๋ฐ์ดํ„ฐ ์ „์†ก ํ™•์ธ ์‘๋‹ต๊ฐ’ O , ํŒŒํ‹ฐ์…˜ ๋ณต์ œ์‘๋‹ต๊ฐ’ O
=> (๋Œ€์‹ ์†๋„๊ฐ€ ํ˜„์ €ํžˆ ๋А๋ฆฌ์ง€๋งŒ ๊ฐ€์žฅ๊ตฟ)

Replication ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ?
๋ธŒ๋กœ์ปค์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰๋„ ๋Š˜์–ด๋‚˜๊ฒŒ ๋จ์„ ์ฃผ์˜ํ•˜์ž

์ถœ์ฒ˜ : https://blog.voidmainvoid.net/179
https://ellune.tistory.com/29

profile
"๋กœ์ปฌ์—์„  ๋ฌธ์ œ์—†์—ˆ๋Š”๋ฐโ€ฆ?"

0๊ฐœ์˜ ๋Œ“๊ธ€