본문

Kafka - Producer

반응형

Kafka Cluster 구성


1. Producer

1.1 Producer 

레코드를 브로커로 전송하는 애플리케이션

 

a) 카프카로 데이터(key, value) 전송

b) ProducerRecord 객체를 생성

c) Java Kafka-client 제공

d) Messaging 종류

   - Web, Application 클릭로그

   - 공유 자전거/자동차의 위치(GPS) 정보

   - 스마트팩토리 공장의 머신 센서 정보

   - 상호 통신하기 위한 application

   - etc ..

 

1.2 Producer options

a) 필수옵션

- bootstrap.servers: 카프카 클러스터에 연결하기 위한 브로커 목록

- key.serializer: 메시지 키 직렬화에 사용되는 클래스

- value.serializer: 메시지 값을 직렬화 하는데 사용되는 클래스

 

b) 선택옵션 - default값 존재

- acks: 레코드 전송 신뢰도 조절 (replica)

- comression.type: snappy, gzip, lz4 중 하나로 압축하여 전송

- retries: 클러스터 장애에 대응하여 메시지 전송을 재시도하는 횟수

- buffer.memory: 브로커에 전송될 메시지의 버퍼로 사용 될 메모리 양

- batch.size: 여러 데이터를 함께 보내기 위한 레코드 크기

- linger.ms: 현재의 배치를 전송하기 전까기 기다리는 시간

- client.id: 어떤 클라이언트인지 구분하는 식별자

 


2. Producer Record

2.1 Recode Key

2.1.1 역할

메시지를 구분하는 구분자 역할

 

2.1.2 특징

a) 동일 키, 동일 파티션 적재 by default partitioner

순서를 보장하므로 상태머신(state machine)으로 사용가능

 

b) 역할에 따른 컨슈머 할당 적용 가능

 

c) 레코드 값(value)를 정의하는 구분자

키에 레코드값 해쉬값을 넣음으로써 중복처리 방지 기능

 

2.2 Record Value

2.2.1 역할

실질적으로 전달하고 싶은 데이터

 

a) 데이터 타입: String, ByteArray, Int 등 사실상 제한 없음

 

b) 권장 데이터 포맷

CSV, TSV, JSON, Object 등 서비스의 특정에 맞게 사용 권장

- JSON: key/value 형태로서 확장성이 뛰어남. 컬럼 정보(key) 포함

- CSV: 콤마(,) 기준으로 데이터 구분. 용량 효율성

 

2.3 Sample Code

 

2.4 Command 실행/결과

 

Producer에 특정 파티션 지정하기

- Sample Code

- Command 실행/결과


3. Producer Acks

a) acks = 0

가장 속도가 빠름. 유실 가능성이 높음

 

b) acks = 1 (default)

속도 보통. 유실 가능성이 있음

 

c) acks = all 또는 -1

속도 가장 느림. 메시지 전달 손실 가능성 없음

 

 

3.1 acks = 0

- 프로듀서가 브로커와 소켓연결을 맺고, 메시지를 보낸 즉시 성공으로 간주

- 브로커가 정상적으로 받아서 리더 파티션에 저장했는지 알 수 없음

- 팔로워 파티션에도 저장되었는지 알 수 없음

→ 전송 속도가 중요하고 일부가 유실되어도 무관한 데이터에 적합

 

3.2 acks = 1

- 프로듀서가 보낸 메시기자 리더 파티션에 정상적으로 저장되었는지 확인

- 팔로워 파티션에 저장되었는지는 모름

- 즉, 리더 파티션에 저장되고 해당 브로커가 죽으면 데이터 유실

→ acks=0에 비해 신뢰도가 높지만 아직 유실 가능성은 있음

 

3.3 acks = all 또는 -1

- 프로듀서가 보낸 메시지가 리더, 팔로워 파티션에 정상 저장되었는지 확인

- 리더 파티션의 데이터가 팔로워 파티션까지 복제될때까지 기다림

- 복제가 완료되기까지 기다림으로 인해 속도가 느림

데이터 유실 가능성이 없지만 속도가 느림

 

 

 

 


💡 Apache kafka 프로듀서 애플리케이션 개발, 실습

https://www.youtube.com/watch?v=4BbKCsKSq_I&t=1s

 

 

반응형

공유

댓글