이번에는 kafka 설정 파일에 어떤것들이 있는지 살펴본다. https://github.com/apache/kafka/blob/trunk/config/server.properties
broker.id 는 브로커의 id로 각 broker 인스턴드 마다 고유한 값을 가져야 한다.
listeners는 broker에서 참조하는 엔드포인트, advertised.listeners는 producer나 consumer가 참조하는 엔드포인드 이다. advertised.listeners를 설정하지 않으면 listeners의 값이 사용된다. replication의 traffic은 client의 traffic을 방해해서는 안되고, 외부 traffic은 proxy나 loadbalancer를 타고 들어올텐데 내부 traffic은 직접 brocker로 연결하기 위해서 두가지로 나뉘어 졌다. 외부 트래픽은 ssl을 적용할 수 도있고, 내부 트래픽은 ssl을 적용하지 않은 상태로 서비스를 실행할수도 있기 때문에 (보안 이슈) listeners와 advertised.listeners를 따로 관리한다.
num.network.threads는 서버가 실제로 요청을 받거나 응답을 내보내는 쓰레드이다. num.io.threads는 서버가 클라이언트의 요청을 처리할 때 사용하는 쓰레드이다.
log.dirs는 브로커가 데이터를 저장하는 경로이다. num.partitions은 파티션의 개수로 기본적으로 1개의 파티션을 사용하게 되어 있다.
kafka 브로커로 전달된 메세지들은 fsync()라는 함수를 통해 디스크에 저장된다. log.flush.interval.messages는 데이터를 디스크에 쓰기 전에 몇개까지의 메세지를 가지고 있을 것인지 정한다. log.flush.interval.ms 데이터를 디스크에 쓰기 전에 몇 초정도 만큼의 메세지를 가지고 있을 것인지 정한다. 여기서 데이터를 디스크에 쓰는 작업을 flush 라고 한다.
log.retention.check.interval.ms는 삭제할 수 있는지 여부에 대해 log segment를 확인하는 간격이다.
kafka가 사용할 zookeeper를 127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 이런식으로 지정하면 된다.
https://kafka.apache.org/documentation/#configuration 에서 더 많은 configuration들을 확인할 수 있다.
auto.create.topics.enable은 topic의 자동 생성에 대한 옵션이다.
kafka는 메세지 압축을 지원하는데, ‘gzip’, ‘snappy’, ‘lz4’, ‘zstd’ 네가지로 압축할수 있다. producer가 메세지를 압축해서 전송하면 broker가 압축된 채로 그대로 저장하고 consumer가 pull 할때도 압축된 형태로 가져간 후에 decompression작업을 실행한다.
delete.topic.enable 토픽을 삭제할 수 있도록 하는 옵션이다.
message.max.bytes는 broker에서 허용할 가장 큰 메세지 크기를 정해준다.
replica.lag.time.max.ms는 follwer가 leader한테 이 시간동안 fetch request를 보내지 않는다면 leader는 ISR에서 follwer에서 제가한다.