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를 노출합니다.-
OpenShift
경로및 기본 HAProxy 라우터를 사용하는 경로 -
LoadBalancer를 사용하여 로드 밸런서 서비스를 사용 -
OpenShift
노드에서 포트를사용하는 NodePort -
OpenShift Ingress 및 Kubernetes용 Ingress NGINX Controller를 사용하기 위한Ingress
참고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
# ...