Open yeollow opened 3 years ago
kafka의 producer와 consumer를 spring-kafka client로 작성하고, consumer에서 읽어들인 데이터파일을 spring-hadoop을 이용하여 HDFS에 저장하는 방식도 고민
Workflow
상기 workflow는 개발 환경(local, dev, prod)에 따라 다르게 구성
Batch Application
위의 Batch Application의 kafkaItemWriter로 topic에 데이터를 전송하지 못하는 경우, batch application에서는 ItemWriter를 통해 MySQL에 데이터를 저장하고, JPA를 통해 DB있는 데이터를 모두 읽어 broker의 topic에 데이터를 전송하는 아래와 같은 kafka Producer Application을 고안하도록 한다.
Kafka Producer Application
- producer에서 send()를 통해 topic에 따라 BatchApplication에서 JPA를 통해 받아들여오는 데이터를 broker의 topic으로 전송
- producer client는 공식문서 참조
- core module에 읽을 data정보와 관련된 dto를 정의 후 repository에서 entitymanager를 통해 모든 데이터를 읽어 List
로 반환 -> String.format을 통해 Dto정보를 정의 후 List 의 크기만큼 모든 정보를 iteration하여 kafka topic에 send().
fluentd 연동
Spark Application
class GPS(latitude : String, longitude : String)
RDD.map { record =>
\
val splitRecord = recore.split(",")
\
val longi = splitRecord(0)
\
val lati = splitRecord(1)
\
GPS(longi,lati)
\
}.toDF
Spring Batch Application
CCTV / Police등에 대한 공공데이터 .csv파일에 대해 빅데이터 배치 프로세스를 진행한다.
spring-kafka, spring-batch 등을 통해 kafka broker의 topic에 data를 저장한다. (producer)
broker의 topic data는 hadoop내에 fluentd를 통해 pull하여 HDFS에 저장한다. (consumer)
HDFS에 저장된 topic data를 spark application을 통해 MR과정을 거쳐 원하는 GPS(latitude, longitude)를 뽑아 MySQL에 저장한다.