본문 바로가기

Kafka

(6)
[Kafka] Listener 기본 설정 (6) 이번에 카프카를 구현하면서 오랜만에 막연함을 느꼈던 것 같다. 구현을 하고, 원리 같은 걸 공부해보기는 했는데 붕 뜬 지식을 잡으려 손을 뻗는 기분이었다.왜 그런 기분을 느낄까 생각해 보면 답은 하나밖에 나오지 않았다.잘 모르기 때문에.나름대로 정리도 해보고 구현도 해봤는데 왜 잘 모를까.여러 가지 블로그를 기반으로 공부하다 보니까 카프카에 대해서 중구난방으로 공부하게 된 것 같았다.  내가 헷갈렸던 내용은 아래와 같다.BatchListner와 RecordListenerBatchListener를 ‘한 번에 여러 레코드를 처리한다’고 정리된 글을 읽고 BatchListener는 병렬처리를 하는 리스너라고 생각을 했다.하지만 코드를 보다보면 Concurrent… 가 붙은 용어( ex. ConcurrentKa..
[Kafka] Spring Kafka commit (5) 리스너 타입레코드 리스너(MessageListener)단 1개의 레코드 처리스프링 카프카 컨슈머의 기본 리스너 타입배치 리스너(BatchMessageListener)한 번에 여러 개의 레코드 처리 Acknowledging 이 붙은 리스너Manual Commit 을 사용하는 경우 (AcksMode: MANUAL, MANUAL_IMMEDIATE)ConsumerAware 가 붙은 리스너KafkaConsumer 인스턴스에 직접 접근하여 컨트롤하고 싶을 때    RecordListener - Record 인스턴스 단위로 프로세싱Listener생성 메서드 파라미터DescMessageListeneronMessage(ConsumerRecord data)onMessage(V data)오토 커밋 또는 컨슈머 컨테이너의 A..
[Kafka] commit 이해하기 (4) Kafka는 다른 메시지큐와 다른 가장 대표적인 특징을 떠올리면 consumer 가 메시지를 가져가더라도 메시지큐에서 바로 사라지지 않는다는 점이다. 그 덕분에 하나의 로그 메시지를 여러 컨슈머가 다양한 용도로 사용할 수 있다. 이때 문득 고민이 들었다. 메시지큐에서 바로 사라지지 않는다면 메모리는 어떻게 관리되고 있을까, consumer는 자신이 읽은 파티션을 어떻게 구분할까.    Commit깃허브를 다루면서 가장 많이 듣게 되는 용어, commit을 kafka에서도 만나게 된다.깃허브에서 commit 은 add 이후로 깃에 저장하는 단계에서 사용된다.카프카에서 commit 은 메시지 소비 여부를 구분하는 데 사용된다. 컨슈머가 브로커에서 메시지를 poll() 하고 나면 컨슈머 그룹은 카프카에서 불러..
[Kafka] Partition & Replication (3) Kafka 에서 Producer 는 Topic 에 메시지를 보내고 하나의 Topic 은 한개 이상의 Partition 으로 나뉘게 된다.이는 Topic 을 생성하는 시점에 명시할 수 있다.   PartitionTopic 을 분할한 단위Partition 이 여러개일 경우 Producer 가 전송한 메시지 순서는 보장되지 않는다.하지만 Partition 간의 메시지 순서는 보장된다.kafka 메시지에 key를 할당하고, 이 key에 따라 파티션이 선택된다.kafka는 key가 설정되지 않은경우, 메시지는 reound robin 방식으로 파티션을 선택하여 메시지가 전달key가 있다면 key값을 hashing하고 해싱 결과를 이용하여 파티션 선택만약 특정 메시지의 키에 따라 들어온 순서가 중요한 서비스라면, 키..
[Kafka] kafka 내부 구조 (2) 분산 메시징 시스템인 Kafka 의 구조를 들여다보자.      Cluster클러스터는 브로커(Kafka 서버)의 집합체를 말한다. 클러스터를 구분하는 각각의 브로커는 카프카 서버로 불린다.Broker - 메시지 수신 및 저장이벤트 스트리밍 플랫폼밑에서 추가 설명 Topic - 데이터 분류 단위브로커에서 데이터를 관리할 때 기준이 되는 단위다.여러 파티션으로 나뉘어서 데이터를 병렬처리할 수 있다. 리더 파티션 Leader PartitionProducer, Consumer 와 직접 통신하는 파티션읽기, 쓰기 연산팔로워 파티션 Follower Partition데이터 보관리더 파티션에서 전달된 데이터를 복제하여 저장리더 파티션이 속한 브로커에서 장애 발생 시, 팔로워 파티션이 리더 파티션 지위를 가질 수 있다..
[Kafka] 탄생 배경 (1) 전통적인 Database 시스템 구조는 애플리케이션과 DB가 연결된 end-to-end 형태를 띄고 있다. 하지만 간단한 구조에 반해 각각 분리된 Data 파이프 라인이 필요하고 요구사항이 증가함에 따라 더욱 복잡해지는 문제가 생긴다.시스템 복잡도가 증가하면 아래와 같은 문제가 발생한다.중앙화된 데이터 전송 영역의 부재데이터 흐름을 파악하기 어려움복잡한 시스템 관리일부 문제 발생 시 연결된 모든 애플리케이션을 확인end-to-end 형태 시스템은 시스템을 복잡하게 만드는 것에서 나아가 여러 문제를 일으킨다.데이터 일관성을 유지하기가 어려워진다실시간 데이터 처리가 어렵다확장성에 제한이 생긴다.이런 이유들로 인해 링크드인은 DB와 어플리케이션 사이를 중개하는 메시지 브로커, Kafka 를 만들게 된 것이다...