제 블로그의 모든 글은 IMHO로 쓴 것입니다. 서로에 대한 존중을 담은 덧글을 남겨 소통을 하신다면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 존중이 담기지 않은 덧글은 언제든 삭제될 수 있습니다. 감사합니다:)
—
카프카란?
- 카프카가 가장 애용되는 방법은 스트리밍 데이터를 다루기 위한 미들웨어이다.
- 현재 가장 인기있는 message queue인데, 높은 확장성(scalability)와 가용성(availability)를 가지고 있다.
- 특징 중 하나는 영속성(persistency)이다. 즉 한번 입력된 데이터는 그 시점에 영속화되어있다.
카프카의 구조
producer0 consumer0
producer1 -> broker cluster -> consumer1
producer2 consumer2
- producer
- kafka에게 데이터를 주는 클라이언트
- consumer
- kafka에서 데이터를 가져오는 클라이언트
- broker cluster
- 임의 개수의 노드로 구성되어 있는데
topic
으로 불리는 각각의 데이터 관리 유닛을 갖고 있다고 생각하면 된다.
- 임의 개수의 노드로 구성되어 있는데
카프카는 무슨 특징 덕분에 인기가 있을까?
- 여기에서 중요한 포인트는 큰 규모의 클러스터를 독립적인 여러 서비스와 시스템에서 공통으로 사용하고 있다는 것이다.
- 데이터 허브라는 컨셉을 가지고 있는데, 빅데이터 시대에 처하면서 데이터를 이곳저곳 계속 주고 받는다. 그러다보니 한번 교통정리책이 필요해진 것이다.
- 그런 이유 때문에 linkedin에서 만들었고 그것을 오픈소스로 풀었는데 인기가 많아진 것이다.
flink에서 kafka를 사용하는 예제
kafka producer
FlinkKafkaProducer(String defaultTopic, KafkaSerializationSchema<IN> serializationSchema, Properties producerConfig, FlinkKafkaProducer.Semantic semantic)
- 매개변수
- defaultTopic: 메세지를 보낼 topic 이름
- serializationSchema: 사용자 객체를 키 / 값 메시지를 지원하는 kafka-consumable byte []로 전환하기위한 직렬화 가능한 직렬화 스키마
- producerConfig: KafkaProducer의 구성 속성으로 ‘bootstrap.servers.’ 유일한 필수 인수입니다.
- semantic : 만들어질 내용 의미를 정의합니다.
public FlinkKafkaProducer( String defaultTopic, KafkaSerializationSchema<IN> serializationSchema, Properties producerConfig, FlinkKafkaProducer.Semantic semantic) { this( defaultTopic, serializationSchema, producerConfig, semantic, DEFAULT_KAFKA_PRODUCERS_POOL_SIZE); }
kafka consumer
FlinkKafkaConsumer(List<String> topics, DeserializationSchema<T> deserializer, Properties props)
- 매개변수
- topics: 읽어올 topics들
- deserializer: kafka의 byte message를 object로 바꿀 deserializer ``` scala public FlinkKafkaConsumer(List
topics, DeserializationSchema deserializer, Properties props) { this(topics, new KafkaDeserializationSchemaWrapper<>(deserializer), props); }
```
참고: https://nathanh.tistory.com/137