์•ž์„  ๊ธ€์—์„œ๋Š”

์ฃผํ‚คํผ(zookeeper)๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์นดํ”„์นด ํ† ํ”ฝ(kafka topic)์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ํ•œ ํ›„์— ์ž๋ฐ” Kafka API๋ฅผ ์ด์šฉํ•˜์—ฌ Kafka Producer์™€ Kafka Consumer๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.



Kafka Producer configs ์„ค์ •

  • bootstrap.servers
    • ์—ฐ๊ฒฐํ•  ์„œ๋ฒ„ ์ •๋ณด์ž…๋‹ˆ๋‹ค. host1:port1,host2:port2์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ดˆ๊ธฐ ์ปค๋„ฅ์…˜ ์—ฐ๊ฒฐ์‹œ์— ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์„œ๋ฒ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํฌํ•จํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฉ”์‹œ์ง€ ์ „์†ก์‹œ์—๋Š” ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์„ ๋งบ์€ ๋‹ค์Œ์— ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ง€์š”.
  • key.serializer, value.serializer
    • ๋ฉ”์‹œ์ง€๋ฅผ serialize ํ•  ๋•Œ ์‚ฌ์šฉํ•  ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • ByteArraySerializer, StringSerializer ๋“ฑ๋“ฑ Serializer๋ฅผ implementsํ•œ ํด๋ž˜์Šค๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • partitioner.class
    • ์–ด๋–ค ํŒŒํ‹ฐ์…˜์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์€ DefaultPartitioner์ด๋ฉฐ ๋ฉ”์‹œ์ง€ ํ‚ค์˜ ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์†กํ•  ํŒŒํ‹ฐ์…˜์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • acks
    • ํ”„๋กœ๋“€์„œ๊ฐ€ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์นดํ”„์นด๊ฐ€ ์ž˜ ๋ฐ›์€ ๊ฑธ๋กœ ์ฒ˜๋ฆฌํ•  ๊ธฐ์ค€์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    • 0, 1, all ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ ๋ฉ”์‹œ์ง€ ์†์‹ค๋ฅ ๊ณผ ์ „์†ก ์†๋„์— ๋Œ€ํ•ด ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์„ค์ •๊ฐ’ ์†์‹ค๋ฅ  ์†๋„ ์„ค๋ช…
      acks = 0 ๋†’์Œ ๋น ๋ฆ„ ํ”„๋กœ๋“€์„œ๋Š” ์„œ๋ฒ„์˜ ํ™•์ธ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ 
      ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ๋๋‚˜๋ฉด ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
      acks = 1 ๋ณดํ†ต ๋ณดํ†ต ์นดํ”„์นด์˜ leader๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ž˜ ๋ฐ›์•˜๋Š”์ง€๋งŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      acks = all ๋‚ฎ์Œ ๋А๋ฆผ ์นดํ”„์นด์˜ leader์™€ follower๊นŒ์ง€ ๋ชจ๋‘ ๋ฐ›์•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์€ acks=1 ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
  • buffer.memory
    • ํ”„๋กœ๋“€์„œ๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†ก ๋Œ€๊ธฐ์ค‘์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฒ„ํผ๋งํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ž…๋‹ˆ๋‹ค.
    • ๋ ˆ์ฝ”๋“œ๊ฐ€ ์„œ๋ฒ„์— ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค๋” ๋นจ๋ฆฌ ์ „์†ก๋˜๋ฉด max.block.ms๋™์•ˆ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์€ 33554432, ์•ฝ 33MB์ž…๋‹ˆ๋‹ค.
  • retries
    • ํ”„๋กœ๋“€์„œ๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„๋•Œ ๋‹ค์‹œ ์‹œ๋„ํ•  ํšŸ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
    • 0๋ณด๋‹ค ํฐ ์ˆซ์ž๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ ์ˆซ์ž๋งŒํผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ์— ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • max.request.size
    • ์š”์ฒญ์˜ ์ตœ๋Œ€ ๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์นดํ”„์นด ์„œ๋ฒ„์—๋„ ๋ณ„๋„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„œ๋กœ ๊ฐ’์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • connections.max.idle.ms
    • ์ง€์ •ํ•œ ์‹œ๊ฐ„ ์ดํ›„์—๋Š” idle ์ƒํƒœ์˜ ์—ฐ๊ฒฐ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  • max.block.ms
    • ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐผ๊ฑฐ๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ฐจ๋‹จํ•  ์‹œ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • request.timeout.ms
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์ „์— ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์žฌ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ๋„˜์–ด์„œ๋ฉด ์š”์ฒญ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • retry.backoff.ms
    • ์‹คํŒจํ•œ ์š”์ฒญ์— ๋Œ€ํ•ด ํ”„๋กœ๋“€์„œ๊ฐ€ ์žฌ์‹œ๋„ํ•˜๊ธฐ ์ „์— ๋Œ€๊ธฐํ•  ์‹œ๊ฐ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • producer.type
    • ๋ฉ”์‹œ์ง€๋ฅผ ๋™๊ธฐ(sync), ๋น„๋™๊ธฐ(async)๋กœ ๋ณด๋‚ผ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ์Œ“์€ ํ›„ ์ „์†กํ•˜๋ฏ€๋กœ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



