Kafka-intro.md

  • LinkedIn ๋ฐ์ดํ„ฐํŒ€์—์„œ ๊ฐœ๋ฐœํ•œ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ๋„๊ตฌ

Kafka๋Š” ์™œ ๋งŒ๋“ค์–ด์กŒ๋Š”๊ฐ€?

๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์•„ํ‚คํ…์ฒ˜

  • ๊ธฐ์กด์˜ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” redis๋‚˜ rabbitMQ์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๋งž์ถ”์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ ์„ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค.

  • ์ฆ‰, ๋ฐ์ดํ„ฐ ํŒŒํŽธํ™”๊ฐ€ ์‹ฌ๊ฐํ•ด์กŒ๊ณ  ์ด๋Š” ์„œ๋น„์Šค์˜ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

์œ„ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด

  • ๋ฐ์ดํ„ฐ์˜ ์ค‘์•™์ง‘๊ฒฐํ™”

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์‹ค์‹œ๊ฐ„ ์ˆ˜์ง‘

  • ์‚ฌ์šฉ์ž์˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ ์†Œ๋น„

ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ๊ทธ ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ Kafka ์ด๋‹ค.

Kafka์˜ ํŠน์ง•

  1. High throughout messaging capacity

  • ์งง์€ ์‹œ๊ฐ„์•ˆ์— ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  1. Scalability์™€ fault tolerent : ํ™•์žฅ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ

  • broker์™€ replication์„ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ณ  ๋ธŒ๋กœ์ปค๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋ณต์ œ๋œ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค์—์„œ ์‰ฝ๊ฒŒ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. Undeleted Log

  • ํƒ€ ํ”Œ๋žซํผ๊ณผ ๋‹ฌ๋ฆฌ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•ด๋„ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.

Kafka์˜ ์‚ฌ์šฉ์„ฑ

์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‚˜์˜ค๋Š” ๋น… ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

  • ํ•˜์ง€๋งŒ ์†Œ๊ทœ๋ชจ์˜ ์Šคํƒ€ํŠธ์—…์—์„œ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ ํ™•์žฅ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ์— ์žˆ๋‹ค. ์Šคํƒ€ํŠธ์—…์€ ๊ธ‰์†๋„๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ํ™•์žฅ์„ฑ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. Kafka๋Š” broker๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ™•์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ  ๋งŒ์•ฝ ๋ธŒ๋กœ์ปค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ replication์„ ํ†ตํ•ด์„œ ์‰ฝ๊ฒŒ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kafka broker

  • ์‹คํ–‰๋œ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์ค‘ 1๋Œ€

  • 3๋Œ€ ์ด์ƒ์˜ ๋ธŒ๋กœ์ปค๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ

  • Zookeeper์™€ ์—ฐ๋™ํ•„์š”

    • Zookeeper(Apache Zookeeper)

      • Kafka ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ

  • ๋ธŒ๋กœ์ปค ์ค‘ 1๋Œ€๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

    • Controller

      • ๊ฐ ํ”„๋กœ์ปค์—๊ฒŒ ๋‹ด๋‹นํŒŒํ‹ฐ์…˜ ํ• ๋‹น

      • ๋ธŒ๋กœ์ปค ์ •์ƒ ๋™์ž‘ ๋ชจ๋‹ˆํ„ฐ๋ง

Record

new ProducerRecord<String, String>("topic", "key", "message);
ConsumerRecords<String, String> records = consumer.poll(1000);
for (ConsumerRecord<String, String> record : records) {
  ...
}

๊ฐ์ฒด๋ฅผ byteํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Serialize/Deserialize ํ•„์š”

  • Serializer

  • ๊ธฐ๋ณธ์œผ๋กœ String Serializer๋ฅผ ์ œ๊ณต

  • ๋‹ค์–‘ํ•˜๊ฒŒ Customํ•˜์—ฌ ์‚ฌ์šฉ ex) key = null, value = json formatting

Topic & Partition

  • ๋ฉ”์‹œ์ง€ ๋ถ„๋ฅ˜ ๋‹จ์œ„

  • n๊ฐœ์˜ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ๊ฐ€๋Šฅ

  • ๊ฐ ํŒŒํ‹ฐ์…˜๋งˆ๋‹ค ๊ณ ์œ ํ•œ ์˜คํ”„์…‹(offset)์„ ๊ฐ€์ง

  • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ์ˆœ์„œ๋Š” ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋จ *Queue(FIFO) ๊ตฌ์กฐ๋กœ ํŒŒํ‹ฐ์…˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€๋งŒ ์ •ํ™•ํ•˜๊ฒŒ FIFO ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ์ž…์ถœ๋ ฅ์ด ์ด๋ฃจ์–ด์ง€์ง€๋Š” ์•Š์Œ

Kafka log and segment

  • ์‹ค์ œ๋กœ ์ €์žฅ์€ ํŒŒ์ผ์‹œ์Šคํ…œ์œผ๋กœ not a DB

  • ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋ ๋•Œ๋Š” ์„ธ๊ทธ๋จผํŠธํŒŒ์ผ์ด ์—ด๋ ค์žˆ์Œ

  • ์„ธ๊ทธ๋จผํŠธ๋Š” ์‹œ๊ฐ„ ๋˜๋Š” ํฌ๊ธฐ ๊ธฐ์ค€์œผ๋กœ ๋‹ซํžˆ๊ณ , ๋‹ซํžŒ ์ดํ›„ ์ผ์ • ์‹œ๊ฐ„์— ์••์ถ•, ์‚ญ์ œ๋จ

  • ์ผ์ •์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง

Last updated