Kafka/Broker

Kafka TCP Connection에 대한 정리

재심 2023. 5. 29. 12:05

목차

    [INTRO]

    기본적으로 Kafka에서는 active_connection_count라는 메트릭지표로 현재 사용 중인 Connection 수에 대한 지표를 제공한다. 하지만 실제 클라이언트 인스턴스 수 보다 이 값이 높은 경우가 있다고 한다.

    TCP Connection 수에 대한 정리.

     

    librdkafka에 Connection에 대한 내용이 정리되어 있다.

    librdkafka/INTRODUCTION.md at master · confluentinc/librdkafka · GitHub

     

    GitHub - confluentinc/librdkafka: The Apache Kafka C/C++ library

    The Apache Kafka C/C++ library. Contribute to confluentinc/librdkafka development by creating an account on GitHub.

    github.com

     

    [Connections]

    브로커에서 필요한 Connection은 아래와 같다.

    • Consuming 되는 파티션의 리더
    • Producing 되는 파티션의 리더
    • Consumer group 코디네이터
    • Admin API 작업을 위한 Controller

    만약 브로커 연결이 없는 상태에서 메타데이터 검색을 위한 요청이 들어온 경우 클라이언트는 유휴 브로커를 통해 메타데이터 정보를 가져간다고 한다.

     

    이미 브로커 연결이 있는 경우 random하게 Connection을 맺는다고 한다.

    random connection을 맺는 경우는 아래와 같다.

     

    • bootstrap 서버 구성
    • 브로커 추가
    • consumer group  coordinator 검색
    • Idempotence Producer에 대한 Producer ID획득
    • 클러스터또는 토픽의 config 변경

    random connection의 경우 일회성 쿼리에는 적절하지만 계속해서 연결을 유지해야할 필요가 있다.

    아래와 같은 경우에는 Connection을 계속 유지하여 사용하도록 한다고 한다.

     

    • Consumer의 group coordinator
    • Consumer의 Consuming동작
    • Producer의 Producing 동작

    Connection이 닫히는 경우는 여러 요소가 있다.

     

    • 네트워크 오류
    • 시간 초과
    • connections.max.idle.ms (기본10분) 초과한 클라이언트

    [Connection 수 계산식]

    Connection수를 계산할 수 있는 대략적인 계산식이 있다고 한다.

    Broker당 2000개 정도의 Connection이면 원활한 수준이라고 한다. (2만개까지도 가능은 하다고 함)

      계산식 비고
    Producer # of partitions * # of producers (토픽당)  
    Consumer (# of Consumer Group * Broker + # of Consumer Group) * n n: the number of consumer of consumer group
    B: the number of Brokers