-
Pinterest의 Apache Kafka 팁, 사용법컴퓨터/Kafka 2021. 1. 27. 15:17728x90반응형
Pinterest
현재는 다를 수 있음
1. 소개
핀터레스트, 좋아하는 관심사(이미지)를 쉽게 저장할 수 있고 공유할 수 있는 플랫폼이다. 월 사용자가 천만명이 넘을 정도로 큰 핀터레스트는 Apache Kafka를 이용해서 repin, click, close-ups, impressions 등 다양한 이벤트 데이터들을 데이터 저장소에 옮기는 데 사용한다고 한다.
2000개가 넘는 브로커에서 카프카를 돌리며, 하루에 페타바이트 정도를 사용할 수 있을 정도로스케일이 엄청나다.
카프카는 지역마다 있는 서버끼리 통신을 할 수 없다. (예. 미국에 있는 카프카 서버 -> 한국 카프카 서버)
때문에 MirrorMaker나 다양한 도구들로 이 문제를 해결할 수 있다. (핀터레스트도 미러 메이커 사용)
2. DoctorKafka
핀터레스트 엔지니어링 팀은 프로덕션에서 카프카를 사용해보면서 발생한 문제점들을
카프카에 많은 pull request를 보냈고, 발전도 많이 시켜주었다.
매일 브로커 다운이 있기 때문에 오류를 잘 처리할 수 있도록 핀터레스트 팀은 DoctorKafka를 개발하게 됐다.
- 자동으로 다운된 서버에 있는 파티션들을 다른 서버로 옮기는 클러스터 복구
- 서버 간 작업량 밸런스 기능
- 멀티 카프카 서버 중앙 관리 구조
- 핀터레스트 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로 빠지는 문제를 방지했다고 한다.
참고
핀터레스트 엔지니어링 미디엄은 카프카나 다른 리얼 프로덕션 예제를 참고하기 좋은 것 같다.
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