잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

Kafka 설정 본문

Study/Kafka

Kafka 설정

현록 2023. 1. 25. 19:23

간단한 설정 실습

 

https://github.com/BlackdeerY/docker-kafka-example

환경변수 등의 설정 없이

기본 openjdk 환경에 ZooKeeper, Kafka 쌩 파일에 설정 파일만으로 가동하고 테스트하는 예시를 두었다.

(Docker Compose 사용)

분산된 머신들과 사용하는 포트 및 데이터 저장 디렉터리, 사용 명령어 등에 대해 감을 잡고 나면,

좀 더 세밀한 설정으로 넘어가기 수월할 것.

 

 


Kafka 공식 문서

 

https://kafka.apache.org/documentation/

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

 


Broker 설정 - server.properties

 

auto.create.topics.enable: 기본값은 true이다. false로 명시해주지 않으면,

                해당 토픽으로 produce될 때 메시지를 거부하지 않고 자동으로 토픽을 생성한다.

                이 때에 원하는 파티션의 수와 복제 수와 다르게 생성될 수 있으니, 싫다면 명시해두면 된다.

                https://kafka.apache.org/documentation/#brokerconfigs_auto.create.topics.enable

 

num.partitions: 기본값은 1이다. 토픽 생성시 파티션 수를 지정하지 않았을 때 이 값으로 생성된다.

          https://kafka.apache.org/documentation/#brokerconfigs_num.partitions

 

default.replication.factor: 기본값은 1이다. 토픽 생성시 복제 수를 지정하지 않았을 때 이 값으로 생성된다.

                https://kafka.apache.org/documentation/#brokerconfigs_default.replication.factor

 

log.cleaner.enable: 기본값은 true이다. 닫힌 세그먼트가 특정 시간이 경과하거나 특정 용량이 되었을 때 처리할지의 여부를 정한다.

            https://kafka.apache.org/documentation/#brokerconfigs_log.cleaner.enable

 

log.cleanup.policy: 기본값은 delete이다. { compact, delete } 중에서 값을 선택하여 사용한다.

            log.cleaner.enable=true일 때 처리할 파일의 처리 방법을 결정한다.

            delete면 파일을 지우고, compact면 파일을 압축한다.

            https://kafka.apache.org/documentation/#brokerconfigs_log.cleanup.policy

 

replica.lag.time.max.ms: 기본값은 30000(30초)이다. 0 이상의 long 값을 사용할 수 있다.

               만약 Follower가 이 시간까지도 복제 요청을 보내지 않거나, 마지막 offset까지 가져가지 않는다면,

               Leader는 Follower가 ISR 상태가 아니라고 판단한다.

               https://kafka.apache.org/documentation/#brokerconfigs_replica.lag.time.max.ms

 


Broker 설정 - 환경변수

 

server.properties의 항목들은 환경 변수로도 설정할 수 있다.

예를 들면...

 

KAFKA_BROKER_ID == broker.id

KAFKA_ADVERTISED_LISTENERS == advertised.listeners

KAFKA_ZOOKEEPER_CONNECT == zookeeper.connect

...

 

※ ZooKeepr의 myidzoo.cfg의 항목들도 해당한다.

 

ZOOKEEPER_SERVER_ID == myid파일

ZOOKEEPER_CLIENT_PORT == clientPort

ZOOKEEPER_TICK_TIME == tickTime

ZOOKEEPER_INIT_LIMIT == initLimit

ZOOKEEPER_SYNC_LIMIT == syncLimit

...

 

 


Producer 설정

 

acks: 기본값은 all이다. { 0, 1, all == -1 } 중에서 값을 선택하여 사용한다.

    0이면 파티션에 제대로 전달되었는지 여부를 확인하지 않는다. 그러므로 retries로 설정한 실패시 재수행 횟수 역시 실패 여부를 알 수 없으니 수행하지 않는다.

    1이면 파티션의 Leader에게만 기록되었는지를 확인한다.

    all(== -1)이면 파티션의 Leader 외에 Follower들까지 모두 복제하고 ISR이 형성되었는지 확인한다.

    신뢰성과 속도 측면에서 필요에 따라 설정한다.

    https://kafka.apache.org/documentation/#producerconfigs_acks

 

retries: 기본값은 2147483647이다. [ 0, 2147483647 ] 범위의 값을 선택하여 사용한다.

      acks 옵션이 0이 아니여서 전송 실패 여부를 알 수 있을 때, 실패시 메시지의 재전송 횟수이다.

      횟수만큼 메시지를 다 보내기 전에 delivery.timeout.ms 시간이 경과하면 재전송을 중단한다.

      보통 이 값을 수정하기 보다는 delivery.timeout.ms 옵션을 조절하여 재전송을 제어하는 것을 권장한다.

      (Users should generally prefer to leave this config unset and instead use delivery.timeout.ms to control retry behavior.)

      https://kafka.apache.org/documentation/#producerconfigs_retries

 

