Book

[카프카, 데이터 플랫폼의 최강자] 4장. 카프카 프로듀서

Jordy-torvalds 2021. 9. 29. 23:34
반응형
  • 프로듀서란 메시지를 생산해서 카프카의 토픽으로 메시지 보내는 역할을 하는 어플리케이션, 서버 등을 말한다.
  • 프로듀서의 주요 기능은 각각의 메시지를 토픽의 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것.
  • 아래꺼 보완하기

  • 키 값을 정해 해당 키를 가진 메시지를 동일한 파티션에 전송할 수 있음.
  • 키가 없으면 라운드 로빈 방식으로 파티션에 균등하게 분배

4.1. 콘솔 프로듀서로 메시지 보내기

auto.create.topics.enable=true # 토픽이 없을 때 자동으로 토픽을 생성하는 설정

책에서는 실습을 위해 토픽을 생성하며 토픽 생성에 필요한 기본적인 정보는 다음과 같음. 토픽 이름, 파티션 수, 리플리케이션 팩터

# 토픽 생성
../kafka/bin/kafka-topics.sh --zookeeper <zookeepers> \\
	--replication-factor <replica-count>\\
	--partitions <partition-count> \\
	--topic <topic-name> --create

# 토픽 삭제
../kafka/bin/kafka-topics.sh --zookeeper <zookeepers> \\
	--topic <topic-name> --delete

# 카프카 프로듀서 쉘로 토픽 접근
../kafka/bin/kafka-console-producer.sh --broker-list <brokers> \\
	--topic <topic-name>
## > 프롬프트에 입력 

# 카프카 컨슈머 쉘로 토픽 접근
../kafka/bin/kafka-console-consumer.sh --broker-list <brokers> \\
	--topic <topic-name> --from-beginning

# 파티션 리더/팔로워 확인 방법
../kafka/bin/kafka-topics.sh  --zookeeper <zookeepers> --topic <topic-name> --describe

 

메시지 전송 방법

  • 송신 후 미확인 방법: 메시지를 보내고 성공적으로 도착해는지를 확인하지 않음. 손실 가능성이 높음
  • 동기 전송: 메시지 송신 후 성공/실패 여부를 확인함
  • 비동기 전송: 메시지 송신 후, 결과를 받으면 콜백을 실행 함.

프로듀서 주요 옵션

# 카프카 클러스터 브로커 서버 정보
bootstrap.servers

# acks는 메시지 송신 후 요청을 완료하기 전 ack(승인)의 수. 
# 적으면 성능이 좋지만 메시지가 소실될 수 있고
# 높으면 성능이 떨어지지만 신뢰성있게 메시지 전달 가능

# ack를 0으로 설정하는 경우 프로듀서는 서버로부터 어떠한 ack도 기다리지 않습니다.
# 이 경우 서버가 데이터를 받았는지 보장하지 않고, 클라이언트는 전송 실패에 대한 결과를
# 알지 못하기 때문에 재용청 설정도 적용되지 않습니다.
# 메시지가 손실될 수 있지만 ack에 대한 응답을 기다리지 않기 때문에
# 매우 빠르게 메시지를 보낼 수 있어 높은 처리량을 얻을 수 있습니다.
acks=0

# ack를 1로 설정하는 경우 리더는 데이터를 기록하지만, 모든 팔로워는 확인하지 않습니다.
# acks=0 만큼은 아니지만 데이터 손실이 발생할 수 있습니다.
acks=1

# ack를 all 또는 -1로 설정하는 경우 리더는 ISR의 팔로워로부터 데이터에 대해 ack를 기다립니다.
# 하나의 팔로워가 있는 한 데이터는 손실되지 않으며 데이터 무손실에 대해 강력하게 보장합니다.
# 하지만 min.insync.replicas를 1로 설정할 경우 acks=1 과 동일하게 리더의 메시지 수신만
# 보장하므로 acks=all을 설정할 때 min.insync.replicas의 확인이 필요합니다.
acks=all
acks=-1

# 프로듀서가 카프카 서버로 데이터를 보내기 위해 잠시 대기**(배치 전송이나 딜레이 등)**
# 할 수 있는 전체 메모리 바이트
buffer.memory=

# 프로듀서의 데이터 송신시 압축 타입
# none, gzip, snappy, lz4 등이 있음
compression.type=

# 일시적인 오류로 인해 전송에 실패한 데이터를 다시 보내는 횟수
retires=

# 특정 사이즈 만큼 데이터를 모아 보내는 배치 크기 바이트 설정
# 배치 전송을 위해 대기하다가 데이터를 소실할 수 있으므로 고가용성이 필요한
# 서비스면 안주는 것도 좋은 전략
batch.size=

# batch-size만큼 쌓이기를 무기한 대기 하는 것을 방지하는 효과가 있는 설정
# 정해진 시간 만큼 추가적인 메시지가 오는 것을 대기
lingers.ms=

# 프로듀서가 보낼 수 있는 최대 메시지 바이트 사이즈
max.request.size

# 그 외에 다른 프로듀서 옵션은 <https://kafka.apache.org/documentation/#producerconfigs> 참조

아파치 카프카 권장 옵션
- replication-factor 3(토픽 설정)
- acks=all(프로듀서 설정)
- min.insync.replicas=2(브로커 설정)

특정 토픽의 파티션의 복제 수를 3개로 설정하고, 매 메시지 송신마다 레플리카에 정상 복제되었는지 확인합니다. 그리고, 레플리카 수가 2개 이상 인지 확인하고 최소 레플리카 수 보다 적을 경우 에러로 처리합니다.

브로커가 3대이고 acks=all, replication-factor=3 일 때 min.insync.replicas가 2일 때 와 3일 때의 차이는?

min.insync.replica는 특정 파티션의 레플리카 최소 수를 설정하는 옵션이기 때문에 3으로 설정하면 replication-factor로 설정한 3개의 레플리카가 모두 활성화되어 있어야 정상적인 통신이 가능합니다. 만약 하나의 레플리카라도 문제가 생기면 오류 로그가 남으며 통신이 불가해집니다.

반응형