Closed kmg28801 closed 1 year ago
https://github.com/seojeonghyeon/bankservice-userservice (com.zayden.bankserviceuserservice.kafka 내 producer) https://docs.spring.io/spring-kafka/reference/html/#kafka-template (Spring Boot 2.9 -> 3.0 주요 변경사항 및 사용방법)
mac
window
chapter 4. 카프카 프로듀서
프로듀서 : 메세지를 생산해서 카프카의 토픽으로 메세지를 보내는 역할을 하는 애플리케이션, 서버 등
주요 역할
메시지를 토픽 파티션에 매핑
파티션의 리더에 요청을 보냄
키값을 정해 해당 키를 가진 모든 메시지를 동일한 파티션으로 전송
키값 미지정 시, 라운드 로빈 방식으로 파티션에 균등 배분
4.1 콘솔 프로듀서로 메시지를 보내는 방법
PartitionCount(파티션 개수) : 1개, ReplicationFactor(복제수) : 3개, Topic(토픽명) : peter-topic , Partition(파티션):0번 파티션, Leader : 3번, Replica(복제 중인 broker) : 3,1,2, isr(ISR 위치) : 3,1,2
4.2 자바와 파이썬을 이용한 프로듀서
카프카는 스칼라 기반, 메인 클라이언트 라이버러리는 자바로 만들어진 어플리케이션. 가장 많은 기능을 제공하는 자바 및 파이썬으로 실습 진행. send()로 보내는 방식은 3가지(메세지를 보내고 미확인, 동기 전송, 비동기 전송)
jdk 설치 및 kafka-clients-2.5.0.jar, slf4j-api-2.0.7.jar 만 로드하여 cmd로 자바 코드 실행함.
4.2.1 메시지를 보내고 확인하지 않기
카프카가 살아있는 상태에서 프로듀서에서 에러가 났다면 재전송하기 때문에 대부분 성공적으로 전송되지만 일부 메시지는 손실될 수 있다. 메시지 손실 각능성이 있기 때문에 일반적인 서비스 환경에서는 사용하지 않는다.
4.2.2 동기 전송
4.2.3 비동기 전송
파이썬
kafka-python 라이브러리가 이용자 수가 많고, confluent-kafka-python이 성능이 좋음. confluent-kafka-python 사용을 위해서는 librdkafka(아파티 카프카 프로토콜의 C 라이브러리) 설치 필요 책은 kafka-python 사용
4.3 프로듀서 활용 예제
loop 문을 사용해서 여러 번 전송 가능.
key 옵션으로 지정한 파티션에만 메시지 보낼 수 있음. 해당 옵션이 없을 경우 라운드 로빈 방식으로 균등 배분
0번 파티션만 가져오기
topic을 생성하지 않고 메시지 전송 시, 카프카 옵션에 따라 토픽이 자동 생성될 수 있다. 이럴 경우 파티션은 1인데, 토픽 삭제 후 재생성하거나, alter 명령어를 이용해 수정한다. *참고 2
4.4 프로듀서의 주요 옵션
4.5 다양한 메시지 전송 방법
4.5.1 메시지 손실 가능성이 높지만 빠른 전송이 필요한 경우
4.5.2 메시지 손실 가능성이 적고 적당한 속도의 전송이 필요한 경우
팔로워에 복제되지 않은 상태에서 팔로워 중에 하나가 리더가 되면 기존 리더에 저장된 메시지가 유실됨
4.5.3 전송 속도는 느리지만 메시지 손실이 없어야 하는 경우
ack = all 또는 -1
min.insync.replicas
설정도 같이함.리플리카 개수 3,
ack = all
,min,insync.replicas
= 2 리더에 저장하고 팔로워 중 한 개에 저장하면 최소 개수를 충족하기 때문에 성공 응답리플리카 개수 3,
ack = all
,min,insync.replicas
= 1 리더에 저장되면 성공 응답ack = 1
과 동일 (리더 장애시 메시지 유실 가능)리플리카 개수 3,
ack = all
,min,insync.replicas
= 3 리더와 팔로워 2개에 저장되면 성공 응답 팔로워 중 한 개라도 장애가 나면 리플리카 부족으로 저장에 실패함 다운된 서버 수는 한 개지만 전체 장애가 될 수 있음.min,insync.replicas
옵션은 리플리카 개수와 동일하게 지정하면 안됨 리플리카 개수 3,ack = all
,min,insync.replicas
= 2 권장함.참고
카프카 토픽 생성 에러(ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0)
해결 : zookeeper 리스트를 server.properties와 동일하게 맞춰줌, 지노드명까지
출처 : https://twofootdog.tistory.com/94
alter 이용해서 수정하기
삭제 후 재생성하기 http://ngmsoftware.com/bbs/board.php?bo_table=study&wr_id=674&sfl=mb_id%2C1&stx=admin&sst=wr_nogood&sod=desc&sop=and&page=22