delivery.timeout.ms: 기본값은 120000(2분)이다. 0 이상의 int 값을 사용할 수 있다.

            메시지를 보내고 성공 혹은 최종 실패까지의 상한 시간이다.

            이 값은 request.timeout.mslinger.ms 의 합보다 이상이어야 한다.

            https://kafka.apache.org/documentation/#producerconfigs_delivery.timeout.ms

 

linger.ms: 기본값은 0이다. 0 이상의 long 값을 사용할 수 있다.

       Producer는 Broker로 request할 때, 생성한 레코드들을 그룹지어 단일 batch request로 보낼 수 있다.

       일반적으론 부하 상태(여러 레코드들마다 전송되는 것보다 한꺼번에 전송되는 것이 빠를 때)에만 일어난다.

       하지만 몇몇 상황에서는 적당한 부하이더라도 request 수를 줄이고자 할 수 있다.

       이 설정은 작은 인위적인 지연을 발생시켜, 레코드들이 함께 묶여서 request될 수 있도록 한다.

       이것은 TCP의 Nagle 알고리즘과 유사하다고 생각될 수 있다.

       이 설정은 일괄처리(batch)에 대한 상한을 제공하는 것이다.

       만약 레코드가 batch.size 이상이라면 이 설정과는 상관 없이 바로 보내겠지만,

       그 미만이라면 함께 보내기 위해 다른 레코드들이 발생하길 기다린다.

       기본값은 0이라 설정이 없으면 즉시 보낸다.

       예를 들어 5ms로 설정하면, 부하가 없는 상황에서도 5ms의 지연을 추가하게 되지만 request 수는 줄이는 효과를 기대할 수 있다.

       https://kafka.apache.org/documentation/#producerconfigs_linger.ms

 

batch.size: 기본값은 16384(bytes)이다. 0 이상의 int 값을 사용할 수 있다.

       Producer는 여러 레코드를 함께 request하여 적은 수의 요청으로 많은 레코드를 처리하려고 한다.

       이는 클라이언트와 서버 모두 성능에 도움이 된다.

       이 설정은 기본 batch의 bytes 크기를 제어한다.

       이 크기보다 큰 레코드는 함께 묶어서 처리하려고 하지 않고 즉시 보낸다.

       Broker에 전송된 요청들에는 여러 batch가 있으며(Producer나 Topic이 하나는 아니니까),

       각각은 파티션에 보낼 데이터를 갖는다.

       batch 크기가 작으면 개별적이고 한번에 처리할 양은 줄어든다(0이면 완전히 batch가 비활성화되어 개별 레코드로만).

       매우 큰 batch 크기는 많은 레코드들을 예상하여 그만큼의 버퍼를 할당해야하므로, 메모리를 좀 더 낭비할 수 있다.

       https://kafka.apache.org/documentation/#producerconfigs_batch.size

 

request.timeout.ms: 기본값은 30000(30초)이다. 0 이상의 int 값을 사용할 수 있다.

            이 설정은 Producer가 Broker로 보낸 메시지의 응답을 기다리는 최대 시간이다.

            이 시간 안에 응답이 오지 않으면 Producer는 필요한 경우(retries가 설정된 경우) 요청을 다시 보내며,

            retries 만큼 보냈거나, delivery.timeout.ms 만큼의 시간이 경과해버리면 최종 실패한다.

            acks=all(== -1)이라 Broker가 ISR 형성까지한 후 응답을 보내는 경우도 있으니,

            불필요한 재시도와 중복 가능성을 줄이기 위해 Broker의 replica.lag.time.max.ms 보다 커야 한다.

            https://kafka.apache.org/documentation/#producerconfigs_request.timeout.ms

 

 


Consumer 설정

 

allow.auto.create.topics: 기본값은 true이다. boolean(true/false)을 사용한다.

               브로커의 설정이 auto.create.topics.enable=true인 경우에,

               없는 토픽을 consume하려고 하면 해당 토픽을 자동으로 생성 요청한다.

               버전 0.11.0 미만의 브로커를 사용한다면, consumer에서는 이 설정을 필히 false로 해두어야 해당 상황에서 안전하다.

               https://kafka.apache.org/documentation/#consumerconfigs_allow.auto.create.topics

 

auto.offset.reset: 기본값은 latest이다. { latest, earliest, none } 중에서 값을 선택하여 사용한다.

           Consumer가 초기에 offest이 없거나 읽던 offset이 Broker에서 삭제된 경우,

           offset값을 어떻게 재구성할지에 대한 설정이다.

           latest면 Topic Partition의 가장 최근(이제부터 발생하는)부터 가져오려고 하고,

           earliest면 Topic Partition 중 Broker에 존재하는(아직 열려있는) 데이터 중 가장 오래된 것부터 가져오기 시작한다.

           none이면 Consumer에서 exception이 발생한다.

           https://kafka.apache.org/documentation/#consumerconfigs_auto.offset.reset

 

 

'Study > Kafka' 카테고리의 다른 글

Kafka 기본 개념 및 용어  (0) 2023.01.18
Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→