생각정리/Kafka (6) 썸네일형 리스트형 카프카 컨슈머 토픽 파티션에서 레코드 조회 pubilc void consumer() { Properties prop = new Properties(); prop.put("bootstrap.servers", "kafka1:9092, kafka2:9092, kafka3:9092"); prop.put("group.id", "consumerGroupId"); prop.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); prop.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = n.. 카프카 프로듀서 프로듀서의 기본 흐름 send : send 메서드를 이용해서 메시지를 전송받음 Serializer : 메시지를 byte 배열로 변환 Partitioner : 메시지를 어느 토픽의 파티션으로 보낼지 결정 버퍼 : 변환된 byte 메시지를 버퍼에 모음 Sender : 배치로 묶어서 카프카 브로커로 전송 별도 스레드로 동작한다. 배치를 버퍼에서 꺼내서 차례대로 브로커로 전송 (동시작업) 배치를 보내는 동안 send메서드에서 배치를 모음 (동시작업) 토픽에 메시지 전송 프로퍼티를 이용해서 프로듀서가 사용할 속성을 지정한다. 브로커 목록, 키와 벨류 정렬 방식, 에크, 배치 사이즈등의 설정을 지정 가능 프로퍼티를 이용해 카프카 프로듀서 객체를 생성한 후, send 메서드를 이용해서 메시지를 보낸다. send를 할.. 왜 Zookeeper 모드에서 KRaft 모드로 변경하는가? 카프카에서는 2.8 버전부터는 zookeeper와 kraft로 쿼럼을 구성할 수 있었으며, 3.3 버전부터 kraft를 중점으로 지원을 하게 되고 3.5 버전부터는 Zookeeper가 사용하지 않는 것을 권고했으며, 2024년 4월 이후에 나올 4.0 버전 이후부터는 아예 Zookeeper는 지원을 안 하게 된다고 나와있다. 그렇다면 왜 주키퍼의 사용을 멈추고 래프트 모드로 교체를 하게 되었을까? 주키퍼의 문제점 1. 두 가지의 프로세스 주키퍼 프로세스와 카프카 프로세스 두 가지의 프로세스로 운영을 하게 되면 두 가지에 시스템에 대해서 학습을 해야 되고 별도의 설정을 해주어야 하기 때문에 번거로움이 있다. 또한, 보안 부분에서도 프로세스 별로 설정을 해주어야 하기 때문에 문제가 생길 수도 있다. 예를 들.. 왜 주키퍼를 앙상블로 구축을 해야하는가? 주키퍼(Zookeeper) 구축 주키퍼란? 분산 애플리케이션을 위한 코디네이션 시스템 분산 코디네이션 서비스란? 분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해 주는 서비스 카프카 브로커에서 브로커와 토픽의 메타데이터를 저장하기 위해 사용하는 장치 장애 판정을 과반수 방식으로 하기 때문에 주키퍼 서버가 3개일 때도 2개가 오류 나면 정지하고 4개일 때도 2개가 오류 나면 정지를 하기 때문에 결국 짝수로 구성했을 때와 홀수로 구성했을 때가 차이가 없어 짝수로 구성을 해도 되지만 효율성을 생각하면 홀수로 구성을 하는편이 좋기 때문에 주키퍼 클러스터는 고가용성을 확보하기 위해 주키퍼 앙상블로 구축을 해야 한다고 권고하고 있다. 3대로 구성한 경우 1대가 서버에 .. 카프카의 기본 구조 카프카의 기본 구조 프로듀서 (Producer) 이벤트(메시지)를 카프카 클러스터에 넣는 역할 - 생성자 API 이벤트 기록(record) 또는 메시지(message)라고 한다. 키, 값, 타임스탬프 및 선택적 메타데이터 헤더가 있다. 주키퍼 클러스터 (Zookeeper Cluster) 카프카 클러스터를 관리하는 역할 - 커넥터 API 새로운 토픽 생성/삭제, 브로커 추가/제거 등을 관리 카프카 브로커에서 브로커와 토픽의 메타데이터를 저장하기 위해 사용하는 장치 카프카 클러스터 (Kafka Cluster) 이벤트(메시지)를 저장하는 저장소 - Streams API 카프카 클러스터는 브로커 서버로 구성되어 있다. 브로커 (Broker) 이벤트를 저장하고 있는 스토리지 계층으로 이벤트를 저장, 이중화 처리,.. 왜 카프카를 사용하는가? 왜 카프카인가? Kafka vs Redis vs RabbitMQ ... 다양한 메시지 전달 시스템들이 있는데 왜 Kafka가 많은 업체들에서 사용하고 있을까? Redis 메시지 브로커 특정 주제(topic)에 메시지를 Publish하면, 이 Topic에 Subscribe를 한 클라이언트는 메시지를 받을 수 있는 구조. 메시지를 던지는 시스템이기 때문에, 메시지를 따로 보관하지도 않는다. 클라이언트가 메시지를 받는 것을 보장하지 않아, Sub 대상이 하나도 없는 상황에서 메시지를 Pub해도 메시지가 소실된다. (전송이 보장되지 않는 기능에 사용해야 한다.) 캐시의 역할도 가능하다. 명시적으로 데이터 삭제가 가능하다. 메모리 기반이므로 서버가 다운되면 Redis내의 모든 데이터가 사라진다. RabbitMQ .. 이전 1 다음