10.2. Kafka 구성


Kafka 사용자 정의 리소스의 사양 속성을 업데이트하여 Kafka 배포를 구성합니다.

Kafka를 구성하는 것 외에도 Apache Kafka Operator에 대한 Streams 구성을 추가할 수 있습니다.

KRaft 메타데이터 버전(.spec.kafka.metadataVersion)은 Kafka 버전 (spec.kafka.version)에서 지원하는 버전이어야 합니다. 구성에 메타데이터 버전이 설정되지 않은 경우 Cluster Operator는 버전을 사용된 Kafka 버전의 기본값으로 업데이트합니다.

참고

지원되는 가장 오래된 메타데이터 버전은 3.3입니다. Kafka 버전보다 오래된 메타데이터 버전을 사용하면 일부 기능이 비활성화될 수 있습니다.

Kafka 클러스터는 노드 풀을 사용합니다. 노드 풀 구성에 다음을 지정해야 합니다.

  • Kafka 클러스터 내의 각 노드에 할당된 역할
  • 사용된 복제본 노드 수
  • 노드의 스토리지 사양

다른 선택적 속성은 노드 풀에서도 설정할 수 있습니다.

Kafka 클러스터 구성 옵션에 대한 자세한 내용은 Apache Kafka 사용자 정의 리소스 API 참조의 Streams 를 참조하십시오.

Kafka 사용자 정의 리소스 구성의 예

# Basic configuration (required)
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  annotations:
    strimzi.io/node-pools: enabled
    strimzi.io/kraft: enabled
# Deployment specifications
spec:
  kafka:
    # Listener configuration (required)
    listeners: 
1

      - name: plain 
2

        port: 9092 
3

        type: internal 
4

        tls: false 
5

        configuration:
          useServiceDnsDomain: true 
6

      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication: 
7

          type: tls
      - name: external1 
8

        port: 9094
        type: route
        tls: true
        configuration:
          brokerCertChainAndKey: 
9

            secretName: my-secret
            certificate: my-certificate.crt
            key: my-key.key
    # Kafka version (recommended)
    version: 4.0.0 
10

    # KRaft metadata version (recommended)
    metadataVersion: 4.0 
11

    # Kafka configuration (recommended)
    config: 
12

      auto.create.topics.enable: "false"
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 2
      default.replication.factor: 3
      min.insync.replicas: 2
    # Resources requests and limits (recommended)
    resources: 
13

      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
    # Logging configuration (optional)
    logging: 
14

      type: inline
      loggers:
        # Kafka 4.0+ uses Log4j2
        rootLogger.level: INFO
    # Readiness probe (optional)
    readinessProbe: 
15

      initialDelaySeconds: 15
      timeoutSeconds: 5
    # Liveness probe (optional)
    livenessProbe:
      initialDelaySeconds: 15
      timeoutSeconds: 5
    # JVM options (optional)
    jvmOptions: 
16

      -Xms: 8192m
      -Xmx: 8192m
    # Custom image (optional)
    image: my-org/my-image:latest 
17

    # Authorization (optional)
    authorization: 
18

      type: simple
    # Rack awareness (optional)
    rack: 
19

      topologyKey: topology.kubernetes.io/zone
    # Metrics configuration (optional)
    metricsConfig: 
20

      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef: 
21

          name: my-config-map
          key: my-key
  # Entity Operator (recommended)
  entityOperator: 
22

    topicOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalMs: 60000
      # Resources requests and limits (recommended)
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"
      # Logging configuration (optional)
      logging: 
23

        type: inline
        loggers:
          rootLogger.level: INFO
    userOperator:
      watchedNamespace: my-topic-namespace
      reconciliationIntervalMs: 60000
      # Resources requests and limits (recommended)
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"
      # Logging configuration (optional)
      logging: 
24

        type: inline
        loggers:
          rootLogger.level: INFO
  # Kafka Exporter (optional)
  kafkaExporter: 
25

    # ...
  # Cruise Control (optional)
  cruiseControl: 
26

    # ...

