3.3. Kafka 브로커의 정상 롤링 재시작 수행
다음 절차에서는 다중 노드 클러스터에서 브로커를 정상적으로 다시 시작하는 방법을 보여줍니다. 일반적으로 Kafka 클러스터 구성 속성을 업그레이드하거나 변경하는 경우 롤링 재시작이 필요합니다.
일부 브로커 구성은 브로커를 다시 시작할 필요가 없습니다. 자세한 내용은 Apache Kafka 문서 의 브로커 구성 업데이트를 참조하십시오.
브로커를 다시 시작한 후 비복제된 주제 파티션을 확인하여 복제본 파티션이 감지되었는지 확인합니다.
주제를 복제하고 하나 이상의 복제본이 동기화되도록 하는 경우에만 가용성 손실 없이 정상 재시작을 수행할 수 있습니다. 다중 노드 클러스터의 경우 표준 접근 방식에서는 3개 이상의 주제 복제 인수와 최소 3개의 in-sync 복제본 수가 복제 요소보다 1개로 설정된 것입니다. 데이터 지속성을 위해 생산자 구성에서 acks=all
을 사용하는 경우 다음 브로커를 다시 시작하기 전에 재시작한 모든 파티션과 동기화되어 있는지 확인합니다.
모든 파티션이 동일한 브로커에 있으므로 다시 시작하는 동안 단일 노드 클러스터를 사용할 수 없습니다.
사전 요구 사항
- AMQ Streams는 Kafka 브로커로 사용할 모든 호스트에 설치됩니다.
- Zoo Cryostat 클러스터가 구성되어 실행 중입니다.
Kafka 클러스터가 예상대로 작동하고 있습니다.
복제되지 않은 파티션 또는 브로커 작업에 영향을 미치는 기타 문제를 확인합니다. 이 절차의 단계에서는 복제되지 않은 파티션을 확인하는 방법을 설명합니다.
프로세스
각 Kafka 브로커에서 다음 단계를 수행합니다. 다음 단계로 이동하기 전에 첫 번째 브로커의 단계를 완료합니다. 활성 컨트롤러의 마지막 단계를 브로커에서 수행합니다. 그러지 않으면 재시작 시 활성 컨트롤러를 여러 번 변경해야 합니다.
Kafka 브로커를 중지합니다.
/opt/kafka/bin/kafka-server-stop.sh
완료 후 재시작해야 하는 브로커 구성을 변경합니다.
자세한 내용은 다음을 참조하십시오.
Kafka 브로커를 다시 시작합니다.
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Kafka가 실행 중인지 확인합니다.
jcmd | grep kafka
반환:
number kafka.Kafka /opt/kafka/config/server.properties
ncat
유틸리티를 사용하여dump
명령을 Zoo Cryostat 노드 중 하나로 전송하여 모든 노드가 Kafka 클러스터의 멤버인지 확인합니다.ncat 덤프를 사용하여 Zoo Cryostat에 등록된 모든 Kafka 브로커를 확인합니다.
echo dump | ncat zoo1.my-domain.com 2181
dump
와 같은 4자 단어 명령을 사용하려면zookeeper.properties
에서4lw.commands.whitelist=*
를 지정해야 합니다.출력에 시작한 Kafka 브로커가 포함되어야 합니다.
3개의 노드가 있는 Kafka 클러스터의 ncat 명령의 출력 예
SessionTracker dump: org.apache.zookeeper.server.quorum.LearnerSessionTracker@28848ab9 ephemeral nodes dump: Sessions with Ephemerals (3): 0x20000015dd00000: /brokers/ids/1 0x10000015dc70000: /controller /brokers/ids/0 0x10000015dc70001: /brokers/ids/2
브로커의 파티션이 0이 될 때까지 기다립니다. 명령줄에서 확인하거나 메트릭을 사용할 수 있습니다.
--under-replicated-partitions
매개변수와 함께kafka-topics.sh
명령을 사용합니다./opt/kafka/bin/kafka-topics.sh --bootstrap-server <bootstrap_address> --describe --under-replicated-partitions
예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
명령은 클러스터에 복제되지 않은 파티션이 포함된 주제 목록을 제공합니다.
복제되지 않은 파티션의 주제
Topic: topic3 Partition: 4 Leader: 2 Replicas: 2,3 Isr: 2 Topic: topic3 Partition: 5 Leader: 3 Replicas: 1,2 Isr: 1 Topic: topic1 Partition: 1 Leader: 3 Replicas: 1,3 Isr: 3 # …
ISR(동기화 복제본) 수가 복제본 수보다 작으면 복제 아래에 있는 파티션이 나열됩니다. 목록이 반환되지 않으면 복제되지 않은 파티션이 없습니다.
UnderReplicated Cryostats 메트릭을
사용합니다.kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
지표는 복제본이 캡처되지 않은 파티션 수를 제공합니다. count가 0이 될 때까지 기다립니다.
작은 정보주제의 복제본이 하나 이상 있는 경우 Kafka Exporter 를 사용하여 경고를 생성합니다.
다시 시작할 때 로그 확인
브로커가 시작되지 않으면 애플리케이션 로그에 정보가 있는지 확인합니다. 브로커 종료 상태를 확인하고 /opt/kafka/logs/server.log
애플리케이션 로그에서 다시 시작할 수도 있습니다.
브로커의 성공적인 종료를 위해 로그
# ... [2022-06-08 14:32:29,885] INFO Terminating process due to signal SIGTERM (org.apache.kafka.common.utils.LoggingSignalHandler) [2022-06-08 14:32:29,886] INFO [KafkaServer id=0] shutting down (kafka.server.KafkaServer) [2022-06-08 14:32:29,887] INFO [KafkaServer id=0] Starting controlled shutdown (kafka.server.KafkaServer) [2022-06-08 14:32:29,896] INFO [KafkaServer id=0] Controlled shutdown request returned successfully after 6ms (kafka.server.KafkaServer) # ...
브로커를 성공적으로 재시작하기 위해 로그
# ... [2022-06-08 14:39:35,245] INFO [KafkaServer id=0] started (kafka.server.KafkaServer) # ...