Kafka Producer는 Broker에 메시지를 발행(Publish)하는 클라이언트이다.Producer의 메시지 발행 방식메시지 생성ProducerRecord로 메시지 구성(key, value, topic, optional partition) 지정파티셔너가 파티션 결정파티셔너는 클라이언트에 존재명시된 파티션이 있으면 그대로 사용없다면 key가 있을 경우 → key.hashCode() % partition 수key도 없으면 → round-robin 방식배치 처리 (Batch Accumulator)같은 파티션의 메시지는 batch 단위로 묶음설정에 따라 linger.ms, batch.size 조건 만족 시 전송목적: latency 줄이고 throughput 증가브로커 전송 (send)네트워크를 통해 파티..
Kafka Replication카프카에서 Replication이란 각 메시지들을 여러개로 복제해서 카프카 클러스터 내 브로커들에 분산 시키는 동작을 의미한다.이러한 Replication 덕분에 하나의 브로커가 종료되더라도 카프카는 안정성을 유지할 수 있다. replication factor 옵션을 통해 복제할 브로커의 수를 지정할 수 있다.factor 수가 커지면 안정성은 높아지지만 그만큼 브로커 리소스를 많이 사용하게된다.일반적으로 테스트나 개발환경은 1, 운영환경에서 로그와 같이 유실이 허용되는 메시지는 2, 유실이 허용되지 않는 메시지는 3으로 설정하는 것이 권장된다.대규모 서비스에서도 3으로 충분히 안정성을 확보하여 가용된다고 한다. Replication이 필요한 이유카프카(Kafka)는 수많은 ..

카프카(Kafka)란?Kafka는 대규모 실시간 데이터 스트리밍 처리를 위해 설계된 분산 이벤트 스트리밍 플랫폼으로,메시지를 발행하는 Producer와 메시지를 소비하는 Consumer가 완전히 분리된 Pub-Sub 패턴 기반으로 동작한다.이들은 모두 메시지를 중개하는 Broker에만 연결되는 중앙 집중형 구조를 갖고 있으며,이를 통해 시스템 간의 느슨한 결합과 높은 유연성을 확보할 수 있다.구조만 보면 모든 부하가 Broker에 집중될 것처럼 보이지만,Kafka는 클러스터와 파티션이라는 개념을 통해 트래픽과 데이터를 효과적으로 분산시키고,메시지 처리의 복잡한 로직은 Producer와 Consumer 클라이언트가 자체적으로 수행함으로써,중앙 집중형 구조임에도 불구하고 고가용성과 확장성을 모두 갖춘 안정적..

kafka의 개념에 대한 내용은 아래 글을 통해 어느정도 알아보았다.[Kafka] 카프카 아키텍쳐이번 포스팅에서는 kafka-UI 툴을 통한 kafka 관리를 직접 실습하며 추가 개념 학습을 진행하겠다. kafka cluster 구성로컬 환경macOS(intel 칩)[docker-compose.yml]version: '3.8'networks: kafka_network:services: zookeeper: image: confluentinc/cp-zookeeper:7.3.10 container_name: zookeeper networks: - kafka_network ports: - "2181:2181" environment: ZOOKEEPER_CL..
https://velog.io/@enjoy89/Redis-%EC%A2%8B%EC%95%84%EC%9A%94-%EA%B8%B0%EB%8A%A5-%EC%BA%90%EC%8B%B1-%EC%A0%84%EB%9E%B5-%EA%B3%A0%EB%AF%BC-%EA%B3%BC%EC%A0%95 좋아요와 좋아요 취소는 서비스에 상당히 빈번히 일어날 수 있는 액션이다.또한 게시글을 조회할 때, 일반적으로 좋아요 수를 함께 보여주는 경우가 많다.즉, RDB에 빈번한 접근이 발생하고 count 쿼리까지 수행해야하므로 적지 않은 부하를 유발할 수 있다.이를 RDB 뿐만 아니라 Redis를 캐시 DB로 활용한다면 RDB의 부하를 줄일 수 있다. 이때, 어떤 방식의 캐싱전략을 사용할지와 저장되는 데이터 형식에 따라 캐싱 히트율과 메모..
Spring 애플리케이션과 Redis 간의 데이터 통신은 직렬화와 역직렬화를 필요로 한다.Redis는 문자열, 리스트, 해시, 집합 등 다양한 자료구조를 지원하지만,실제로는 모든 데이터를 byte[] 형태로 저장하고 처리한다.따라서 Redis와 Spring 간의 데이터 전달은 기본적으로 byte[] 형식으로 이루어지며,Spring 애플리케이션에서 이를 문자열, List, Set, Hash 등으로 활용하기 위해서는적절한 직렬화/역직렬화 설정이 반드시 필요하다. Spring에서는 StringRedisTemplate을 통해 Redis에 저장될 데이터를 처리하며,직렬화와 역직렬화를 내부적으로 자동 처리해준다.StringRedisTemplate을 이용하면 String, List, Set, Hash와 같은 자료구조..
스프링 프로젝트에 Redis 연동을 위한 어떤 설정을 해야하고 각 역할이 무엇인지 알아보겠다. [build.gradle.kts]implementation("org.springframework.boot:spring-boot-starter-data-redis:3.2.3") RedisConnectionFactoryRedisConnectionFactory는 Redis 서버와의 연결을 생성하고 관리하는 역할을 한다.단일 인스턴스, master/slave, Cluster 모드에서 커넥션 생성과 관리의 추상화 타입이다. [RedisConnectionFactory의 구현체] LettuceConnectionFactoryJedisConnectionFactory클라이언트 방식비동기-NonBlocking동기-Blocking스..