일단 카프카는 "레코드" 단위로 메시지를 보낸다.
또한 하나씩 계속 전달되게 되면, 과부하가 일어나기 때문에 Accumulator 에 의해 일정한 배치사이즈로 축적을 한다.
시작
1. 전송을 위한 레코드 객체를 만듬.
2. 해당 객체는 Serializer에 의해 바이트화 됨.
3. 바이트화 된 객체는 Partitioner에 의해 토픽의 어떤 파티션에 들어갈지 정함.
4. 메타데이터와 함께 Accumulator에 일정한 배치 사이즈로 축적됨.
5. 각종 Config 마다 다르게 전송이 되는데,
- linger.ms - 배치로 만들어서 데이터를 보내기 위한 최소 시간. 배치사이즈가 전부 차지 않아도 이 시간이 경과하면 보냄.
- buffer.memory = accumulator의 최대 크기
- batch.size = 단일 배치의 사이즈
6. 위의 설정에 맞춰 전송 요건이 되면 Sender에 의해 전송됨.
- request.timeout.ms = 일정 시간동안 응답이 안오면 재전송
- retry.backoff.ms = 전송 재시도를 위한 대기시간
- deliver.timeout.ms = 메시지 전송에 허용된 최대 시간. 이 시간 경과하면 버림
- 동기와 비동기로 또 나뉨. // 성능 차이는 비동기가 100배 빠름
'KAFKA' 카테고리의 다른 글
RabbitMQ 정리 (0) | 2023.03.03 |
---|---|
kafka kraft - 어려워서 나중에 따로 정리..뭔가 좀 쿠버네티스랑 비슷한듯 싶은데,, (0) | 2022.10.18 |
카프카 코어 정리 (0) | 2022.10.16 |
카프카 컨수머 구조 (0) | 2022.10.08 |
카프카 (0) | 2022.10.03 |