Server (49) 썸네일형 리스트형 [Kafka] Consumer Lag이 쌓였을 때 먼저 봐야 할 것들 Kafka를 운영하다 보면 consumer lag이 쌓이는 상황을 자주 마주합니다. 이때 가장 위험한 대응은 lag 수치만 보고 바로 컨슈머를 늘리거나 파티션을 늘리는 것입니다. Consumer lag은 원인이 아니라 결과 지표입니다.lag이 쌓였다는 것은 컨슈머 그룹이 현재 토픽에 쌓이는 메시지를 처리 속도만큼 따라가지 못하고 있다는 뜻이며 원인은 다양합니다. 따라서 Kafka consumer lag을 해결할 때는 먼저 원인을 분리해야 합니다.유입량이 갑자기 늘었을 수 있습니다.컨슈머 처리 로직이 느려졌을 수 있습니다.DB나 외부 API가 병목일 수 있습니다.특정 key로 메시지가 몰려 핫파티션이 생겼을 수 있습니다.리밸런스가 반복되면서 컨슈머가 안정적으로 메시지를 읽지 못하고 있을 수도 있습니다.이 .. 2026.06.19 [Kafka] Producer 메시지 전송 보장 수준 (최대/최소/정확히 한 번) 메시지 전송 보장 수준Kafka Producer의 메시지 전송 보장 수준은 크게 "최대/최소/정확히 한 번" 세 가지로 나눠볼 수 있습니다.최대 한 번 전송 (at most once)acks=0Broker 응답을 기다리지 않음중복 전송 없음유실 가능 최대 한 번 전송은 메시지가 0번 또는 1번만 전달되는 방식입니다. 즉, 중복 전송은 발생하지 않지만 메시지 유실은 발생할 수 있습니다. Producer는 Broker의 저장 성공 응답을 기다리지 않고 메시지를 전송된 것으로 간주합니다. 따라서 네트워크 장애, Broker 장애, Leader 변경 등의 이유로 메시지가 Kafka에 기록되지 않았더라도 Producer는 이를 알기 어렵습니다. 즉, 최대 한 번 전송은 중복을 허용하지 않는 대신 유실을 감수하는.. 2026.06.17 [Kafka] Producer acks, Consumer AckMode 그리고 Listener Kafka Producer는 메시지가 기록될 Partition의 Leader Broker를 찾아서 해당 Leader에게 직접 메시지를 전송합니다. Follower Broker는 Producer로부터 메시지를 직접 받지 않습니다. Follower는 Leader Broker로부터 데이터를 복제합니다. 이 구조를 이해하면 acks, ISR(In-Sync Replica), min.insync.replicas, enable.idempotence, max.in.flight.requests.per.connection 같은 설정이 왜 필요한지 더 쉽게 이해할 수 있습니다. 이 설정들은 단순히 전송 속도만 정하는 옵션이 아니라, 장애 상황에서 메시지를 어디까지 안전하게 저장할 것인지, 중복 기록을 어떻게 막을 것인지, .. 2026.05.24 [Kafka] Producer 메시지 전송 방식 Kafka Producer는 메시지를 어디로 보낼까?Kafka에서 Producer가 메시지를 보낼 때, 메시지가 아무 브로커에 전송되는 것이 아닙니다. Producer는 레코드가 들어갈 Topic-Partition의 Leader Replica를 보유한 브로커에게 Producer 요청을 보냅니다. 이 브로커를 Leader Broker라고 부릅니다.조금 더 정확히는 Broker 자체가 Leader 라는 뜻은 아니며, Kafka에서 Leader와 Follower는 Broker의 고정 역할이 아니라, 특정 파티션 replica의 역할 입니다. Kafka 토픽은 여러 파티션으로 나뉘고, 각 파티션은 복제를 위해 여러 개의 replica를 가질 수 있습니다. 예를 들어, order-topic에 파티션이 3개 있고,.. 2026.05.03 [Kafka] Consumer 동작 방식과 리밸런싱 Consumer 동작 방식Kafka Consumer가 Topic을 subscribe 합니다.Kafka Consumer는 poll()을 반복 호출하면서 자신에게 할당된 partition의 메시지를 가져옵니다.※ 반복 호출은 고정된 시간 간격으로 실행되는 것이 아닌, 이전 poll()로 가져온 record들을 처리한 뒤 다시 poll()을 호출하는 방식partition에서 메시지를 가져온 뒤 commit을 통해 __conusmer_offset에 다음에 읽을 offset을 기록합니다. [auto.offset.reset]Consumer Group에 읽을 offset이 없거나 기존 offset이 유효하지 않을 때 어디서부터 읽기 시작할지를 정하는 설정입니다. 같은 Consumer Group 안에서 Consumer.. 2026.03.31 [Kafka] Producer 동작 방식과 파티셔닝 전략 Producer 동작 방식kafkaTemplate 객체의 send() 메서드를 통해, Broker로 record(message)를 전송할 수 있습니다.kafkaTemplate.send() 메서드에는 topic / key / value / partition 등 다양한 인자 값을 넘길 수 있으며,send() 인자로 넘어간 값을 토대로 ProducerRecord 객체를 생성한 뒤 전송됩니다.참고) org.springframework.kafka.core.KafkaTemplate 1. kafkaTemplate.send() 시 ProducerRecord 객체를 전송합니다.2. Serializer가 ProducerRecord 객체를 Byte[] 로 직렬화합니다.3. Partitioner가 전략에 따라 특정 Topic.. 2026.02.02 [Kafka] 핵심 개념 빠르게 알아보기 TopicTopic은 N개의 Partition으로 구성되어 있는 log 파일입니다.Topic은 시간의 흐름에 따라 Record(message)가 물리적인 파일에 순차적으로 write 됩니다.PartitionTopic을 N개로 쪼갠 로그 조각이 Partition 입니다.개별 Partition 내에서 순서가 보장되는 단위Partition은 Kafka의 병렬 성능과 가용성 기능의 핵심 요소입니다.Record(message)는 병렬 성능과 가용성을 고려해 개별 Partition에 분산 저장됩니다.Partition 과 Offset논리/개념 계층 물리/저장 계층(Disk File 관점)Topic > Partition > Segment(로그 파일 조각) > Record Batch, (index/timeindex 파일.. 2026.01.11 [MySQL] 클러스터드 인덱스, 보조 인덱스, 커버링 인덱스 MySQL에서 인덱스를 이해할 때 가장 먼저 구분해야 하는 것은 인덱스의 저장 구조와 쿼리 실행 방식입니다. 클러스터드 인덱스는 테이블의 데이터가 어떤 기준으로 저장되는지를 결정하는 구조입니다. 반면 커버링 인덱스는 특정 쿼리가 테이블 데이터까지 접근하지 않고 인덱스만으로 처리될 수 있는 실행 상태를 의미합니다. 둘은 비슷해 보이지만 완전히 다른 개념입니다.클러스터드 인덱스: 테이블 데이터가 저장되는 구조보조 인덱스: 클러스터드 인덱스에 접근하기 위한 별도 인덱스커버링 인덱스: 쿼리에 필요한 컬럼을 인덱스만으로 모두 해결하는 최적화 상태이번 글에서는 MySQL InnoDB 기준으로 이 세 가지 개념을 정리하고, SHOW INDEX, EXPLAIN, Extra 컬럼을 어떻게 해석해야 하는지까지 함께 살펴보.. 2025.11.30 이전 1 2 3 4 ··· 7 다음