4장. KRaft 모드로 마이그레이션
Kafka 클러스터의 메타데이터 관리에 Zoo Cryostat를 사용하는 경우 KRaft 모드에서 Kafka를 사용하여 마이그레이션할 수 있습니다. Kraft 모드는 분산 조정을 위해 Zoo Cryostat를 대체하여 향상된 안정성, 확장성 및 처리량을 제공합니다.
마이그레이션 중에 클러스터 관리를 위해 Zoo Cryostat를 대체하는 컨트롤러 노드의 쿼럼을 설치합니다. Zookeeper .metadata.migration.enable 속성을 컨트롤러가 시작되면 동일한 구성 속성을 사용하여 현재 클러스터 브로커에서 KRaft 마이그레이션을 활성화합니다. 마이그레이션이 완료되면 KRaft 및 컨트롤러가 마이그레이션 모드 외부에서 사용하도록 브로커를 전환합니다.
true 로 설정하여 컨트롤러 구성에서 KRaft 마이그레이션을 활성화합니다.
마이그레이션을 시작하기 전에 KRaft 모드에서 Kafka를 지원할 수 있는지 확인합니다. KRaft는 여러 디스크가 있는 JBOD 스토리지를 지원하지 않습니다.
사전 요구 사항
-
kafka사용자로 Red Hat Enterprise Linux에 로그인되어 있습니다. - Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Kafka 3.7.0 이상에서는 Apache Kafka 2.7 이상용 Streams를 사용해야 합니다. 이전 버전의 Apache Kafka를 사용하는 경우 KRaft 모드로 마이그레이션하기 전에 업그레이드합니다.
마이그레이션 프로세스를 확인하기 위해 로깅이 활성화됩니다.
클러스터의 컨트롤러 및 브로커의 루트 로거에 대해
log4j.properties에서DEBUG수준을 설정하는 것이 유용합니다. 마이그레이션 관련 컨트롤러 로거의 경우TRACE를 설정합니다.컨트롤러 로깅 구성
log4j.rootLogger=DEBUG log4j.logger.org.apache.kafka.metadata.migration=TRACE
log4j.rootLogger=DEBUG log4j.logger.org.apache.kafka.metadata.migration=TRACECopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
Kafka 클러스터의 클러스터 ID를 검색합니다.
Zookeeper
-shell 도구를 사용하여이 작업을 수행할 수 있습니다./opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /cluster/id
/opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /cluster/idCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 클러스터 ID를 반환합니다.
KRaft 컨트롤러 쿼럼을 클러스터에 설치합니다.
controller.properties파일을 사용하여 각 호스트에서 컨트롤러 노드를 구성합니다.최소한 각 컨트롤러에는 다음 구성이 필요합니다.
- 고유 노드 ID
-
migration enabled 플래그를
true로 설정 - Zookeeper 연결 세부 정보
- 컨트롤러 리스너
컨트롤러의 쿼럼
컨트롤러 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨트롤러 쿼럼 형식은 쉼표로 구분된 목록으로 <
node_id>@<hostname>:<port>입니다.
각 컨트롤러 노드에 대한 로그 디렉터리를 설정합니다.
/opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/controller.properties
/opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/controller.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
Formatting /tmp/kraft-controller-logs
Formatting /tmp/kraft-controller-logsCopy to Clipboard Copied! Toggle word wrap Toggle overflow <uuid>를 검색한 클러스터 ID로 바꿉니다. 클러스터의 각 컨트롤러 노드에 동일한 클러스터 ID를 사용합니다.
컨트롤러에 대해 구성한 속성 파일을 사용하여 컨트롤러 구성을 적용합니다.
기본적으로
controller.properties구성 파일에 지정된 로그 디렉터리(log.dirs)는/tmp/kraft-controller-logs로 설정됩니다. 일반적으로/tmp디렉터리는 시스템 재부팅마다 지워지므로 개발 환경에만 적합합니다.쉼표로 구분된 목록을 추가하여 여러 로그 디렉터리를 설정할 수 있습니다.
각 컨트롤러를 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/controller.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/controller.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
process ID kafka.Kafka /opt/kafka/config/kraft/controller.properties
process ID kafka.Kafka /opt/kafka/config/kraft/controller.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 각 컨트롤러의 로그를 확인하여 KRaft 클러스터에 성공적으로 참여했는지 확인합니다.
tail -f /opt/kafka/logs/controller.log
tail -f /opt/kafka/logs/controller.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
각 브로커에서 마이그레이션을 활성화합니다.
실행 중인 경우 호스트에서 실행되는 Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh jcmd | grep kafka
/opt/kafka/bin/kafka-server-stop.sh jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다중 노드 클러스터에서 Kafka를 실행하는 경우 3.6절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.
server.properties파일을 사용하여 마이그레이션을 활성화합니다.최소한 각 브로커는 다음과 같은 추가 구성이 필요합니다.
- 버전 3.5로 설정된 inter-broker 프로토콜 버전입니다.
- migration enabled 플래그
- 컨트롤러 리스너
- 컨트롤러의 쿼럼
브로커 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Zoo Cryostat 연결 세부 정보가 이미 있어야 합니다. 브로커의 컨트롤러 구성은 컨트롤러와 동일합니다.
업데이트된 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 마이그레이션이 자동으로 시작되고 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.
Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 반환:
process ID kafka.Kafka /opt/kafka/config/kraft/server.properties
process ID kafka.Kafka /opt/kafka/config/kraft/server.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
활성 컨트롤러의 로그를 확인하여 마이그레이션이 완료되었는지 확인합니다.
/opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /controller
/opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같은
INFO로그 항목을 찾습니다. Zoo Cryostat에서 KRaft로 메타데이터의 마이그레이션 완료.각 브로커를 KRaft 모드에서 실행되도록 전환합니다.
- 이전과 같이 브로커를 중지합니다.
server.properties파일에서 브로커 구성을 업데이트합니다.-
동일한 ID를 사용하여
broker.id를node.id로 바꿉니다. -
브로커에 대한 브로커KRaft 역할 추가 -
broker 프로토콜 버전 (
inter.broker.protocol.version) 제거 -
migration enabled 플래그 제거( Zookeeper
.metadata.migration.enable) - Zoo Cryostat 구성 제거
KRaft의 브로커 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
동일한 ID를 사용하여
브로커 구성에서 ACLS를 사용하는 경우
authorizer.class.name속성을 사용하여 승인자를 KRaft 기반 표준 승인자로 업데이트합니다.Zookeeper 기반 브로커는
authorizer.class.name=kafka.security.authorizer.AclAuthorizer를 사용합니다.KRaft 기반 브로커로 마이그레이션하는 경우
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer를 지정합니다.- 이전과 같이 브로커를 다시 시작합니다.
각 컨트롤러를 마이그레이션 모드에서 전환합니다.
- 이전과 같이 컨트롤러를 중지합니다.
-
controller.properties파일에서zookeeper.metadata.migration.enable속성을 제거합니다. 이전과 같이 컨트롤러를 다시 시작합니다.
마이그레이션 후 컨트롤러 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow