4장. KRaft 모드로 마이그레이션


Kafka 클러스터의 메타데이터 관리에 Zoo Cryostat를 사용하는 경우 KRaft 모드에서 Kafka를 사용하여 마이그레이션할 수 있습니다. Kraft 모드는 분산 조정을 위해 Zoo Cryostat를 대체하여 향상된 안정성, 확장성 및 처리량을 제공합니다.

마이그레이션 중에 클러스터 관리를 위해 Zoo Cryostat를 대체하는 컨트롤러 노드의 쿼럼을 설치합니다. Zookeeper .metadata.migration.enable 속성을 true 로 설정하여 컨트롤러 구성에서 KRaft 마이그레이션을 활성화합니다. 컨트롤러가 시작되면 동일한 구성 속성을 사용하여 현재 클러스터 브로커에서 KRaft 마이그레이션을 활성화합니다. 마이그레이션이 완료되면 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
    Copy to Clipboard Toggle word wrap

프로세스

  1. Kafka 클러스터의 클러스터 ID를 검색합니다.

    Zookeeper -shell 도구를 사용하여 이 작업을 수행할 수 있습니다.

    /opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /cluster/id
    Copy to Clipboard Toggle word wrap

    명령은 클러스터 ID를 반환합니다.

  2. KRaft 컨트롤러 쿼럼을 클러스터에 설치합니다.

    1. controller.properties 파일을 사용하여 각 호스트에서 컨트롤러 노드를 구성합니다.

      최소한 각 컨트롤러에는 다음 구성이 필요합니다.

      • 고유 노드 ID
      • migration enabled 플래그를 true로 설정
      • Zookeeper 연결 세부 정보
      • 컨트롤러 리스너
      • 컨트롤러의 쿼럼

        컨트롤러 구성 예

        process.roles=controller
        node.id=1
        
        zookeeper.metadata.migration.enable=true
        zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181
        
        listeners=CONTROLLER://0.0.0.0:9090
        controller.listener.names=CONTROLLER
        listener.security.protocol.map=CONTROLLER:PLAINTEXT
        controller.quorum.voters=1@localhost:9090
        Copy to Clipboard Toggle word wrap

        컨트롤러 쿼럼 형식은 쉼표로 구분된 목록으로 < node_id>@<hostname>:<port >입니다.

    2. 각 컨트롤러 노드에 대한 로그 디렉터리를 설정합니다.

      /opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/controller.properties
      Copy to Clipboard Toggle word wrap

      반환:

      Formatting /tmp/kraft-controller-logs
      Copy to Clipboard Toggle word wrap

      <uuid>를 검색한 클러스터 ID로 바꿉니다. 클러스터의 각 컨트롤러 노드에 동일한 클러스터 ID를 사용합니다.

      컨트롤러에 대해 구성한 속성 파일을 사용하여 컨트롤러 구성을 적용합니다.

      기본적으로 controller.properties 구성 파일에 지정된 로그 디렉터리(log.dirs)는 /tmp/kraft-controller-logs 로 설정됩니다. 일반적으로 /tmp 디렉터리는 시스템 재부팅마다 지워지므로 개발 환경에만 적합합니다.

      쉼표로 구분된 목록을 추가하여 여러 로그 디렉터리를 설정할 수 있습니다.

    3. 각 컨트롤러를 시작합니다.

      /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/controller.properties
      Copy to Clipboard Toggle word wrap
    4. Kafka가 실행 중인지 확인합니다.

      jcmd | grep kafka
      Copy to Clipboard Toggle word wrap

      반환:

      process ID kafka.Kafka /opt/kafka/config/kraft/controller.properties
      Copy to Clipboard Toggle word wrap

      각 컨트롤러의 로그를 확인하여 KRaft 클러스터에 성공적으로 참여했는지 확인합니다.

      tail -f /opt/kafka/logs/controller.log
      Copy to Clipboard Toggle word wrap
  3. 각 브로커에서 마이그레이션을 활성화합니다.

    1. 실행 중인 경우 호스트에서 실행되는 Kafka 브로커를 중지합니다.

      /opt/kafka/bin/kafka-server-stop.sh
      jcmd | grep kafka
      Copy to Clipboard Toggle word wrap

      다중 노드 클러스터에서 Kafka를 실행하는 경우 3.6절. “Kafka 브로커의 정상 롤링 재시작 수행” 을 참조하십시오.

    2. server.properties 파일을 사용하여 마이그레이션을 활성화합니다.

      최소한 각 브로커는 다음과 같은 추가 구성이 필요합니다.

      • 버전 3.5로 설정된 inter-broker 프로토콜 버전입니다.
      • migration enabled 플래그
      • 컨트롤러 리스너
      • 컨트롤러의 쿼럼

      브로커 구성 예

      broker.id=0
      inter.broker.protocol.version=3.5
      
      zookeeper.metadata.migration.enable=true
      zookeeper.connect=zoo1.my-domain.com:2181,zoo2.my-domain.com:2181,zoo3.my-domain.com:2181
      
      listeners=CONTROLLER://0.0.0.0:9090
      controller.listener.names=CONTROLLER
      listener.security.protocol.map=CONTROLLER:PLAINTEXT
      controller.quorum.voters=1@localhost:9090
      Copy to Clipboard Toggle word wrap

      Zoo Cryostat 연결 세부 정보가 이미 있어야 합니다. 브로커의 컨트롤러 구성은 컨트롤러와 동일합니다.

    3. 업데이트된 브로커를 다시 시작합니다.

      /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
      Copy to Clipboard Toggle word wrap

      마이그레이션이 자동으로 시작되고 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

    4. Kafka가 실행 중인지 확인합니다.

      jcmd | grep kafka
      Copy to Clipboard Toggle word wrap

      반환:

      process ID kafka.Kafka /opt/kafka/config/kraft/server.properties
      Copy to Clipboard Toggle word wrap
  4. 활성 컨트롤러의 로그를 확인하여 마이그레이션이 완료되었는지 확인합니다.

    /opt/kafka/bin/zookeeper-shell.sh localhost:2181 get /controller
    Copy to Clipboard Toggle word wrap

    다음과 같은 INFO 로그 항목을 찾습니다. Zoo Cryostat 에서 KRaft로 메타데이터의 마이그레이션 완료.

  5. 각 브로커를 KRaft 모드에서 실행되도록 전환합니다.

    1. 이전과 같이 브로커를 중지합니다.
    2. server.properties 파일에서 브로커 구성을 업데이트합니다.

      • 동일한 ID를 사용하여 broker.idnode.id 로 바꿉니다.
      • 브로커에 대한 브로커 KRaft 역할 추가
      • broker 프로토콜 버전 (inter.broker.protocol.version) 제거
      • migration enabled 플래그 제거( Zookeeper.metadata.migration.enable)
      • Zoo Cryostat 구성 제거

      KRaft의 브로커 구성 예

      node.id=0
      process.roles=broker
      
      listeners=CONTROLLER://0.0.0.0:9090
      controller.listener.names=CONTROLLER
      listener.security.protocol.map=CONTROLLER:PLAINTEXT
      controller.quorum.voters=1@localhost:9090
      Copy to Clipboard Toggle word wrap

    3. 브로커 구성에서 ACLS를 사용하는 경우 authorizer.class.name 속성을 사용하여 승인자를 KRaft 기반 표준 승인자로 업데이트합니다.

      Zookeeper 기반 브로커는 authorizer.class.name=kafka.security.authorizer.AclAuthorizer 를 사용합니다.

      KRaft 기반 브로커로 마이그레이션하는 경우 authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer 를 지정합니다.

    4. 이전과 같이 브로커를 다시 시작합니다.
  6. 각 컨트롤러를 마이그레이션 모드에서 전환합니다.

    1. 이전과 같이 컨트롤러를 중지합니다.
    2. controller.properties 파일에서 zookeeper.metadata.migration.enable 속성을 제거합니다.
    3. 이전과 같이 컨트롤러를 다시 시작합니다.

      마이그레이션 후 컨트롤러 구성의 예

      process.roles=controller
      node.id=1
      
      listeners=CONTROLLER://0.0.0.0:9090
      controller.listener.names=CONTROLLER
      listener.security.protocol.map=CONTROLLER:PLAINTEXT
      controller.quorum.voters=1@localhost:9090
      Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat