[Spark] Kafka Streaming - 인코딩 된 JSON 데이터 가공하기
데이터 이모저모/Spark2024. 1. 6. 01:10[Spark] Kafka Streaming - 인코딩 된 JSON 데이터 가공하기

🧐 개요 Apache Kafka를 통해 발행된 메세지의 Key 및 Value는 (Kafka의 자체적인 로직으로 인해) 인코딩되어 있습니다. 따라서 해당 데이터를 디코딩하지 않으면 읽을 때 데이터가 2진법으로 표기됩니다. Spark-Streaming-Kafka 앱의 경우에도 수신한 Kafka 메세지를 특정 데이터 타입으로 CAST 하도록 공식 가이드에서도 권고하고 있습니다. 메세지가 일반적인 STRING 또는 INTEGER 데이터 타입인 경우에는 그냥 CAST를 진행해 주면 아무런 문제가 없습니다. 문제는 메세지가 JSON 데이터 타입인 경우에 발생하는데, 현재의 Spark는 인코딩된 STRUCT 데이터를 자동으로 디코딩해주지 못합니다. 디코딩을 위해서는 기존 데이터가 가지고 있던 스키마(schema) 정..

[주저리] Kafka는 발행된 메세지의 데이터 타입을 기억할까? (JSON과 string의 비교)
데이터 이모저모/Kafka2024. 1. 2. 02:39[주저리] Kafka는 발행된 메세지의 데이터 타입을 기억할까? (JSON과 string의 비교)

🧐 개요 Apache Kafka 환경에 발행된 메세지는 자동으로 인코딩(직렬화)됩니다. 일전에 Spark Streaming 앱에서 수신한 Kafka 메세지에서 CAST를 진행해주었던 이유도 직렬화 된 데이터를 문자열로 변환시켜주기 위해서였죠. 발행된 메세지를 재사용하기 위해서는 적절한 디코딩을 통해 데이터를 읽기 및 쓰기가 가능한 포맷으로 바꾸어주어야 합니다. Kafka 내부적으로 디폴트로 사용되는 인코더가 있지만 사용자가 직접 Serializer 객체를 정의하여 인코딩을 수행할 수도 있습니다. confluent-kafka 모듈을 학습하던 도중 궁금해졌던 부분은 JSON 데이터의 처리였습니다. 구체적으로는 "Kafka는 str(dict) 데이터와 json.dumps(dict).encode('utf-8'..

image