1
리스너는 클라이언트가 부트스트랩 주소를 통해 Kafka 클러스터에 연결하는 방법을 구성합니다. 리스너는 OpenShift 클러스터 내부 또는 외부에서 연결을 위해 내부 또는 외부 리스너로 구성됩니다.
2
리스너를 식별하는 이름입니다. Kafka 클러스터 내에서 고유해야 합니다.
3
Kafka 내의 리스너에서 사용하는 포트 번호입니다. 포트 번호는 지정된 Kafka 클러스터 내에서 고유해야 합니다. 허용되는 포트 번호는 9092 이상이며, 이는 Prometheus 및 Cryostat에 이미 사용되는 포트 9404 및 9999를 제외하고 사용합니다. 리스너 유형에 따라 Kafka 클라이언트를 연결하는 포트 번호와 포트 번호가 동일하지 않을 수 있습니다.
4
internal 또는 cluster-ip 로 지정된 리스너 유형(broker ClusterIP 서비스를 사용하여 Kafka를 노출) 또는 외부 리스너의 경우 경로 (OpenShift만), 로드 밸런서,nodeport 또는 ingress (Kubernetes만 해당)로 표시됩니다.
5
각 리스너에 대해 TLS 암호화를 활성화하거나 비활성화합니다. 경로 및 수신 유형 리스너의 경우 TLS 암호화를 항상 true 로 설정하여 활성화해야 합니다.
6
클러스터 서비스 접미사(일반적으로 .cluster.local)를 포함하여 정규화된 DNS 이름을 정의합니다.
7
mTLS, SCRAM-SHA-512 또는 토큰 기반 OAuth 2.0으로 지정된 리스너 인증 메커니즘
8
외부 리스너 구성은 경로,로드 밸런서 또는 nodeport 를 통해 Kafka 클러스터가 OpenShift 외부에 노출되는 방법을 지정합니다.
9
외부 CA(인증 기관)에서 관리하는 Kafka 리스너 인증서에 대한 선택적 구성입니다. brokerCert CryostatAndKey 는 서버 인증서와 개인 키가 포함된 보안을 지정합니다. 활성화된 TLS 암호화를 사용하여 모든 리스너에서 Kafka 리스너 인증서를 구성할 수 있습니다.
10
업그레이드 절차에 따라 지원되는 버전으로 변경할 수 있는 Kafka 버전입니다.
11
업그레이드 절차에 따라 지원되는 버전으로 변경할 수 있는 Kafka 메타데이터 버전입니다.
12
브로커 구성. 표준 Apache Kafka 구성은 Apache Kafka용 Streams에서 직접 관리하지 않는 속성으로 제한될 수 있습니다.
13
지원되는 리소스(현재 cpu 및 memory ) 예약 요청 및 사용할 수 있는 최대 리소스를 지정합니다.
14
Kafka 로거 및 로그 수준은 ConfigMap 을 통해 직접(인라인) 또는 간접적으로(외부)에 추가됩니다. 사용자 정의 Log4j 구성은 ConfigMap 의 log4j2.properties 키 아래에 배치해야 합니다. 로그 수준은 INFO,ERROR,WARN,TRACE,DEBUG,FATAL 또는 OFF 로 설정할 수 있습니다.
15
컨테이너를 다시 시작할 시기(라이브)와 컨테이너가 트래픽을 허용할 시기(준비)를 확인할 상태 점검입니다.
16
Kafka를 실행하는 VM(가상 머신)의 성능을 최적화하는 JVM 구성 옵션입니다.
17
ADVANCED OPTION: 특수 상황에서만 권장되는 컨테이너 이미지 구성입니다.
18
권한 부여를 사용하면 Kafka 브로커에서 간단한 OAuth 2.0, 사용자 정의 또는 OPA(더 이상 사용되지 않음) 권한을 사용할 수 있습니다. 간단한 인증에서는 StandardAuthorizer Kafka 플러그인을 사용합니다.
19
다양한 랙, 데이터 센터 또는 가용성 영역에 복제본을 분산하기 위한 랙 인식 구성입니다. topologyKey 는 랙 ID가 포함된 노드 레이블과 일치해야 합니다. 이 구성에 사용된 예제에서는 표준 topology.kubernetes.io/zone 레이블을 사용하는 영역을 지정합니다.
20
Prometheus 지표가 활성화되어 있습니다. 이 예에서는 Prometheus Cryostat Exporter(기본 지표 내보내기)에 대한 메트릭이 구성됩니다.
21
Prometheus Cryostat 내보내기에 대한 구성이 포함된 ConfigMap을 참조하여 활성화되는 Prometheus 형식의 Grafana 대시보드로 메트릭을 내보내는 규칙입니다. metricsConfig.valueFrom.configMapKeyRef.key 아래에 빈 파일이 포함된 ConfigMap에 대한 참조를 사용하여 추가 구성 없이 메트릭을 활성화할 수 있습니다.
22
Entity Operator 구성 - Topic Operator 및 User Operator에 대한 구성을 지정합니다.
23
Topic Operator 로거 및 로그 수준을 지정합니다. 이 예에서는 인라인 로깅을 사용합니다.
24
지정된 사용자 Operator 로거 및 로그 수준입니다.
25
Kafka 내보내기 구성. Kafka 내보내기는 특히 소비자 지연 데이터의 Kafka 브로커에서 메트릭 데이터를 추출하기 위한 선택적 구성 요소입니다. Kafka Exporter가 제대로 작동하려면 소비자 그룹이 사용 중이어야 합니다.
26
Kafka 클러스터를 재조정하는 데 사용되는 Cruise Control에 대한 선택적 구성입니다.

