[Kafka CLI] 2. Kafka Console Producer CLI

메시지를 생산(produce)해서 카프카의 토픽으로 메시지를 보내는 역할을 하는 애플리케이션, 서버 등을 모두 프로듀서라고 부른다.

클러스터 위치토픽명보안설정파일
자신의 카프카 서버 IP사용하고자 하는 데이터와 연관된 이름보안이 필요한 설정 파일명 또는 위치

토픽 생성

# 보안 토픽 연결 및 생성
kafka-topics.sh --command-config [보안설정파일] --bootstrap-server [클러스터 위치] --topic [토픽명] --create --partitions 1

# 토픽 생성
kafka-topics.sh --bootstrap-server localhost:9092 --topic [토픽명] --create --partitions 1

Local이 아닌 보안 연결이 필요할 때

  • —producer.config, —command-config
    • 클러스터에 대한 보안 연결을 하게 해준다.
  • —bootstrap-server
    • 클러스터의 위치를 지정한다.
  • —topic
    • 연결할 토픽을 지정

Producer 실행하기

# 보안 방식
kafka-console-producer.sh --producer.config [보안설정파일] --bootstrap-server [클러스터위치] --topic [토픽명] --producer-property acks=all

# 프로듀싱 준비
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic [토픽명]
> Hello Kafka
> My name Is Kafka
> I Love Kafka
  • 카프카로 메세지를 전달하고 있다.
  • key를 지정해주지 않아서 null로 표시되고 value에 값이 담겨진다

모든 메세지 확인 처리 – All (acknowledgments : acks)

# 모든 메세지 확인 - acks(all)
kafka-console-producer.sh --bootstrap-server [클러스터 위치]--topic first_topic --producer-property acks=all

# 커맨드 라인에 아무 메세지나 입력
> some message that is acked
> just for fun
> fun learning!

존재하지 않는 토픽에 대한 프로듀싱

  • 자동 토픽 생성을 비활성화 한경우
    • 자동 존재하지 않는 토픽에 대해 실행하면 메세지를 날릴 수 있지만 존재하지 않는 토픽이기 때문에 타임아웃등 과 같은 메세지 오류가 나온다.
    • 프로듀싱 하도록 허용되지 않았기 때문이기도 하다 .
  • 자동 토픽 생성을 비활성화를 해야한다. 그 이유로 카프카에서는 토픽을 미리 생성하도록 적극 권장하기 때문이다.
# 존재하지 않는 토픽 프로듀싱
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic new_topic
> hello world

# 자동생성된 토픽에 대해 리더가 존재하지 않아 "LEADER_NOT_AVAILABLE" 라는 에러가 나온다.
# 그리고 토픽이 자동 생성되고 토픽에 리더가 주어진다.

# 확인 후 결과를 보면 new_topic이 생성되어 있음
kafka-topics.sh --bootstrap-server localhost:9092 --list

# 토픽 상세 정보
kafka-topics.sh --bootstrap-server localhost:9092 --topic new_topic --describe

기본 파티션 설정

# edit config/server.properties or config/kraft/server.properties
# num.partitions=3

# 해당을 통해 설정한다.
# 해당 설정 후 기본 메세지를 전송하면 3개의 파티션이 기본값으로 할당된다.
num.partitions=3

토픽을 Key:Value 형태로 만들기

# key value 넣기
kafka-console-producer.sh --bootstrap-server **[클러스터위치]** --topic **[토픽명]** **--property parse.key=true --property key.separator=:
>example key:example value
>name:Stephane**

# Key 옵션 활성화 - 키가 이 콘솔 프로듀서의 일부로서 전송되는걸 가리킨다.
**--property parse.key=true**

# :은 메세지를 프로듀싱할 때 왼쪽은 키이고 오른쪽은 값이라는걸 말한다.
**--property key.separator=:

# key.separator 명령어를 사용하고 key:value 형태로 안만들면
KafkaException: No key separator found on line number 라는 Exception 에러가 나온다.
즉,  세퍼레이터를 찾지 못했다는 에러**
LIST