25.7. Zoo Cryostat를 사용할 때 Kafka 업그레이드
Zoo Cryostat 기반 Kafka 클러스터를 사용하는 경우 업그레이드하려면 Kafka 버전과 브랜드 간 프로토콜 버전을 업데이트해야 합니다.
KRaft 모드에서 메타데이터 관리를 위해 Zoo Cryostat를 사용하여 Kafka 클러스터를 전환하려면 업그레이드와 별도로 단계를 수행해야 합니다. KRaft 기반 클러스터로 마이그레이션하는 방법에 대한 자세한 내용은 8장. KRaft 모드로 마이그레이션 을 참조하십시오.
25.7.1. Kafka 버전 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리를 위해 Zoo Cryostat를 사용할 때 Kafka 를 업그레이드하려면 Kafka 리소스 구성에서 Kafka 버전(Kafka.spec.kafka.version)과 브랜드 간 프로토콜 버전(inter.broker.protocol.version)을 업데이트해야 합니다. Kafka의 각 버전에는 해석 간 프로토콜의 호환 버전이 있습니다. broker 간 프로토콜은 브루커 간 통신에 사용됩니다. 프로토콜의 마이너 버전은 일반적으로 이전 표에 표시된 대로 Kafka의 마이너 버전과 일치하도록 증가합니다. broker 프로토콜 버전은 Kafka 리소스에서 클러스터 전체로 설정됩니다. 이를 변경하려면 Kafka.spec.kafka.config 에서 inter.broker.protocol.version 속성을 편집합니다.
다음 표는 Kafka 버전의 차이점을 보여줍니다.
| Apache Kafka 버전용 스트림 | Kafka 버전 | broker 프로토콜 버전 | 로그 메시지 형식 버전 | Zookeeper 버전 |
|---|---|---|---|---|
| 2.7 | 3.7.0 | 3.7 | 3.7 | 3.8.3 |
| 2.6 | 3.6.0 | 3.6 | 3.6 | 3.8.3 |
- Kafka 3.7.0은 프로덕션 용도로 지원됩니다.
- Kafka 3.6.0은 Apache Kafka 2.7용 Streams로 업그레이드하기 위한 목적으로만 지원됩니다.
로그 메시지 형식 버전
생산자가 Kafka 브로커에 메시지를 보내면 메시지는 특정 형식을 사용하여 인코딩됩니다. 형식은 Kafka 릴리스 간에 변경될 수 있으므로 메시지는 인코딩된 메시지 형식의 버전을 지정합니다.
특정 메시지 형식 버전을 설정하는 데 사용되는 속성은 다음과 같습니다.
-
주제의
message.format.version속성 -
Kafka 브로커의
log.message.format.version속성
Kafka 3.0.0에서 메시지 형식 버전 값은 inter.broker.protocol.version 과 일치하도록 가정되며 설정할 필요가 없습니다. 값은 사용된 Kafka 버전을 반영합니다.
Kafka 3.0.0 이상으로 업그레이드할 때 inter.broker.protocol.version 을 업데이트할 때 이러한 설정을 제거할 수 있습니다. 그러지 않으면 업그레이드할 Kafka 버전에 따라 메시지 형식 버전을 설정할 수 있습니다.
항목에 대한 message.format.version 의 기본값은 Kafka 브로커에 설정된 log.message.format.version 에 의해 정의됩니다. 주제 구성을 수정하여 주제의 message.format.version 을 수동으로 설정할 수 있습니다.
Kafka 버전 변경에서 롤링 업데이트
Kafka 버전이 업데이트되면 Cluster Operator가 Kafka 브로커에 대한 롤링 업데이트를 시작합니다. 추가 롤링 업데이트는 inter.broker.protocol.version 및 log.message.format.version 에 대한 구성에 따라 달라집니다.
Kafka.spec.kafka.config 에…이 포함된 경우 | Cluster Operator가…을 시작합니다. |
|---|---|
|
|
단일 롤링 업데이트. 업데이트 후 |
|
| 두 개의 롤링 업데이트 |
|
| 두 개의 롤링 업데이트 |
Kafka 3.0.0에서 inter.broker.protocol.version 이 3.0 이상으로 설정되면 log.message.format.version 옵션이 무시되고 설정할 필요가 없습니다. 브로커의 log.message.format.version 속성 및 주제의 message.format.version 속성은 더 이상 사용되지 않으며 Kafka의 향후 릴리스에서 제거됩니다.
Kafka 업그레이드의 일부로 Cluster Operator는 Zoo Cryostat에 대한 롤링 업데이트를 시작합니다.
- 단일 롤링 업데이트는 Zoo Cryostat 버전이 변경되지 않은 경우에도 발생합니다.
- 추가 롤링 업데이트는 Kafka의 새 버전에 새 Zoo Cryostat 버전이 필요한 경우 발생합니다.
25.7.2. 이전 메시지 형식으로 클라이언트 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 3.0 이전에는 log.message.format.version 속성(또는 주제 수준의 message.format.version 속성)을 사용하여 브로커에 대한 특정 메시지 형식을 구성할 수 있습니다. 이로 인해 브로커는 오래된 메시지 형식을 사용하는 이전 Kafka 클라이언트를 수용할 수 있었습니다. Kafka는 이 속성을 명시적으로 설정하지 않고 이전 클라이언트를 고유하게 지원하지만 브로커는 상당한 성능 비용과 함께 이전 클라이언트에서 메시지를 변환해야 합니다.
Apache Kafka Java 클라이언트는 버전 0.11 이후 최신 메시지 형식 버전을 지원했습니다. 모든 클라이언트가 최신 메시지 버전을 사용하는 경우 브로커를 업그레이드할 때 log.message.format.version 또는 message.format.version 덮어쓰기를 제거할 수 있습니다.
그러나 이전 메시지 형식 버전을 사용하는 클라이언트가 여전히 있는 경우 먼저 클라이언트를 업그레이드하는 것이 좋습니다. 소비자와 함께 시작한 다음 브로커를 업그레이드할 때 log.message.format.version 또는 message.format.version 을 제거하기 전에 생산자를 업그레이드합니다. 이렇게 하면 모든 클라이언트가 최신 메시지 형식 버전을 지원할 수 있으며 업그레이드 프로세스가 원활하게 진행됩니다.
이 메트릭을 사용하여 Kafka 클라이언트 이름 및 버전을 추적할 수 있습니다.
-
Kafka.server:type=socket-server-metrics,clientSoftwareName=<name>,clientSoftwareVersion=<version>,listener=<listener>,networkProcessor=<processor>
다음 Kafka 브로커 메트릭은 메시지 down-conversion의 성능을 모니터링하는 데 도움이 됩니다.
-
Kafka
.network:type=RequestMetrics,name=MessageConversionsTimeMs,request={Produce|Fetch}는 메시지 변환을 수행하는 데 걸리는 시간에 대한 메트릭을 제공합니다. -
Kafka
.server:type=BrokerTopicMetrics,name={Produce|Fetch}MessageConversionsPerSec,topic=([.\w]+)은 일정 기간 동안 변환된 메시지 수에 대한 메트릭을 제공합니다.
25.7.3. Zoo Cryostat 기반 Kafka 클러스터 및 클라이언트 애플리케이션 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
지원되는 최신 Kafka 버전 및 브랜드 간 프로토콜 버전으로 Apache Kafka 클러스터의 Zoo Cryostat 기반 Streams를 업그레이드합니다.
또한 클라이언트 업그레이드 전략을 선택해야 합니다. Kafka 클라이언트는 이 절차의 6단계에서 업그레이드됩니다.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
-
Apache Kafka 클러스터의 Streams를 업그레이드하기 전에 Kafka 리소스의 속성에 새
Kafka버전에서 지원되지 않는 구성 옵션이 포함되어 있지 않은지 확인합니다.
프로세스
Kafka 클러스터 구성을 업데이트합니다.
oc edit kafka <kafka_configuration_file>
oc edit kafka <kafka_configuration_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 구성된 경우
inter.broker.protocol.version및log.message.format.version속성이 현재 버전으로 설정되어 있는지 확인합니다.예를 들어 Kafka 버전 3.6.0에서 3.7.0으로 업그레이드하는 경우 현재 버전은 3.6입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow log.message.format.version및inter.broker.protocol.version이 구성되지 않은 경우 Apache Kafka의 Streams는 다음 단계에서 Kafka 버전으로 업데이트한 후 이러한 버전을 현재 기본값으로 자동으로 업데이트합니다.참고log.message.format.version및inter.broker.protocol.version의 값은 부동 소수점 숫자로 해석되지 않도록 문자열이어야 합니다.Kafka.spec.kafka.version을 변경하여 새 Kafka 버전을 지정하고, 현재 Kafka 버전의 기본값으로log.message.format.version및inter.broker.protocol.version을 남겨 둡니다.참고kafka.version을 변경하면 클러스터의 모든 브로커가 새 브로커 바이너리를 사용하도록 업그레이드됩니다. 이 프로세스 중에 일부 브로커는 이전 바이너리를 사용하고 있지만 다른 브로커는 이미 새 바이너리로 업그레이드했습니다. 현재 설정에서inter.broker.protocol.version을 변경하지 않으면 브로커가 업그레이드 중에 계속 서로 통신할 수 있습니다.예를 들어 Kafka 3.6.0에서 3.7.0으로 업그레이드하는 경우 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의새 Kafka 버전의
inter.broker.protocol.version이 변경되면 Kafka를 다운그레이드할 수 없습니다. inter-broker 프로토콜 버전은__consumer_offsets에 기록된 메시지를 포함하여 브로커가 저장한 영구 메타데이터에 사용되는 스키마를 결정합니다. 다운그레이드된 클러스터는 메시지를 이해할 수 없습니다.Kafka 클러스터의 이미지가 Kafka 사용자 정의 리소스의
Kafka.spec.kafka.에 정의된 경우 새imageKafka버전이 있는 컨테이너 이미지를 가리키도록 이미지를 업데이트합니다.Kafka 버전 및 이미지 매핑을 참조하십시오.
편집기를 저장하고 종료한 다음 롤링 업데이트가 완료될 때까지 기다립니다.
Pod 상태 전환을 확인하여 롤링 업데이트의 진행 상황을 확인합니다.
oc get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'oc get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 롤링 업데이트를 통해 각 pod가 새 Kafka 버전에 브로커 바이너리를 사용하고 있는지 확인합니다.
클라이언트를 업그레이드하기 위한 선택한 전략에 따라 모든 클라이언트 애플리케이션을 업그레이드하여 새 버전의 클라이언트 바이너리를 사용합니다.
필요한 경우 Kafka Connect 및 MirrorMaker의
버전속성을 Kafka의 새 버전으로 설정합니다.-
Kafka Connect의 경우
KafkaConnect.spec.version을 업데이트합니다. -
MirrorMaker의 경우
KafkaMirrorMaker.spec.version을 업데이트합니다. MirrorMaker 2의 경우
KafkaMirrorMaker2.spec.version을 업데이트합니다.참고수동으로 빌드된 사용자 지정 이미지를 사용하는 경우 해당 이미지를 다시 빌드하여 Apache Kafka 기본 이미지의 최신 스트림으로 최신 이미지인지 확인해야 합니다. 예를 들어 기본 Kafka Connect 이미지에서 컨테이너 이미지를 생성한 경우 최신 기본 이미지 및 빌드 구성을 가리키도록 Dockerfile을 업데이트합니다.
-
Kafka Connect의 경우
- 업그레이드된 클라이언트 애플리케이션이 새 Kafka 브로커에서 올바르게 작동하는지 확인합니다.
구성된 경우 새
inter.broker.protocol.version버전을 사용하도록 Kafka 리소스를 업데이트합니다. 그렇지 않으면 9단계로 이동합니다.예를 들어 Kafka 3.7.0으로 업그레이드하는 경우 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Cluster Operator가 클러스터를 업데이트할 때까지 기다립니다.
구성된 경우 새
log.message.format.version버전을 사용하도록 Kafka 리소스를 업데이트합니다. 그렇지 않으면 10 단계로 이동합니다.예를 들어 Kafka 3.7.0으로 업그레이드하는 경우 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요Kafka 3.0.0에서
inter.broker.protocol.version이3.0이상으로 설정되면log.message.format.version옵션이 무시되고 설정할 필요가 없습니다.Cluster Operator가 클러스터를 업데이트할 때까지 기다립니다.