일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- schema registry
- 카프카
- RabbitMQ
- reactive
- coursera
- kafka streams
- kafka interactive query
- Logstash
- scala
- kafkastreams
- Slick
- springboot
- Spring
- spring-batch
- Elasticsearch
- avo
- enablekafkastreams
- spring-cloud-stream
- aws
- statestore
- kafkastream
- 플레이 프레임워크
- Elk
- 한빛미디어
- confluent
- gradle
- Kafka
- spring-kafka
- play framework
- scala 2.10
- Today
- Total
b
EnableKafkaStream annotation 본문
springboot는 spring framework 를 좀 더 빠르고 쉽게 사용할 수 있는 목적을 가진 영역이다. 하지만 어느 순간부터 Spring 이외에도 Boot 까지 '제대로' 이해하지 못하면 엉망이 될 수 있는 존재가 되어버렸다. 특히, Condition annotation이 추가되면서 내부적으로 자세히 보고 적용을 해야한다.
예를 들어보면,
1. KafkaStream을 쓰기 위해 spring-kafka를 import 할경우 (cloud-stream-xxx역시 마찬가지) 간단한 String 이나, 추천되어지는 Avro 가 아니고 Json으로 (디)시리얼라이저를 지정한다고 할 경우, 안에서 어디에서 new ObjectMapper가 만들어지고, 어디 설정은 application.yml의 spring.kafka를 보는지, 계속 주의해야 한다. 간단한 rocksdb 기반의 StateStore를 API로 expose하기 위해서는
- Consumed.with(Serdes.Long(), orderSerdes), (ktable로 컨슈밍 할때)
- .withValueSerde(orderSerdes)); (Materialized를 지정할 때 )
- KafkaTemplate에 ProducerFactory를 주입할 때 등등...
이렇게 하더라도 KafkaHeader에서도 new ObjectMapper를 했지만, 어차피 다음주엔 byte로 바꿀꺼라 pass..
2. 방금전에 겪은 하나 더 @EnableKafkaStreams 를 붙일 경우 StreamConfig가 spring bean으로 떠 있다면, StreamsBuilderFactoryBean 를 통해, KafkaStreams가 만들어지고 .start된다.
아주 간단한 Cloud Native에서 , 하나의 role을 가지는 endpoint application을 만들때는 문제가 없으나, gateway, aggregator 역할 등등, 하나의 어플리케이션에서 2개의 StreamThread 를 메뉴얼 하게 제어하려면, 제대로 이해하고 있어야 한다.....
그냥 그랬다...