yeollow / return-home-safely

Apache License 2.0
1 stars 0 forks source link

enhancement: #15 [Spring Batch Job] local Kafka Producer(CCTV) #18

Closed yeollow closed 3 years ago

yeollow commented 3 years ago

Spring Batch Job

자세한 Spring Batch내용은 Spring Batch Docs
Spring Batch metadata Table은 Meta-Data Schema Appendix 참조

Job이나 Step은 각각 JobBuilderFactory, StepBuilderFactory를 생성자 DI를 하여 build하며 Factory Pattern은 Factory Pattern이란?을 참조하자

Kafka

kafka producer로 kafka broker의 topic에 데이터를 전송하기 위해서는 몇가지 설정이 필요하다. 자세한 내용은 Spring Kafka Docs 참조


bootstrap-servers 및 application-{phase}.yml, Topic의 replicas 및 partitions는 개발 환경에 따라 다름

yeollow commented 3 years ago

Bean Circuler Reference

KafkaTemplate에 대한 설정관련 내용을 Spring Kafka Docs를 참조하여 아래와 같이 구성

   @Bean
    public ProducerFactory<Long,CCTV> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }

    @Bean
    private Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);

        return props;
    }

    @Bean
    public KafkaTemplate<Long, CCTV> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }

이후 KafkaItemWriter에서 KafkaItemWriterBuilder를 통해 kafkaTemplate()관련 내용을 작성 시 매개변수로 위의 kafkaTemplate()을 전달하니 아래와 같은 Exception이 발생.

kafkaTemplate에 대한 properties설정을 application-local.yml에 지정하여 Spring Boot가 application을 구동할 때 자동으로 로딩되게 설정함.

yeollow commented 3 years ago

local spring batch job 실행 방법

kafka가 이미 local에 다운로드 되어있으며 kafka가 다운로드 되어있는 경로에서 아래 과정을 진행한다고 가정


이외 kafka 명령어

상기 명령어 등은 운영 환경에 따라 달라질 수 있음.