브로커 · 프로듀서 · 컨슈머에서 실제로 효과가 큰 항목만 정리한다. 값은 장비와 트래픽에 따라 달라지므로 바꾸기 전후를 재서 비교한다.
| 항목 |
기준 |
num.network.threads |
기본 3. 코어 수와 클라이언트 수가 많으면 올린다 |
num.io.threads |
기본 8. 디스크 수의 2배 정도부터 본다 |
num.replica.fetchers |
기본 1. 복제가 밀리면 2~4 로 올린다 |
socket.send.buffer.bytes / socket.receive.buffer.bytes |
기본 100KB. 지연이 큰 구간은 1MB 이상 |
log.segment.bytes |
기본 1GB. 보존 기간이 짧으면 줄여 삭제를 잦게 한다 |
num.partitions |
소비 병렬도의 상한이다. 컨슈머 수보다 크게 잡는다 |
# 로그 디렉터리를 여러 물리 디스크에 나눈다
log.dirs=/data1/kafka,/data2/kafka,/data3/kafka
- XFS 를 쓰고
noatime 으로 마운트한다.
- RAID 5/6 은 쓰기 증폭이 커서 불리하다. JBOD 로 두고 복제에 맡긴다.
log.flush.interval.messages 는 건드리지 않는다. Kafka 는 OS 페이지 캐시에 맡기고 복제로 내구성을 얻는 설계다.
- 브로커 힙은 6GB 안팎이면 충분하다. 남은 메모리는 페이지 캐시로 둔다.
vm.swappiness=1 로 스왑을 억제한다.
echo 'vm.swappiness = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
| 항목 |
기준 |
batch.size |
기본 16KB. 처리량이 목적이면 64~256KB |
linger.ms |
기본 0. 5~50ms 를 주면 배치가 차서 처리량이 오른다 |
compression.type |
lz4 가 CPU 대비 효율이 좋다. 저장 공간이 급하면 zstd |
acks |
all 이 기본값(3.0~). 내구성을 포기하지 않는다 |
max.in.flight.requests.per.connection |
멱등성(enable.idempotence=true)과 함께 쓰면 5 까지 순서가 보장된다 |
| 항목 |
기준 |
fetch.min.bytes |
기본 1. 올리면 요청 수가 줄어 처리량이 오른다 |
fetch.max.wait.ms |
fetch.min.bytes 와 짝. 지연 허용치만큼 준다 |
max.poll.records |
한 번에 처리할 수 있는 만큼만. 넘기면 리밸런스가 돈다 |
max.poll.interval.ms |
처리 시간이 길면 늘린다. 안 늘리면 그룹에서 빠진다 |
# 컨슈머 랙
kafka-consumer-groups.sh --bootstrap-server broker:9092 --describe --group <그룹>
# 처리량 측정
kafka-producer-perf-test.sh --topic perf --num-records 1000000 \
--record-size 1024 --throughput -1 \
--producer-props bootstrap.servers=broker:9092 acks=all
자세한 항목별 설명은 Broker 설정 · Producer 설정 을 볼 것.