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 |