Skip to content
kimkc edited this page Aug 24, 2021 · 1 revision

Kafka

  • Pub-Sub(Producer,Consumer) 모델

  • 카프카의 구성요소 및 특징
    • Producer(publisher): Kafka Topic에 데이터를 쓰는 측 (consumer와 사호 존재 여부를 모른다.)
    • Consumer(subscriber) : Kafka Topic에서 데이터를 읽고 처리하는 측
    • broker, zookeepr : Topic을 관리하는 카프카 서버. 동일한 노드내에서 여러개의 brkoker 서버를 띄울 수 있고, Zookeeper는 이러한 분산 메시지 큐의 정보를 관리하는 역할
    • topic, partiton :
      Kafka에 저장되는 메시지는 topic으로 분류되고, topic은 여러 개의 partition으로 나뉠 수 있다.
      partition안에는 메시지의 상대적 위치를 나타내는 offset이 있다.
      이 offset정보를 이용해 이전에 가져간 메시지의 위치정보를 알 수 있고, 동시에 들어오는 많은 데이터를 여러 개의 파티션에 나누어 저장하기 때문에 병렬로 빠르게 처리할 수 있다.
    • consumer group : 하나의 topic을 읽어가기 위한 consumer들의 그룹. partition:Consumer Group = 1 : n 룰을 지켜주는 것이 병렬처리와 특정 컨슈머에게 문제가 생겼을 때, 다른 커슈머가 대신 읽을 수 있게 리밸런싱 가능
    • replication : replication 수를 임의로 지정하여 복제된 topic을 만들 수 있다. 특정 broker에 문제가 생겼을 경우 해당 broker의 역할을 다른 broker에서 즉각적으로 대신 수행할 수 있게 하기 위한 용도, leader&follower
    • retention :
      Kafka의 데이터 보관 주기 설정.
      기본적으로 7일 설정.
      카프카의 특징으로 메모리가 아닌 디스크에 메시지를 저장하고 유지. consumer가 메시지를 읽어가면 바로 삭제하지 않고 일정기간 데이터를 유지한다. 이 설정을 할 수 있다.
      cf) 디스크에 데이터를 쓰기 때문에 느리다 => 기존의 디스크 사용법과 달리 특정 영역의 디스크에 순차적으로 쓰기 때문에 읽어가는 영역의 범위가 확 줄어 속도 조금 빨라짐
      또한 무조건 데이터를 디시크에 쓴다기 보다는 vm메모리의 일부를 페이지 캐싱으로 사용하기 때문에 속도가 빠르다.

Singleton, thread-safe인 Producer

Singleton

Singleton pattern: 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴.
쉽게 말해 객체를 한 번만 생성하여 하나(single)만을 이용하는 것을 말한다.

  • 장점
    • 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있음
    • 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
  • 단점
    • 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙" 을 위배
    • 멀티쓰레드환경에서 동기화처리를 안하면 인스턴스가 두개가 생성된다든지 하는 경우가 발생

사용 예) DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용. DBCP 참고
쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체등

thread-safe

멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.
보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.

Producer

Kafka의 Producer는 Thread-safe한 객체이다.
Producer 객체가 많을수록 Kafka Broker Server와의 Connection만 많이 생성되기 때문에 좋지 않은 영향(성능?)을 가진다.

그러므로 Producer는 thread-safe하기 때문에 Singleton으로 만들어
애플리케이션 내의 thread들이 하나의 Producer 객체를 공유하여
한 번의 new로 메모리 낭비를 줄이고, 하나의 객체만 사용하므로 (DBCP와 비슷하게?)Connection 성능을 높일 수 있다.

해야할 일

  • 데이터를 디스크에 저장하는데도 빠른 이유와 이에 대한 이유 중 vm메모리의 일부를 페이지 캐싱으로 사용하기에 속도가 빠르다는 게 어떤 의미인지 명확히 찾아보기
  • zookeeper에 대해 알아보기
  • 싱글톤, thread-safe 따로 정리하기
  • spring boot-kafka: offset, group_id 설정에 대한 공부

참고자료

Clone this wiki locally