ABOUT ME

-

Total
-
  • Pinterest의 Apache Kafka 팁, 사용법
    컴퓨터/Kafka 2021. 1. 27. 15:17
    728x90
    반응형

    Pinterest

     

    Pinterest

    요리법, 집 꾸미기 아이디어, 영감을 주는 스타일 등 시도해 볼 만한 아이디어를 찾아서 저장하세요.

    www.pinterest.co.kr

    현재는 다를 수 있음

     

    1. 소개

    @모비인사이드

    핀터레스트, 좋아하는 관심사(이미지)를 쉽게 저장할 수 있고 공유할 수 있는 플랫폼이다. 월 사용자가 천만명이 넘을 정도로 큰 핀터레스트는 Apache Kafka를 이용해서 repin, click, close-ups, impressions 등 다양한 이벤트 데이터들을 데이터 저장소에 옮기는 데 사용한다고 한다.

     

    2000개가 넘는 브로커에서 카프카를 돌리며, 하루에 페타바이트 정도를 사용할 수 있을 정도로스케일이 엄청나다.

     

    카프카는 지역마다 있는 서버끼리 통신을 할 수 없다. (예. 미국에 있는 카프카 서버 -> 한국 카프카 서버)

    때문에 MirrorMaker나 다양한 도구들로 이 문제를 해결할 수 있다. (핀터레스트도 미러 메이커 사용)

     

    카프카 구조 @Pinterest 엔지니어링 팀

     

    2. DoctorKafka

    핀터레스트 엔지니어링 팀은 프로덕션에서 카프카를 사용해보면서 발생한 문제점들을

    카프카에 많은 pull request를 보냈고, 발전도 많이 시켜주었다.

     

    매일 브로커 다운이 있기 때문에 오류를 잘 처리할 수 있도록 핀터레스트 팀은 DoctorKafka를 개발하게 됐다.

     

    pinterest/doctorkafka

    DoctorKafka is a service for Kafka cluster auto healing and workload balancing - pinterest/doctorkafka

    github.com

    • 자동으로 다운된 서버에 있는 파티션들을 다른 서버로 옮기는 클러스터 복구
    • 서버 간 작업량 밸런스 기능
    • 멀티 카프카 서버 중앙 관리 구조
    • 핀터레스트 DoctorKafka 설정 보기 @링크

     

    3. Kafka 설정

    주키퍼는 3개를 사용하는 듯 보인다.

    d2.2xlarge AWS 인스턴스를 사용하며, 아래 값들을 사용 중이라고 한다. (현재는 다를 수 있음)

     

    서버 설정

    controlled.shutdown.enable=true
    
    # kafka broker id settings
    reserved.broker.max.id=10000
    
    # listener 관련 설정
    listeners=PLAINTEXT://:9092,SSL://:9093
    security.inter.broker.protocol=PLAINTEXT
    inter.broker.protocol.verison=2.0.0
    
    # log 관련 설정
    log.dirs=$log_dir_path
    log.retention.hours=$hours
    log.message.format.version=2.0
    
    # topic 관련 설정
    auto.create.topics.enable=false
    delete.topic.enable=false
    
    default.replication.factor=3
    message.max.bytes=4194304
    num.network.threads=8
    num.partitions=8
    num.recovery.threads.per.data.dir=6
    num.replica.fetchers=2
    replica.fetch.max.bytes=4194304
    min.insync.replicas=2
    socket.receive.buffer.bytes=2097152
    socket.send.buffer.bytes=2097152
    connections.max.idle.ms=600000
    
    # 리더 밸런스 설정
    leader.imbalance.per.broker.percentage=0
    
    # 주키퍼 설정
    zookeeper.connect=$zookeeper_url
    zookeeper.connection.timeout.ms=6000
    zookeeper.session.timeout.ms=6000
    

     

    카프카 Java 파라미터

    -Xms8G -Xmx8g
    -XX:NewSize=512m -XX:MaxNewSize=512m
    -XX:MetaspaceSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=25
    -XX:InitatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M
    -XXMinMetaspaceFreeRatio=25 -XX:MaxMetaspaceFreeRatio=75
    -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution
    -Xloggc:/var/log/kafka/gc.log -XX:+UseGCLogFileRotaion -XX:NumberOfGCLogFiles=40
    -XX:GCLogFileSize=50M
    -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authentication=false
    -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9999
    -Dcom.sun.management.jmxremote.rmi.port=9999

    TLS 사용을 허용했으며, 8기가 바이트의 힙 사이즈로 카프카가 long-pause GC로 빠지는 문제를 방지했다고 한다.

     

    참고

    핀터레스트 엔지니어링 미디엄은 카프카나 다른 리얼 프로덕션 예제를 참고하기 좋은 것 같다.

     

    Pinterest Engineering – Medium

    Read writing from Pinterest Engineering on Medium. https://medium.com/pinterest-engineering | Inventive engineers building the first visual discovery engine | https://careers.pinterest.com/.

    medium.com

     

    728x90

    '컴퓨터 > Kafka' 카테고리의 다른 글

    Kafka 2.8.0+: No more zookeeper  (0) 2021.05.15
    Apache Kafka Connect 사용해보기  (0) 2021.01.07
    Apache Kafka 서버 보안 (security)  (0) 2020.12.30

    댓글