Docs Menu
Docs Home
/
MongoDB Kafka Connector
/ /

Error Handling

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ๊ฐœ์š”
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • ๋ชจ๋“  ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์ค‘์ง€
  • ๋ชจ๋“  ์˜ค๋ฅ˜ ํ—ˆ์šฉ
  • ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ํ—ˆ์šฉ
  • ์ฃผ์ œ์— ์˜ค๋ฅ˜ ๋ฐ ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€ ์“ฐ๊ธฐ
  • ๋กœ๊ทธ ์˜ค๋ฅ˜
  • ์ปค๋„ฅํ„ฐ ์ˆ˜์ค€์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” MongoDB Kafka connector์˜ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ชฉ๋ก์€ ์‹ฑํฌ connector์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • Avro ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์ œ์— ์“ฐ๊ณ  Protobuf ์—ญ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฃผ์ œ์˜ ๋ฉ”์‹œ์ง€ ๋””์ฝ”๋”ฉ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์— ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ ์บก์ฒ˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ˆ˜์‹  ๋ฌธ์„œ์— ์ž˜๋ชป๋œ ๋‹จ์ผ ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ฑํฌ connector์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ์กฐ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

  • ์˜ค๋ฅ˜ ๋กœ๊ทธ

connector์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์‹ฑํฌ connector๋Š” ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑํฌ connector๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ข…๋ฃŒ๋˜๊ณ  ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ฑํฌ connector์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ์— ์ข‹์€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์‹ฑํฌ ์ปค๋„ฅํ„ฐ๊ฐ€ ์ถฉ๋Œํ•˜๋ฉด ๋‹ค์Œ ์กฐ์น˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์ปค๋„ฅํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์žฌ๊ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ฑํฌ connector ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ—ˆ์šฉ

  • ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ฑํฌ ์ปค๋„ฅํ„ฐ์˜ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.

  • ์ฃผ์ œ์—์„œ ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€ ์ œ๊ฑฐ

errors.tolerance ์˜ต์…˜์— ์–ด๋–ค ๊ฐ’๋„ ์ง€์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ connector ๊ตฌ์„ฑ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹ฑํฌ connector๊ฐ€ ์ค‘์ง€๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

errors.tolerance=none

๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๋„๋ก ์‹ฑํฌ connector๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” connector๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์˜ต์…˜์ด์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฏ€๋กœ connector์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ต์…˜์„ ์ง€์ •ํ•˜์—ฌ ์‹ฑํฌ connector๊ฐ€ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

errors.tolerance=all

๊ฒฝ๊ณ 

์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ๋Œ€๋Ÿ‰ ์“ฐ๊ธฐ๋กœ ์ธํ•ด ๋ฉ”์‹œ์ง€ ๊ฑด๋„ˆ๋›ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

connector ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋‹ค ํ•˜๊ณ  ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ๋Œ€๋Ÿ‰ ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. connector ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋‹ค ํ•˜๊ณ  ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๋Œ€๋Ÿ‰ ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์†์‹ค์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ์“ฐ๊ธฐ (write) ์ž‘์—…์— ํ•™์Šต ๋ณด๋ ค๋ฉด ์“ฐ๊ธฐ ๋ชจ๋ธ ์ „๋žต ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜๋งŒ ํ—ˆ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์ค‘์ง€ํ•˜๋„๋ก ์‹ฑํฌ connector ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด connector ๋Š” ๋ฐ๋“œ ๋ ˆํ„ฐ ๋Œ€๊ธฐ์—ด์ด ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋Œ€๊ธฐ์—ด๋กœ ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ต์…˜์„ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ์‹ฑํฌ connector ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

errors.tolerance=data

์ถ”๊ฐ€๋กœ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ๋“œ ๋ ˆํ„ฐ ํ ๋ผ๋Š” ์ฃผ์ œ์— ์˜ค๋ฅ˜ ๋ฐ ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋„๋ก ์‹ฑํฌ connector๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋“œ ๋ ˆํ„ฐ ํ๋Š” Apache Kafka์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์—์„œ ์‹œ์Šคํ…œ์ด ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋Œ€์‹  ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ผ์šฐํŒ…ํ•˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋ฐ๋“œ ๋ ˆํ„ฐ ํ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘์ง€ํ•œ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋‚ด๊ตฌ์„ฑ์„ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์œผ๋กœ, ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌ์—์„œ ์ข‹์€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ต์…˜์„ ์ง€์ •ํ•˜์—ฌ connector๊ฐ€ ๋ชจ๋“  ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ๋“œ ๋ ˆํ„ฐ ํ๋กœ ๋ผ์šฐํŒ…ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

errors.tolerance=all
errors.deadletterqueue.topic.name=<name of topic to use as dead letter queue>

์˜ค๋ฅ˜์˜ ๊ตฌ์ฒด์ ์ธ ์ด์œ ์™€ ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

errors.deadletterqueue.context.headers.enable=true

๋ฐ๋“œ ๋ ˆํ„ฐ ๋Œ€๊ธฐ์—ด์— ํ•™์Šต ๋ณด๋ ค๋ฉด ๋ฐ๋“œ ๋ ˆํ„ฐ ๋Œ€๊ธฐ์—ด์— ๋Œ€ํ•œ Confluent์˜ ๊ฐ€์ด๋“œ ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค๋ฅธ ๋ฐ๋“œ ๋ ˆํ„ฐ ํ ๊ตฌ์„ฑ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฐ๋“œ ๋ ˆํ„ฐ ํ ๊ตฌ์„ฑ ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

connector๊ฐ€ ๋ฐ๋“œ ๋ ˆํ„ฐ ํ์— ์ปจํ…์ŠคํŠธ ํ—ค๋”๋กœ ์ •์˜ํ•˜๊ณ  ์“ฐ๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๋ฉด ๋Œ€๋Ÿ‰ ์“ฐ๊ธฐ ์˜ˆ์™ธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ—ˆ์šฉ๋˜๋Š” ์˜ค๋ฅ˜์™€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒญ์„ ํด๋ฆญํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

๋‹ค์Œ ๊ธฐ๋ณธ ์˜ต์…˜์€ Kafka Connect๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋งŒ ๊ธฐ๋กํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

errors.log.enable=false

๋‹ค์Œ ์˜ต์…˜์€ Kafka Connect๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์˜ค๋ฅ˜์™€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ชจ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ์— ์“ฐ๊ธฐ (write) ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

errors.log.enable=true

๋ฉ”์‹œ์ง€ ์ฃผ์ œ ๋ฐ ์˜คํ”„์…‹๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

errors.log.include.messages=true

์ž์„ธํ•œ ๋‚ด์šฉ์€ Confluent์˜ Kafka Connect๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ๊น… ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹ฑํฌ connector๋Š” connector ์ˆ˜์ค€์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Kafka ์—ฐ๊ฒฐ ์˜ต์…˜
MongoDB Kafka Connector ์˜ต์…˜
errors.tolerance
mongo.errors.tolerance
errors.log.enable
mongo.errors.log.enable

connector๊ฐ€ Kafka Connect ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์™€ MongoDB์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์— ๋‹ค๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ์•„๊ฐ€๊ธฐ

ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์„œ