일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reactive
- Kafka
- statestore
- coursera
- Spring
- spring-kafka
- schema registry
- Slick
- springboot
- kafkastream
- Logstash
- RabbitMQ
- spring-batch
- 카프카
- scala 2.10
- scala
- 한빛미디어
- Elasticsearch
- play framework
- aws
- enablekafkastreams
- gradle
- kafka interactive query
- Elk
- kafka streams
- 플레이 프레임워크
- kafkastreams
- spring-cloud-stream
- confluent
- avo
- Today
- Total
목록분류 전체보기 (167)
b
필요한 수준까지 이해한듯 해서, 메모로 남김 원래의 카프카는 데이터 주입에 대한 순서가 중요하지 않았다. (정확히는 어느 정도의 버퍼를 카프카 브로커가 가지면서 Event Time에 대한 조정 작업을 알아서 해준다)하지만 producer의 명등성 옵션과 순서 보장에 대한 이슈가 중요해졌고 max.in.flight.request.per.connection = 1 로 셋팅하면서 순서 꼬임을 좀 방어하고자 했는데...1로 설정하고 idempotence 옵션이 켜져있고 retry가 가능한 상태일때 전송하다가 OutOfOrderSequence 예외가 발생한다면 클라이언트 영역에서 이 Sequence Number를 잘 처리해야한다. (재전송 하거나, 다음 idempotence 전송에서 써야한다) 이게 어렵다... ..
몇 달전에 메모장에 적어놨던 내용인데, 지우면 또 까먹을 듯 해서 기록으로 남김 * 기존 Java Class에서 Avro Schema 획득하기ReflectData.get().getSchema 를 이용하여, 쉽게 json형식의 AvroSchema를 획득할 수 있다. (검증은 꼭 할것) 아쉽지만 record 타입을 자동으로 찾아서 해준다거나, vargs 형식으로 getSchema를 사용할 수는 없다.Schema schema = ReflectData.get().getSchema(Order.class); System.out.println(schema.toString(true)); * Schema Evolution1. backward : 새스키마로 이전 데이터를 읽을 수 있다. ex) 새 field를 추가할때 d..
subject란?- Schema Registry는 Schema를 Subject 단위로 관리되어지는 듯 하다. 디폴트로는 -key, -value (ex: data.order-value) 형식으로 사용되지만 confluent 4.1 부터 이 부분을 커스텀마이징 할 수 있는 SubjectNameStrategy가 추가되었다.기본적으로 사용하는 토픽이 동일하다면 동일한 subject를 보지만, 커스텀마이징 한다면 Record 에 따라 subject로 변경 가능하다.Get the subject name for the given topic and value type. 1. 최초에 Schema Registry에 등록하고 Schema ID 를 가져오는 동작- SR은 Cache 기반으로 동작한다 어플리케이션이 시작하면 A..
테스트를 진행함에서 있어서 unit test와 integration test를 분리하고 싶은 니즈가 많다. junit5를 이용한다면, Tag로 쉽게 처리 가능하지만 ( https://junit.org/junit5/docs/5.0.2/api/org/junit/jupiter/api/Tag.html ) 레거시 프로젝트들 대다수가 junit5를 사용하지 못한다.그래서 보통은 https://selimober.com/gradle_unit_integration/ 이러한 방법으로 처리하는데 nebula plugin을 이용하면 쉽게 처리 할 수 있다. nebula facet : https://github.com/nebula-plugins/nebula-project-plugin 1. src/test/java 에는 unit..
GenericRecordFile/String 기반의 Schema 에서 Avro Object를 생성하는 것을 말한다. 이 방법은 runtime 에서 실패할 수 있기 때문에 사용에서는 추천되는 방법은 아니지만, 쉽게 사용 할 수 있는 장점이 있다. Schema{ "type": "record", "namespace": "com.example", "name": "user", "fields": [ { "name": "name", "type": "string" } ] }다시피 GenericRecordBuilder builder = new GenericRecordBuilder(schemaString); builder.set("name", "bistros"); GenericData.Record bistros = bui..
어제의 이슈 StreamsBuilder.table은 과연 changelog topic을 만드는가 ?https://kafka.apache.org/11/javadoc/org/apache/kafka/streams/StreamsBuilder.html#table-java.lang.String- 문서상에 의하면 '쿼리 불가능한 내부 store-name을 만들고, internal changelog topic은 만들어 지지 않는다고 한다.The resulting KTable will be materialized in a local KeyValueStore with an internal store name. Note that store name may not be queriable through Interactive Q..
Spring 4.X 에서 Conditional.... 시리즈의 어노테이션이 추가 되면서 다양한 환경에서 Bean을 등록 할 수 있게 되었다. 현재 작업중인 Event Driven MSA (이름 참 길다...) 의 한 프로젝트에서는 상용과, 개발서버의 Bean이 달라야 하는 니즈가 있다. @Configuration @EnableConfigurationProperties(SolProperties.class) public class SolAutoConfiguration { private SolProperties solProperties; @Autowired public SolAutoConfiguration(SolProperties solProperties) { this.solProperties = solPro..
https://spring.io/blog/2018/03/07/testing-auto-configurations-with-spring-boot-2-0 지지난주 spring.io 에 올라온 글이다. 스프링부트 2.0에 ApplicationContextRunner 가 추가 되었고 이에 대한 사용법을 설명하는 내용인데, 실제로 활용해보니 기존의 static class 로 Spring 설정을 slicing 하는 것보다 가독성도 좋고, 사용도 편하다. 1. SolMailAutoConfiguration 빈을 생성할때 JSR380에 의해 validate한지 확인하는 테스트new ApplicationContextRunner() .withConfiguration(of(SolMailAutoConfiguration.class..