10.2.1. 브로커에 처리량 및 스토리지 제한 설정

다음 절차에서는 Kafka 클러스터의 브로커에 처리량 및 스토리지 제한을 설정하는 방법을 설명합니다. 할당량 플러그인을 활성화하고 Kafka 리소스의 할당량 속성을 사용하여 제한을 구성합니다.

할당량 플러그인에는 다음 두 가지 유형이 있습니다.

  • strimzi 유형을 사용하면 Strimzi Quotas 플러그인이 활성화됩니다.
  • kafka 유형은 기본 제공 Kafka 플러그인을 활성화합니다.

한 번에 하나의 할당량 플러그인만 활성화할 수 있습니다. 기본 제공 kafka 플러그인은 기본적으로 활성화되어 있습니다. strimzi 플러그인을 활성화하면 내장 플러그인이 자동으로 비활성화됩니다.

Strimzi 플러그인

strimzi 플러그인은 스토리지 사용률 할당량과 처리량 제한의 동적 배포를 제공합니다.

  • 스토리지 할당량은 디스크 스토리지 사용률을 기반으로 Kafka 생산자를 제한합니다. 제한은 사용 가능한 디스크 공간의 바이트(minAvailableBytesPerVolume) 또는 사용 가능한 디스크 공간의 백분율(minAvailableRatioPerVolume)로 지정하여 각 디스크에 개별적으로 적용할 수 있습니다. 클러스터의 브로커가 구성된 디스크 임계값을 초과하면 클라이언트가 디스크가 너무 빨리 채워지고 용량을 초과하지 않도록 제한됩니다.
  • 총 처리량 제한은 모든 클라이언트에 동적으로 배포됩니다. 예를 들어 40MBps 생산자 바이트-rate 임계값을 설정하면 두 생산자 간 배포가 정적이 아닙니다. 하나의 생산자가 10MBps를 사용하는 경우 다른 생산자는 최대 30MBps를 사용할 수 있습니다.
  • 특정 사용자(클라이언트)는 제한에서 제외될 수 있습니다.
참고

strimzi 플러그인을 사용하면 클라이언트당 메트릭이 아닌 집계된 할당량 지표만 표시됩니다.

Kafka 플러그인

