7.3. Kafka 클러스터 구성

kafka 클러스터는 하나 이상의 브로커로 구성됩니다. 생산자와 소비자가 브로커 내의 항목에 액세스할 수 있도록 Kafka 구성은 클러스터에 저장된 데이터와 데이터 액세스 방법을 정의해야 합니다. 랙의 여러 브로커 노드에서 실행되도록 Kafka 클러스터를 구성할 수 있습니다.

스토리지

Kafka 및 ZooKeeper는 디스크에 데이터를 저장합니다.

AMQ Streams에는 StorageClass 를 통해 프로비저닝된 블록 스토리지가 필요합니다. 스토리지의 파일 시스템 형식은 XFS 또는 EXT4 여야 합니다. 세 가지 유형의 데이터 스토리지가 지원됩니다.

임시 (개발 전용 권장)
임시 스토리지는 인스턴스의 수명 동안 데이터를 저장합니다. 인스턴스를 다시 시작하면 데이터가 손실됩니다.
영구
영구 스토리지는 인스턴스의 라이프사이클과 관계없이 장기 데이터 스토리지와 관련이 있습니다.
Just a Bunch of Disks, suitable for Kafka only)
JBOD를 사용하면 여러 디스크를 사용하여 각 브로커에 커밋 로그를 저장할 수 있습니다.

인프라에서 지원하는 경우 기존 Kafka 클러스터에서 사용하는 디스크 용량을 늘릴 수 있습니다.

리스너

리스너는 클라이언트가 Kafka 클러스터에 연결하는 방법을 구성합니다.

Kafka 클러스터 내의 각 리스너의 고유한 이름과 포트를 지정하면 여러 리스너를 구성할 수 있습니다.

다음 유형의 리스너가 지원됩니다.

  • OpenShift 내에서 액세스할 내부 리스너
  • OpenShift 외부에서 액세스할 수 있는 외부 리스너

리스너에 대해 TLS 암호화를 활성화하고 인증을 구성할 수 있습니다.

내부 리스너는 내부 유형을 지정하여 Kafka를 노출합니다.

  • 내부 와 동일한 OpenShift 클러스터 내에서 연결
  • broker별 ClusterIP 서비스를 사용하여 Kafka를 노출하는 cluster-ip

외부 리스너는 외부 유형을 지정하여 Kafka를 노출합니다.

참고

cluster-ip 유형을 사용하면 자체 액세스 메커니즘을 추가할 수 있습니다. 예를 들어 사용자 정의 Ingress 컨트롤러 또는 OpenShift 게이트웨이 API와 함께 리스너를 사용할 수 있습니다.

토큰 기반 인증에 OAuth 2.0을 사용하는 경우 권한 부여 서버를 사용하도록 리스너를 구성할 수 있습니다.

Rack 인식
Racks는 데이터 센터 또는 데이터 센터 또는 가용 영역의 랙을 나타냅니다. 랙에 Kafka 브로커 Pod 및 주제 복제본을 배포하도록 랙을 구성합니다. rack 속성을 사용하여 rack 인식 기능을 활성화하여 topologyKey 를 지정할 수 있습니다. topologyKey 는 랙을 식별하는 OpenShift 작업자 노드에 할당된 라벨의 이름입니다. AMQ Streams는 각 Kafka 브로커에 랙 ID를 할당합니다. Kafka 브로커는 ID를 사용하여 랙에 파티션 복제본을 분배합니다. 또한 랙 인식과 함께 사용할 RackAwareReplicaSelector 플러그인을 지정할 수도 있습니다. 플러그인은 브로커와 소비자의 랙 ID와 일치하므로 가장 가까운 복제본에서 메시지가 소비됩니다. 플러그인을 사용하려면 소비자도 랙 인식 기능을 활성화해야합니다. Kafka Connect, MirrorMaker 2.0 및 Kafka Bridge에서 랙 인식 기능을 활성화할 수 있습니다.

Kafka 구성을 표시하는 YAML의 예

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    listeners:
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external1
        port: 9094
        type: route
        tls: true
        authentication:
          type: tls
    # ...
    storage:
      type: persistent-claim
      size: 10000Gi
    # ...
    rack:
      topologyKey: topology.kubernetes.io/zone
    config:
      replica.selector.class: org.apache.kafka.common.replica.RackAwareReplicaSelector
    # ...