3.11. 가용성에 대한 파티션 재조정

내결함성을 위해 브로커 전체에 파티션을 복제할 수 있습니다. 지정된 파티션에 대해 하나의 브로커가 리더로 선택되고 모든 생성 요청(로그에 쓰기)을 처리합니다. 다른 브로커의 파티션 추적은 리더가 실패하는 경우 데이터 안정성을 위해 파티션 리더의 파티션 데이터를 복제합니다.

구성은 일반적으로 클라이언트에 서비스를 제공하지 않지만 Kafka 클러스터가 여러 데이터 센터에 걸쳐 있을 때 가장 가까운 복제본에서 메시지를 사용할 수 있습니다. 후자는 파티션 리더의 메시지를 복제하고 리더가 실패하는 경우 복구를 허용하기 위해서만 작동합니다. 복구하려면 동기화 후속 조치가 필요합니다. 자존심은 가져오기 요청을 리더에게 보내어 동기화 상태를 유지하며, 이는 후속자에게 메시지를 순서대로 반환합니다. 후속 기능은 리더에서 가장 최근에 커밋된 메시지와 함께 탐지된 경우 동기화된 것으로 간주됩니다. 리더는 후자가 요청한 마지막 오프셋을 확인하여 이를 확인합니다. 불명확한 리더 선택을 허용하지 않는 한 일반적으로 동기화 외부 후속자는 리더에서 현재 리더로 실패할 수 없습니다.

후속자가 동기화되지 않은 것으로 간주되기 전에 지연 시간을 조정할 수 있습니다.

# ...
replica.lag.time.max.ms=30000
# ...

지연 시간은 모든 동기화 복제본에 메시지를 복제하는 시간과 프로듀서가 승인을 기다려야하는 시간을 초과합니다. 후속자가 가져오기 요청을 작성하고 지정된 지연 시간 내에 최신 메시지를 포착하지 못하면 동기화 내 복제본에서 제거됩니다. 실패한 복제본을 더 빨리 감지하는 지연 시간을 줄일 수 있지만 이렇게 하면 필요에 따라 동기화되지 않는 구직 횟수를 늘릴 수 있습니다. 적절한 지연 시간 값은 네트워크 대기 시간과 브로커 디스크 대역폭 모두에 따라 달라집니다.

리더 파티션을 더 이상 사용할 수 없는 경우 동기화 중 복제본 중 하나가 새 리더로 선택됩니다. 파티션의 복제본 목록에 있는 첫 번째 브로커를 기본 리더라고 합니다. 기본적으로 Kafka는 리더 배포의 주기적인 검사를 기반으로 자동 파티션 리더 재조정이 활성화됩니다. 즉 Kafka는 기본 리더가 현재 리더인지 확인합니다. 리밸런스를 통해 리더는 브로커와 브로커에 균등하게 분배되지 않습니다.

AMQ Streams에 대한 Cruise Control for AMQ Streams를 사용하여 클러스터 전체에서 부하를 균등하게 균형을 조정하는 브로커에 복제본 할당을 확인할 수 있습니다. 그 계산은 리더와 팔로워가 경험하는 다양한 부하를 고려합니다. 나머지 브로커는 선행 추가 파티션의 추가 작업을 받기 때문에 실패한 리더는 Kafka 클러스터의 균형에 영향을 미칩니다.

Cruise Control가 실제로 찾은 할당의 균형을 조정하려면 파티션이 기본 리더에 의해 주도되어야 합니다. Kafka는 기본 리더가 사용 중인지 자동으로 확인하고 필요한 경우 현재 리더를 변경할 수 있습니다. 이렇게 하면 클러스터가 Cruise Control에서 찾은 균형 있는 상태로 유지됩니다.

리밸런스 검사의 빈도(초)와 리밸런스가 트리거되기 전에 브로커에 허용되는 최대 불균형 비율을 제어할 수 있습니다.

#...
auto.leader.rebalance.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
#...

브로커의 백분율 리더 불균형은 브로커가 현재 리더인 파티션 수와 기본 리더인 파티션 수 간의 비율입니다. 백분율을 0으로 설정하여 선호하는 리더가 항상 선택되도록 할 수 있습니다.

검사에서 리밸런스에 더 많은 제어가 필요한 경우 자동화된 리밸런스를 비활성화할 수 있습니다. 그런 다음 kafka-leader-election.sh 명령줄 도구를 사용하여 리밸런스를 트리거할 시기를 선택할 수 있습니다.

참고

AMQ Streams와 함께 제공되는 Grafana 대시보드에는 활성 리더가 없는 복제 대상 파티션 및 파티션에 대한 메트릭이 표시됩니다.