kafka 플러그인은 사용자별로 처리량 제한을 적용하고 추가 CPU 및 작업 속도 제한을 포함합니다.

  • 제한은 사용자 및 브로커당 적용됩니다. 예를 들어 20MBps 생산자 바이트 비율 임계값을 설정하면 각 사용자가 해당 사용자의 모든 생산자 연결에서 각 사용자가 20MBps로 제한됩니다. strimzi 플러그인에 있는 것처럼 총 처리량 제한이 없습니다. 제한은 사용자별 할당량 구성으로 재정의할 수 있습니다.
  • 각 클라이언트의 CPU 사용률 제한은 브랜드별로 네트워크 스레드 및 I/O 스레드의 백분율로 설정할 수 있습니다.
  • 초당 허용되는 동시 파티션 생성 및 삭제 작업(mutations) 수는 브랜드별로 설정할 수 있습니다.

기본 Kafka 할당량 플러그인을 사용하는 경우 기본 할당량(설정된 경우)이 모든 사용자에게 적용됩니다. 여기에는 작업에 영향을 줄 수 있는 Topic Operator 및 Cruise Control과 같은 내부 사용자가 포함됩니다. 내부 사용자를 중복으로 제한하지 않으려면 할당량을 효과적으로 조정하는 것이 좋습니다.

예를 들어 Kafka 할당량 플러그인에 의해 Topic Operator에 자동으로 적용되는 할당량은 컨트롤러 변경 속도를 제한하여 주제 생성 또는 삭제 작업을 제한할 수 있습니다. 따라서 Topic Operator에서 올바르게 작동하고 이러한 문제를 방지하기 위해 적절한 할당량을 명시적으로 설정하는 데 필요한 최소 할당량을 이해하는 것이 중요합니다. 관련 컨트롤러 및 브로커 메트릭을 모니터링하면 주제의 작업 속도를 추적하고 최적화하는 데 도움이 될 수 있습니다. cruise Control 및 해당 메트릭 보고자는 Kafka 클러스터의 규모 및 구성에 따라 재조정을 수행하기 위해 충분한 생성 및 가져오기 속도가 필요합니다. Cruise Control에 대한 문제를 방지하려면 소규모 클러스터에서 생산자 및 소비자의 최소 1KB/s 비율(예: 중간 트래픽이 있는 브로커 3개)으로 시작하고 더 크거나 더 많은 활성 클러스터에 대해 필요에 따라 조정할 수 있습니다.

사전 요구 사항

  • Kafka 클러스터를 관리하는 Cluster Operator가 실행 중입니다.

프로세스

  1. Kafka 리소스의 할당량 섹션에 플러그인 구성을 추가합니다.

    strimzi 플러그인 구성의 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      annotations:
        strimzi.io/node-pools: enabled
        strimzi.io/kraft: enabled
    spec:
      kafka:
        # ...
        quotas:
          type: strimzi
          producerByteRate: 1000000 
    1
    
          consumerByteRate: 1000000 
    2
    
          minAvailableBytesPerVolume: 500000000000 
    3
    
          excludedPrincipals: 
    4
    
            - my-user

    1
    생산자 바이트 비율 임계값을 1MBps로 설정합니다.
    2
    1MBps의 소비자 바이트 비율 임계값을 설정합니다.
    3
    500GB의 스토리지에 사용 가능한 바이트 제한을 설정합니다.
    4
    제한 사항에서 my-user 를 제외합니다.

    minAvailableBytesPerVolume 및 minAvailableRatioPerVolume 은 함께 사용할 수 없습니다. 이러한 매개변수 중 하나만 구성합니다.

    kafka 플러그인 구성의 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      annotations:
        strimzi.io/node-pools: enabled
        strimzi.io/kraft: enabled
    spec:
      kafka:
        # ...
        quotas:
          type: kafka
          producerByteRate: 1000000
          consumerByteRate: 1000000
          requestPercentage: 55 
    1
    
          controllerMutationRate: 50 
    2

    1
    CPU 사용률 제한을 55%로 설정합니다.
    2
    컨트롤러 변경 속도를 초당 50개의 작업으로 설정합니다.
  2. Kafka 구성에 변경 사항을 적용합니다.
참고

추가 옵션은 spec.kafka.config 섹션에서 구성할 수 있습니다. 지원되는 옵션의 전체 목록은 플러그인 설명서에서 확인할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동