ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka 심화 개념 - 3
    데엔 공부 2024. 12. 14. 09:21

    3-1. Apache Kafka and Confluent Reference Architecture

     

    Confluent에서 제공하는 Confluent Platform Reference Architecture

    참조 아키텍처 환경 참조 HW 사양

     

    Large Cluster Reference Architecture

     

    Small Cluster Reference Architecture

    > Zookeeper Broker 같이 구성

     

    Large Cluster HW 권장 사양

    > Connect 올라가면 CPU 사용량은 올라감. 여기서는 구축 권장 사양일 .

     

    Small Cluster HW 권장 사양

     

    Public Cloud Deployment(AWS, MS Azure, Google Cloud Platform) 사용 유의점

    > Core: Cloud Provider 시스템 크기 조정시 가상 Core 사용. 일반적으로 데이터 센터에서 사용하는 최신 코어보다 성능 낮을 수도.

    > Network: 대부분의 Cloud Provider 최상위 계층 노드에서만10GbE 사용

    > On-Premises 환경 설치 HW 사양을 Public Cloud 환경에서도 권장

     

    AWS EC2 최소 사양

     

    Google Cloud Compute Engine 최소 사양

     

    Kafka Sizing 위한 도구

    > Eventsizer - Sizing Calculator

     

    3-2. Kafka In Real Environment

     

    Broker 설치 구성 > 전용 서버 권장

    Broker 분리된 각각의 전용 서버에 분리하여 설치 구성 권장

    > N개의 Broker 있으면 Replication Factor(RF) 최대 N개까지 사용하여 Topic 생성가능

    > Mission Critical Topic에는 Replication Factor 보통 3 사용

     -> Broker 4 이상 하나의 Cluster 구성하는 권장

    > 데이터 유실방지를 위해 min.insync.replicas 2 많이 사용

     

    Broker CPU : 처리량에 따라 Thread 관련 파라미터 튜닝 필수

    > Thread 증가에 따라 CPU 사용량 증가

    > 설정 잘못하거나 메모리 충분하지 않거나 Bug 인해 CPU 사용률 높을 있음

    > Reference Architecture에는 Dural 12-core sockets 권장

     

    Broker 파라미터

     

    Open File Descriptors

    > Broker File 많이 사용함

     

    Broker Memory > JVM Heap + OS Page Cache

    > JVM Heap많이 사용하지 않음

    > 운영환경의 경우 대부분 6GB 할당(Heap)

    > 매우 Cluster이거나 많은 파티션 필요하면 12GB(Heap)

    > OS만을 위해서는 보통 1GB 할당

    > Broker OS Page Cache Zero copy 전송 수행, 많을수록 성능 유리

    > 운영환경용 Broker 메모리는 최소 32GB~64GB 권장

     

    Broker Java Heap Mamory 설정 방법

    > Kafka-server-start 스크립트에 설정 옵션 있음

    > $KAFKA_HEAP_OPTS

     

    Broker Network

    > 전체 처리 메시지(복제 포함) 네트워크 통해 전달

    > 처리량이 작은 경우, Broker NW 1GB 충분

    > 처리량이 경우, Broker NW 10GB 이상 필요

    > Producer 압축옵션으로 네트워크 효율적 사용 가능

    > Internal External 트래픽 분리 가능

     

    Broker Disk

    > Kafka 성능에 영향을 미치는 요소(Disk,Network)

    > Kafka Broker data log Disk Os Disk 분리 권장

    > 여러개의 Local Disk 사용 권장(RAID10 권장, JBOD 사용 가능)

    > SSD Disk 권장

    > XFS 파일시스템 사용

    > mount 시에 noatime 옵션 사용 - Linux 파일에 마지막으로 액세스한 시간기록하는 파일 시스템의 메타데이터 유지관리방식 off

    > Broker 파라미터 log.dirs 콤마로 구분한 디렉토리로 정의

    > 하나의 파티션은 하나의 볼륨에서 생성됨

    > 파티션들은 Log.dirs 디렉토리에 라운드로빈방식 분배

    > NAS(Network Attached Storage) 사용 불가

     

    Virtual Memory

    > Kafka 성능에 영향

     

    Zookeeper 권장 사양

    > 홀수 개로 구성

    > HW 권장 사양

     

    Zookeeper Disk - Auto Purge 옵션

    > server.properties 내의 purge snapshots 파라미터 설정

     

    3-3. Installation, Cluster Configuration

     

    설치 환경 정보

    > Confluent Platfrom(CP)사용

    > Ubuntu 18.04

    > Production 환경(Zookeeper 3, Broker 3, Control Center 1)

    > Open JDK 혹은 OracleJDK 1.8/1.11 사용 가능

    Control center : Kafka 모니터링 관리를 위한 Web UI 도구

     

    OS 구성

    > Linux 계정 생성 (root 사용 지양)

    > JDK 구성(설치 환경변수 추가)

     

    Confluent Platform 다운하여 Linux 계정의 디렉토리에서 압축 풀고 환경변수 추가

     

    Zookeeper Node 구성

    > ${CONFLUENT_HOME}/etc/kafka/zookeeper/properties

     

    Broker Node 구성

    > ${CONFLUENT_HOME}/etc/kafka/server.properties

     

    Control Center Node 구성

    > ${CONFLUENT_HOME}/etc/confluent-control-center/control-center-production.properties

     

    Confluent platform 실행

    > 항상 이렇게 실행시킬 없어 nohup 스크립트 실행

     

    3-4. Log Retention, Cleanup policy

     

    Log 파일 관리 : Log Cleanup Policy

    > Log Consume되어도 지우지 않음

    > Broker 혹은 Topic 단위로 Cleanup 정책 설정

    > log.cleanup.policy 파라미터

    > 현재 Active Segment log cleanup 대상 아님

     

    Delete Cleanup Policy

    > Log Cleaner Thread Segment File 삭제

     

    Topic 메시지 모두 삭제하기

    > retention.ms 활용 (운영환경에서는 권장하지 않음)

     

    Compact Cleanup Policy

    > 주어진 key 최신 value 유지하는 정책

     

    Log Compaction - 시스템 오류 상태 복원 유용

     

    Log Compaction 동작 원리

     

    Log Compaction 설정

    > Compaction 성능 튜닝 관련 옵션

     

    Tombstone Message

    > Log Compaction 특정 key 데이터 삭제

     

    3-5. Kafka Cluster Expansion, Shrink

     

    Kafka Cluster 확장

    > 고유한 ID 부여하여 새로운 Broker Zookeeper Ensemble 연결만 하면

    > 자동으로 파티션을 새로운 Broker 옮겨주지는 않음

      -> kafka-reassign-partitions 도구 또는

      -> confluent Auto Data Balancer/Self-Balancing Cluster 기능 사용하여 해결

     

    kafka-reassign-partitions 명령

    > 리밸런싱을 직접 계산해서 Topic 실행해야

     

    Confluent ADB

    > Broker 전체에 대한 파티션 리밸런싱 자동화

    > 한번에 하나의 리밸런싱만 가능

    > 시스템 자원 많이 사용 - Throttle(bytes/sec) 옵션으로 제어

    > Cluster내의 전체 브로커가 살아 있을 때만 실행됨

    > 파티션 이동 - Replica 생성 기존 Replica 삭제 하는 방식 (Disk 사용률 증가)

     

    Kafka Cluster 축소

    > Cluster 사용률이 낮아서 비용 아끼기 위해 축소

    > Broker 장비에 대한 유지보수

     

    Broker 해제 방법

    > Auto Data Balancer 또는 kafka-reassign-partition 사용하여 제거할 브로커의 파티션들을 다른 브로커에 재할당

    > kafka-reassign-partition: 브로커의 파티션들 수작업으로 옮기기

    > Auto Data Balancer: —remote-broker-ids 옵션으로 제거할 브로커 지정하여 파티션 재할당

    > 제거한 브로커를 Controlled Shutdown(kafka-server-stop) 실행

    > Self-Balancing Cluster kafka-remove-brokers 명령으로

     

    Broker 장비 교체

    > 교체 대상 브로커의 ID 동일하게 설정하고 새로운 브로커 가동

    > 주의점: 피크 시간 피해서 수행

      > 이유: 브로커는 Recovery 중에 가능한한 빨리 데이터를 복사. 이는 네트워크에 중요한 impact 발생 가능.

    '데엔 공부' 카테고리의 다른 글

    Kafka 심화 개념 - 4  (2) 2024.12.15
    Kafka 심화 개념 - 2  (0) 2024.12.13
    Kafka 심화개념 - 1  (2) 2024.11.27
    Apache Kafka 개념 정리  (2) 2024.11.25
Designed by Tistory.