Kafka 컨슈머 장애 사례: 메시지 처리 시간 초과로 인한 CommitFailedException장애 상황운영 중인 Kafka 컨슈머 애플리케이션에서 특정 시점에 다음과 같은 오류 로그가 발생했습니다:org.apache.kafka.clients.consumer.CommitFailedException: Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group. 이 오류는 컨슈머가 메시지를 처리하는 도중 Kafka의 컨슈머 그룹에서 리밸런싱(Rebalanc..
어제 운영 환경에서 40만 건의 데이터를 다른 영역에서 마이그레이션한다고 전달받았습니다. 이 데이터가 변경되면, 제가 담당하는 영역의 동일한 테이블을 동기화하기 위해 Kafka 메시지를 통해 테이블 변경 내역을 수신받아, MERGE INTO를 사용해 데이터를 최신화하는 작업을 수행하고 있었습니다. 그런데 발행하는 쪽에서 문제가 생겨 동일한 내용의 메세지인데 변경처리를 동시에 처리하고 발행해서 수정일시 필드값만 1초차이가 나게 바뀌어서 메세지를 받아 처리하는 consumer 쪽에서 메세지를 동시에 처리하게 되면서 DB에서 PK 중복 오류가 발생을 하였습니다.다행히 건수가 많지 않았고 수정일시 필드의 값만 다르기도 했고 해당 에러가 났다는것은 이미 해당 데이터를 생성하고 동시에 처리하는 과정이기 때문에 동시..
개요Apache Kafka를 스프링 부트 애플리케이션에서 사용할 때, 클라이언트 초기화나 Kafka 서버와의 통신 과정에서 많은 정보성 로그가 출력됩니다. 예를 들어, Kafka 버전 정보나 시작 시각 같은 로그가 대표적입니다. 이런 로그가 많아지면 실제로 중요한 로그를 찾기 어려워질 수 있습니다.이 글에서는 Kafka의 불필요한 로그를 숨기고 중요한 로그만 남기기 위한 방법을 알아보겠습니다. 이를 위해 로그 레벨의 우선순위를 이해하고, 설정을 통해 로그 출력을 효율적으로 관리하는 방법을 설명합니다.AppInfoParser가 많이 나와 해당 부분에 대한 처리를 진행하려고 설정 파일을 수정해보았습니다. AppInfoParser의 INFO 로그Kafka는 애플리케이션이 실행될 때 클라이언트 초기화 과정에서 ..
Consumer Offset 해당 Consumer가 읽은 파티션의 위치의 그 다음번째를 저장한다. 위의 예시로 Consumer Group A가 MyTopic 파티션에서 2번째에 있는 위치를 가져가서 사용을 했다면 그 다음 읽어갈 위치인 3번째의 위치를 저장합니다. 카프카의 내부 인터널 토픽에 저장을 한다(Topic __consumer_offsets) 컨슈머가 하나이고 해당 컨슈머가 모든 파티션의 데이터를 읽어간다하면 해당 컨슈머는 모든 파티션의 모든 레코드를 Consume한다. 동일한 컨슈머 그룹을 가지고 싶다면 group.id가 같기만 하면 된다. 위와 같은 경우 파티션4개, 컨슈머4개 이므로 각자 하나의 컨슈머에서 하나의 파티션을 consume할 수 있다. 멀티 컨슈머 그룹 다른 Consumer Gr..
Producer Producer : 메세지를 생산(Produce)해서 Kafka의 Topic으로 메세지를 보내는 애플리케이션 Consumer: Topic의 메세지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group: Topic의 메세지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group 내의 Consumer들을 협력하여 Topic의 메세지를 병렬 처리함 Producer와 Consumer의 분리 (Decoupling) Producer와 Consumer의 기본 동작 방식 Producer와 Consumer는 서로 알지 못하며, Producer와 Consumer는 각각 고유의 속도로 Commi..
아파치 카프카의 주요 구성 요소는 주키퍼라고 하는 상위에 있는것과 아래의 카프카 클러스터로 구성되어 있습니다. 카프카 클러스터 내에는 여러개의 브로커들로 구성되어 있습니다. 카프카 브로커는 토픽과 파티션을 유지 및 관리를 해주는 소프트웨어 카프라 브로커란? 카프카 서버라고 부르기도 함 토픽 내의 파티션들을 분산, 유지 및 관리 각각의 브로커들은 ID로 식별됨 (단, ID는 숫자) 토픽의 일부 파티션들을 포함 → 토픽 데이터의 일부분을 갖을 뿐 데이터 전체를 갖고 있지 않음 카프카 클러스터 : 여러개의 브로커들로 구성됨 클라이언트는 특정 브로커에 연결하면 전체 클러스터에 연결됨 최소 3대 이상의 브로커를 하나의 클러스로 구성해야함 → 이왕이면 안정성을 위해서 4대 이상을 권장함 파티션도 번호를 가지고 있고..
Apache Kafaka의 주요 요소 - Topic, Partition, Segment 토픽은 파일이나 디렉토리처럼 눈에 보이는게 아닌 논리적인 표현 Producer: 메세지를 생산(Produce)해서 Kafka의 Topic으로 메세지를 보내는 애플리케이션 Consumer: Topic의 메세지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group: Topic의 메세지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group 내의 Consumer들은 협력하여 Topic의 메세지를 분산 병렬 처리함 프로듀서와 컨슈머 동작방식 프로듀서와 컨슈머 애플리케이션은 서로 알지 못한다. 그저 각각의 고유의 ..