Kafka Consumer configs ์„ค์ •

  • group.id
    • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์„ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ  ์•„์ด๋””์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋•Œ ์ง€์ •ํ•˜๋Š” topic ์ด๋ฆ„๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
    • Zookeeper์—์„œ๋Š” ๊ฐ ๊ทธ๋ฃน์˜ ๋ฉ”์‹œ์ง€ offset์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๊ทธ๋ฃน id๊ฐ€ ๊ฐ™์œผ๋ฉด offset๊ฐ’ ๋˜ํ•œ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.
  • bootstrap.servers
    • ํ”„๋กœ๋“€์„œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ•  ์ •๋ณด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • fetch.min.bytes
    • ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์ธ 1์˜ ๊ฒฝ์šฐ์—๋Š” ์ฆ‰์‹œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋œปํ•˜๋ฉฐ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • auto.offset.reset
    • ์นดํ”„์นด์˜ ์ดˆ๊ธฐ offset์ด ์—†๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œํ•˜์—ฌ ํ˜„์žฌ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์•„๋ž˜์˜ ์„ค์ •์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
      • earliest : ๊ฐ€์žฅ ๋น ๋ฅธ ์˜คํ”„์…‹์œผ๋กœ ์ž๋™ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • latest : ์ตœ์‹  ์˜คํ”„์…‹์œผ๋กœ ์ž๋™ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • none : ์ด์ „ ์˜คํ”„์…‹์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์˜ˆ์™ธ๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค.
      • anything else : ์ปจ์Šˆ๋จธ์—๊ฒŒ ์˜ˆ์™ธ์„ ๋˜์ง‘๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์€ latest๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • session.timeout.ms
    • ์ปจ์Šˆ๋จธ์˜ ์‹คํŒจ๋ฅผ ๊ฐ์ง€ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ํƒ€์ž„์•„์›ƒ์ž…๋‹ˆ๋‹ค.
    • ๋ธŒ๋กœ์ปค์™€์˜ ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์ธ๋ฐ, ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ปจ์Šˆ๋จธ๋Š” ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์žฅ์• ๋กœ ์ธ์‹๋˜๊ณ  ๋ธŒ๋กœ์ปค๋Š” ํ•ด๋‹น ์ปจ์Šˆ๋จธ๋ฅผ ๊ทธ๋ฃน์—์„œ ์ œ์™ธํ•˜๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฐธ๊ณ ๋กœ ์ปจ์Šˆ๋จธ๋Š” ๋ธŒ๋กœ์ปค์—๊ฒŒ ์ž๊ธฐ๊ฐ€ ์‚ด์•„์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‹ ํ˜ธ(heartbeat)๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • heartbeat.interval.ms
    • ์‚ด์•„์žˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์‹ ํ˜ธ(heartbeat)์˜ ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ๊ทธ๋ฃน์— ์†ํ•ด์ง€๊ฑฐ๋‚˜ ์ œ์™ธ๋  ๋•Œ ์žฌ์กฐ์ •์„ ์œ„ํ•ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • session.timeout.ms ๊ฐ’๋ณด๋‹ค ๋‚ฎ๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • max.poll.interval.ms
    • ์‚ด์•„์žˆ๋‹ค๊ณ  ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, poll์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉด ์ปจ์Šˆ๋จธ๋Š” ์‹คํŒจ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.
    • ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์›์—๊ฒŒ ํŒŒํ‹ฐ์…˜์„ ์žฌํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.



๊ทธ ์™ธ์˜ ๋” ์ž์„ธํ•œ Kafka configs ์„ค์ • ๋ฐฉ๋ฒ•