01. Confluent Schema Registry

Schema Data Structure

๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” Producer์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Consumer ๊ฐ„์˜ ๊ณ„์•ฝ์œผ๋กœ ์‚ฌ์šฉ

  • ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์œผ๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ, ์ œ์–ด๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜๋‹จ์ด ์—†๊ฒŒ ๋จ

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ํ•ญ์ƒ ๋น„์ฆˆ๋‹ˆ์Šค์— ๋”ฐ๋ผ์„œ ์ง„ํ™”ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์„ Schema Evolution(์Šคํ‚ค๋งˆ ์ง„ํ™”)๋ผ๊ณ  ํ•จ

Schema Evolution

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

AVRO

Data Serialization System

  • Avro๋Š” Apache Open Source Software ํ”„๋กœ์ ํŠธ

  • ๋ฐ์ดํ„ฐ Serialization ์ œ๊ณต

  • Java๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ง€์›

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํ˜•์‹ ์ œ๊ณต

  • Avro ๋ฐ์ดํ„ฐ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ

์ง๋ ฌํ™”๋ž€ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ, ์ฆ‰ ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์— ์“ฐ๊ธฐwrite ์œ„ํ•ด ์—ฐ์†์ ์ธserial ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ.

์ง๋ ฌํ™”์˜ ์ฃผ๋œ ๋ชฉ์ ์€ ๊ฐ์ฒด๋ฅผ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

AVRO์˜ ์žฅ๋‹จ์ 

{
"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
	{"name": "name", "type": "string"},
	{"name": "favorite_number", "type": ["int", "null"]},
	{"name": "favorite_color", "type": ["string", "null"]}
 ]
}

์žฅ์ 

  • ์••์ถ•, ๊ณ ์„ฑ๋Šฅ, Binary ํฌ๋งท

  • Java๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ง€์›

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

  • Avro ์Šคํ‚ค๋งˆ๋Š” JSON์œผ๋กœ ์ •์˜๋˜๋ฏ€๋กœ, ์ด๋ฏธ JSON ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์–ธ์–ด์—์„œ ๊ตฌํ˜„์ด ์šฉ์ด(Schema Evolution ์„ ์‰ฝ๊ฒŒ ์ง€์›)

  • ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์Œ

  • Confluent Schema Registry์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋‹จ์ 

  • Binary ํ˜•ํƒœ๋กœ Serialization๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ณด๊ณ  ํ•ด์„ํ•˜๊ธฐ ์–ด๋ ค์›€(๋””๋ฒ„๊น…, ๊ฐœ๋ฐœ์‹œ ๋ถˆํŽธํ•จ)

Schema Evolution

Compatibility

  • Backward Compatibility

    • ์ƒˆ๋กœ์šด ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ.

    • ํ•„๋“œ ์‚ญ์ œ ํ˜น์€ ๊ธฐ๋ณธ ๊ฐ’์ด ์žˆ๋Š” ํ•„๋“œ ์ถ”๊ฐ€์ธ ๊ฒฝ์šฐ

  • Forward Compatability

    • ์ด์ „ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ.

    • ํ•„๋“œ ์ถ”๊ฐ€ ํ˜น์€ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ํ•„๋“œ ์‚ญ์ œ

  • Full compatability

    • ๊ธฐ๋ณธ ๊ฐ’์ด ์žˆ๋Š” ํ•„๋“œ ์ถ”๊ฐ€ ํ˜น์€ ์‚ญ์ œ

Schema ์„ค๊ณ„์‹œ ๊ณ ๋ คํ•  ์ 

  • ์‚ญ์ œ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ํ•„๋“œ์ด๋ฉด default value ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ง€์ •

  • ์ถ”๊ฐ€๋˜๋Š” ํ•„๋“œ๋ผ๋ฉด default value ๋ฅผ ์ง€์ •

  • ํ•„๋“œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ

Confluent Schema Registry (์Šคํ‚ค๋งˆ ์ €์žฅ์†Œ)

  • Confluent Schema Registry๋Š” ์Šคํ‚ค๋งˆ์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณต

    • ๋ชจ๋“  ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „ ๊ธฐ๋ก์„ ์ €์žฅ

    • Avro ์Šคํ‚ค๋งˆ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ RESTful ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

    • ์Šคํ‚ค๋งˆ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์Šคํ‚ค๋งˆ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ throw

    • ํ˜ธํ™˜์„ฑ ์„ค์ •์— ๋”ฐ๋ผ ์Šคํ‚ค๋งˆ ์ง„ํ™”(Schema Evolution) ๊ฐ€๋Šฅ

  • ๊ฐ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Avro ์Šคํ‚ค๋งˆ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ 

    • ๋Œ€์‹  Avro ์Šคํ‚ค๋งˆ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Global Unique ID๊ฐ€ ๊ฐ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ „์†ก

  • Schema Registry๋Š” ํŠน๋ณ„ํ•œ Kafka Topic์— ์Šคํ‚ค๋งˆ ์ •๋ณด๋ฅผ ์ €์žฅ

    • โ€œ_schemasโ€ Topic

    • kafkastore.topic ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

Schema ๋“ฑ๋ก ๋ฐ Data Flow

Last updated