-
kafka producerKafka 2023. 2. 23. 05:45728x90반응형
개요
카프카를 활용하기 위한 cli 들이 존재합니다.
예를 들어, kafka-topics, kafka-console-consumer, kafka-console-producer 등이 쉘스크립트 형태로 존재하는데요.
해당 스크립트들은 카프카 콘솔 명령어라고도 불리며
1. 토픽을 관리하고,
2. 메시지의 생성과 소비를 담당하는 등
여러 명령어들이 존재합니다.
<kafka 가 설치된 상태에서 bin 폴더 아래에 해당 script 들이 존재함.> kafka-acls kafka-broker-api-versions kafka-cluster kafka-configs kafka-console-consumer kafka-console-producer kafka-consumer-groups kafka-consumer-perf-test kafka-delegation-tokens kafka-delete-records kafka-dump-log kafka-features kafka-leader-election kafka-log-dirs kafka-metadata-shell kafka-mirror-maker kafka-preferred-replica-election kafka-producer-perf-test kafka-reassign-partitions kafka-replica-verification kafka-run-class kafka-server-start kafka-server-stop kafka-storage kafka-streams-application-reset kafka-topics kafka-verifiable-consumer kafka-verifiable-producer
그리고 이러한 콘솔들을 카프카와 연결된 여러 어플리케이션에서 해당 콘솔 명령어를 활용할 수 있도록 라이브라리가 제공되는데, 오늘은 kafka client library 에 대해서 알아보고자 합니다.
1. flink, spark 와 같이 메시지를 생산/소비하는 앱,
2. kafdrop 처럼 관리하는 앱에서
해당 라이브러리가 사용됩니다.producer 와 관련된 속성
producer 는 메시지의 생산자입니다.
생산자는 대표적인 카프카의 클라이언트입니다.bootstrap.servers
프로듀서는 메시지의 생산자입니다.
프로듀서에서 생성된 메시지는 카프카에게 전송됩니다.
메시지는 네트워크 통신을 통하여 브로커에게 전달되며, 이때 생산자와 브로커가 연결되어 있어야합니다.
bootstrap.servers 는 브로커의 네트워크 주소인데요.
host:port 형태로 프로듀서의 속성값으로 설정된며, 프로듀서와 브로커는 연결됩니다.
각각의 브로커들은 리더 - 팔로워의 관계가 아니기 때문에 모든 브로커의 주소를 bootstrap.servers 의 속성값으로 활용하면 하나의 브로커에 이상이 생겼을 때, 메시지는 다른 브로커로 메시지의 손실없이 저장될 수 있습니다.acks
acks 는 생산된 메시지를 얼마나 복제할지를 결정합니다.
acks 는 일종의 트랜잭션 처리에 가깝습니다. 복제 횟수만큼 트랜잭션을 보장합니다.
복제의 횟수에 대한 설정값은 여러가지가 있습니다.
1. 우선적으로 토픽을 생성할 때 replication factor 를 1 이상으로 설정해 복제본이 있는 토픽이 필요하고,
2. in-sync replica 설정을 통해서도 리더와 팔로워 토픽 사이의 복제 관계를 강제할 수 있습니다.
또한 acks 를 2이상으로 설정해 복제 상태를 만들 수 있는데요. 이 설정은 메시지의 생산 시점에 메시지의 복제를 유도합니다.
acks 가 1인 경우, 리더에만 메시지가 저장된다면 메시지 생성은 정상 종료됩니다.
acks 가 2인 경우, 리더와 팔로워 1에 메시지가 저장되어야 메시지 생성이 저장 종료됩니다. 만약 팔로워에 메시지를 저장하는 과정에서 문제가 발생한다면 해당 요청은 모드 fail 처리되며 생산자의 입장에서 재시도를 할 수 있습니다.key.serializer
생산된 카프카 메시지는 key 와 value 를 가집니다.
value 는 실제 메시지의 내용에 해당하는 값이며, key 는 해당 메시지의 식별값입니다.
key 의 용도는 메시지가 저장된 파티션의 위치를 지정하는데에 사용됩니다.
예를 들어, key 가 1인 데이터는 파티션 1에만 저장되고, key가 2인 경우에는 파티션 2에만 저장되는 방식으로 key는 활용됩니다.
key 가 null 일수도 있습니다.
이 경우에는 Round-Robin 방식으로 파티션에 저장됩니다.
key.serializer 는 key 에 해당하는 값을 어떻게 직렬화/역직렬화 할지에 대한 방식을 설정합니다.
대개
org.apache.kafka.common.serialization.ByteArraySerializer
(https://kafka.apache.org/20/javadoc/org/apache/kafka/common/serialization/ByteArraySerializer.html)
org.apache.kafka.common.serialization.StringSerializer
(https://kafka.apache.org/0102/javadoc/org/apache/kafka/common/serialization/StringSerializer.html)
등을 사용합니다.
key 는 단순한 값으로 직렬화/역직렬화 가 까다롭지 않습니다.
value.serializer
카프카 메시지는 key 와 value 로 구성되며, 실질적인 메시지의 데이터는 value 에 해당합니다.
value 에 해당하는 데이터는 직렬화/역직렬화 가 까다로울 수 있습니다.
json, avro, protocol buffer 등의 여러 데이터 형태가 존재하기 때문입니다.
그리고 스키마의 변경에 대하여 스키마 레지스트리를 적용해야할 경우도 생깁니다.
json 과 같은 텍스트 기반 데이터는 key.serializer 와 같이 ByteArraySerializer, StringSerializer 와 같은 직렬화 방식을 사용해도 무방하지만,
avro, protocol buffer 와 같은 이진 데이터는 특정 직렬화 방식을 명시해주어야합니다.
io.confluent.kafka.serializers.KafkaAvroSerializer
io.confluent.kafka.serializers.protobuf.KafkaProtobufSerializer
retries
프로듀서가 카프카 메시지를 브로커에 전송 실패하였을 경우, 재시도하는 횟수를 의미합니다.
반응형'Kafka' 카테고리의 다른 글
Kafka Replication (메시지 복제) 이해하기 (0) 2023.09.21 kafka __consumer_offsets topic 이해하기 (0) 2023.09.18 Kafka Consumer 개념 (0) 2023.09.13 Kafka Producer Process (카프카 프로듀서 과정) (0) 2023.09.09 kafka consumer (0) 2023.03.02