데이터 엔지니어 기술 블로그

[🧙Kafka] 카프카 구축 (8) - Serializer: JSON vs Avro vs Thrift 비교 본문

데이터 엔지니어링

[🧙Kafka] 카프카 구축 (8) - Serializer: JSON vs Avro vs Thrift 비교

jun_yeong_park 2021. 4. 9. 23:22
반응형

About

카프카에서 데이터를 전송할 때 직렬화를 통해 바이너리 배열로 변환해야 한다. 직렬화를 하는 이유는 어떤 값을 참조하는 주소가 담긴 변수를 저장했다고 했을 때, 다시 불러오게 된다고 해도 가르키던 값의 주소가 달라졌기 때문에 의미가 없다. 그래서 참조 값(Reference Type)은 저장하거나 보낼 수 없고 값(Value Type)만 저장하거나 보낼 수 있다.

 

Serializer

JSON

파이썬에서 직렬화, 역직렬화 방법은 다음과 같다. 파이썬 프로그래밍을 하면 array, dict 타입의 데이터를 파일로 저장하거나 불러올 때 아래의 함수(직렬화 및 역직렬화)를 자주 사용하게 된다.

스키마가 따로 존재하지 않아서 데이터를 보낼 때 전부 보내야하는 부담이 있다.

# 직렬화
json_value = json.dumps(value)

# 역직렬화
value = json.loads(json_value)

 

Avro

언어 중립적인 데이터 직렬화 시스템고 JSON과 비슷한 형식이지만 Avro는 스키마가 존재한다는 차이점이 있다.

프로듀서가 새로운 스키마로 전환하게 되어도 컨슈머는 변경 없이 처리할 수 있다는 장점이 있다.

기존에 사용하던 컬럼이 사라지고 새로운 컬럼이 생겼다고 가정해본다. 컨슈머에서는 기존에 저장된 데이터에서 기존 컬럼을 가져올 수 있고 새로운 컬럼은 null 값을 가져온다. 반대로 새롭게 저장된 데이터에서는 기존 컬럼은 null 값을 반환하고 새로운 컬럼은 가져올 수 있다. 

카프카에서 사용할 때 문제는 파일마다 헤더에 스키마가 저장되어 있어서 부담이 크다는 것이다. 그래서 카프카에서는 Confluent의 오픈소스 중에서 스키마 레지스트리(Schema Registry)라는 것을 사용하면 도움이 된다. 스키마를 Schema Registry에 저장을 하고 프로듀서에서 메시지를 보낼 때 스키마 ID만 지정해주면 된다. 

 

Thrift

페이스북에서 개발한 다양한 언어를 지원하는 RPC 프레임워크이다. RPC는 여러 언어를 이용한 서비스 개발을 위해 사용된다. 

페이스북, 에버노트 등에서 활용된다.

 

Protocol Buffers

구글에서 개발한 RPC 프레임워크이고 지원하는 언어가 그렇게 많지 않다. 그러나 문서가 괜찮고 커뮤니티 활동도 많다.

구글, ActiveMQ 등에서 활용된다.

반응형
Comments