[Kafka/Docker] Kafka 컨테이너에서 특정 Key의 메시지 500개 추출 및 저장하는 방법

2025. 8. 3. 04:44·개발 (Development)/Kafka

Kafka를 사용할 때 특정 key를 가진 메시지만 추출해 확인하거나 저장해야 하는 상황이 종종 발생합니다. 특히 Docker 컨테이너 환경에서 Kafka가 실행 중일 경우, 터미널 명령어만으로 이 작업을 효율적으로 처리할 수 있습니다. 이 글에서는 Kafka 컨테이너에 접속해 특정 key를 가진 메시지를 최대 500개까지 추출하고 파일로 저장하는 과정을 정리합니다.

1. Kafka 컨테이너 접속

Kafka가 Docker 컨테이너로 실행 중이라면 다음 명령어로 컨테이너에 접속합니다.

docker exec -it kafka-container-name bash
  • kafka-container-name은 실제 사용 중인 Kafka 컨테이너 이름으로 바꿔야 합니다.

2. kafka-console-consumer로 메시지 추출

Kafka의 내장 커맨드라인 도구인 kafka-console-consumer.sh를 활용해 메시지를 조회합니다. 이때 메시지의 key와 value를 함께 출력하고, 특정 key만 필터링할 수 있도록 설정합니다.

kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic example-topic \
  --from-beginning \
  --property print.key=true \
  --property key.separator="|" \
  --timeout-ms 60000
  • --from-beginning: 토픽의 처음부터 메시지를 조회합니다.
  • --property print.key=true: 메시지의 key 값을 출력합니다.
  • --property key.separator="|": key와 value 사이를 |로 구분합니다.
  • --timeout-ms: 메시지를 기다리는 시간 (밀리초)

3. 특정 key만 필터링

출력된 메시지 중 key가 sample-key인 경우만 추출하려면 awk를 사용합니다.

... | awk -F'\\|' '$1=="sample-key"'
  • -F'\\|': | 기호를 기준으로 key와 value를 나눕니다.
  • $1=="sample-key": key가 sample-key인 메시지만 필터링합니다.

4. 최대 500개로 개수 제한

head 명령어를 추가해 최대 500개의 결과만 추출하도록 제한합니다.

... | head -n 500

따라서 전체 명령어는 아래와 같이 작성할 수 있습니다.

kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic example-topic \
  --from-beginning \
  --property print.key=true \
  --property key.separator="|" \
  --timeout-ms 60000 \
  | awk -F'\\|' '$1=="sample-key"' \
  | head -n 500

5. 결과를 파일로 저장

컨테이너 내부에서는 /tmp 디렉토리가 일반적으로 쓰기 권한을 가지고 있으므로, 파일을 여기에 저장하는 것이 가장 안전합니다.

... > /tmp/sample-key-messages.txt

전체 명령어 예시는 다음과 같습니다.

kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic example-topic \
  --from-beginning \
  --property print.key=true \
  --property key.separator="|" \
  --timeout-ms 60000 \
  | awk -F'\\|' '$1=="sample-key"' \
  | head -n 500 > /tmp/sample-key-messages.txt

6. 호스트로 파일 복사 (선택 사항)

만약 컨테이너에서 추출한 파일을 로컬 환경(호스트)로 가져오고 싶다면 docker cp 명령어를 사용합니다.

docker cp kafka-container-name:/tmp/sample-key-messages.txt .

현재 작업 디렉토리로 파일이 복사됩니다.

마무리

이처럼 Kafka 컨테이너 환경에서도 CLI 도구만으로 특정 key를 가진 메시지를 손쉽게 추출하고 저장할 수 있습니다. 정리하면 다음과 같습니다.

작업 항목 방법
컨테이너 접속 docker exec -it kafka-container-name bash
key 포함 메시지 조회 --property print.key=true
특정 key 필터링 awk -F'\\|' '$1=="sample-key"'
개수 제한 head -n 500
파일 저장 /tmp 등 쓰기 가능한 디렉토리에 저장
파일 복사 docker cp 명령어 사용

Kafka 메시지 확인 및 추출 작업을 반복적으로 수행해야 하는 경우, 이 과정을 스크립트화하면 더욱 편리하게 활용할 수 있습니다.

반응형

'개발 (Development) > Kafka' 카테고리의 다른 글

[Kafka] Producing messages inside a docker container(bitnami/kafka)  (1) 2024.12.15
[Kafka] Linux 운영체제에서 Kafka 특정 Topic 메시지 확인  (0) 2024.05.07
[Kafka] Linux 운영체제에서 Kafka Topic 리스트 확인  (0) 2024.05.07
[Kafka] 오류: 기본 클래스 {경로명 일부}\kafka_2.13-2.8.0\libs\activation-1.1.1.jar;C:\{경로명 일부}을(를) 찾거나 로드할 수 없습니다.  (0) 2023.01.27
'개발 (Development)/Kafka' 카테고리의 다른 글
  • [Kafka] Producing messages inside a docker container(bitnami/kafka)
  • [Kafka] Linux 운영체제에서 Kafka 특정 Topic 메시지 확인
  • [Kafka] Linux 운영체제에서 Kafka Topic 리스트 확인
  • [Kafka] 오류: 기본 클래스 {경로명 일부}\kafka_2.13-2.8.0\libs\activation-1.1.1.jar;C:\{경로명 일부}을(를) 찾거나 로드할 수 없습니다.
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 개발 (Development) (151)
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (6)
        • PostgreSQL (37)
        • Python (26)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 2급 2차
    deepseek
    Linux
    오답노트
    PostgreSQL
    Linux master
    Vue.js
    timescaledb
    백준알고리즘
    springboot
    MyBatis
    리눅스 마스터 2급
    ADsP
    java
    Kafka
    javascript
    백준온라인저지
    Kubernetes
    AWS
    docker
    JPA
    데이터분석
    자바
    백준
    pandas
    DevOps
    JSON
    python
    백준자바
    typescript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Kafka/Docker] Kafka 컨테이너에서 특정 Key의 메시지 500개 추출 및 저장하는 방법
상단으로

티스토리툴바