[KAFKA] kafka-console-producer.sh

.·2024년 6월 18일

KAFKA

목록 보기
8/21

bin 디렉토리 하위 kafka-console-producer.sh 라는 이름의 쉘 스크립트가 있다.
kafka-console-producer.sh는 토픽에 데이터를 넣을 때 사용하는 쉘 스크립트 커맨드 라인 툴이다.
주로 프로듀서 애플리케이션을 사용하지 않고도 생성한 토픽에 테스트 용도로 레코드를 넣을 때 사용한다.

1. 토픽에 메시지 value 넣기

bin/kafka-console-producer.sh \
--bootstrap-server {브로커} \
--topic {토픽명}
bin/kafka-console-producer.sh \
--bootstrap-server my-kafka:9092 \
--topic test

카프카 클러스터 정보토픽 이름을 지정하면 한줄 한줄씩의 데이터를 토픽의 레코드로 저장할 수 있다.
이렇게 아무 설정 없이 보낸 레코드를 message value라고 한다.

2. 토픽에 메시지 key-value 넣기

bin/kafka-console-producer.sh \
--bootstrap-server {브로커} \
--topic {토픽명} \
--property parse.key=true \
--property key.separator={구분자}
bin/kafka-console-producer.sh \
--bootstrap-server my-kafka:9092 \
--topic test \
--property parse.key=true \
--property key.separator=:

message key-value 쌍의 레코드를 보낼 수도 있는데, 이 때 property 옵션을 사용해 추가 옵션을 설정해줘야 한다.

첫번째, parse.key=true 설정이 필요하다.
특정 구분자를 통해 구분자 앞으로는 key, 구분자 뒤로는 value로 파싱하겠다는 의미이다.

두번째, key.separator={구분자} 설정이 필요하다.
데이터를 key와 value로 구분할 때의 기준이 되는 구분자를 설정하는 것이다.

key.separator의 디폴트 설정은 Tab Delimiter(\t)이다.
그러므로 key.separator를 선언하지 않고 레코드를 보낼 경우 key 작성 -> tab -> value 작성의 순서를 따르면 된다.

이 두 옵션을 주지 않으면 레코드에 대해 메시지 key가 null로 보내진다.

메시지 key, value를 함께 전송한 레코드는 토픽의 파티션에 저장된다.
메시지 key가 존재하는 경우에는 key의 해시값을 작성하여 존재하는 파티션 중 하나에 할당되는데, 이로 인해 메시지 key가 동일한 경우 동일한 파티션으로 전송된다.
주의할 점은 동일한 key는 같은 파티션에 저장된다는 의미일 뿐, 각각의 key값이 각각의 파티션을 갖는다는 것은 아니다.
서로 다른 key도 같은 파티션에 저장될 수 있다는 것이다.

같은 메시지 key끼리 같은 파티션에 저장했을 때의 장점은 동일한 메시지 key를 가진 레코드들에 대해 순서를 지킬 수 있다는 것이다.
컨슈머가 데이터를 가져갈 때 같은 메시지 키에 대해서 그 순서를 지켜서 가져간다.
즉, 특정 데이터에 대해 순서를 지켜 데이터를 처리하고 싶을 때는 메시지 키를 지정해서 데이터를 보내면 된다.

메시지 key를 지정하지 않으면 메시지 key가 null로 설정된다.
이 경우 프로듀서가 파티션으로 전송할 때 레코드 배치 단위(레코드 전송 묶음)로 라운드 로빈 방식으로 전송한다.

0개의 댓글