메시지를 생산(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
기본 파티션 설정
- server.properties 설정에 내용
# 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 에러가 나온다.
즉, 키 세퍼레이터를 찾지 못했다는 에러**