어떤 토픽은 총 4개의 파티션으로 구성되어 있고, 브로커는 3대로 구성되어 있습니다 .각 브로커마다 하나의 파티션이 배치됐지만 어느하나의 브로커에는 총 2개의 파티션이 배치됐습니다. kafka 확장 실습을 위해 브로커를 한대 더 추가하겠습니다. $KAFKA_HOME/config/server.properties 설정 파일에서 broker.id=4로 지정합니다. 별다른 어려움 없이 broker 추가가 완료되었습니다.
그렇다면 기존의 토픽과 파티션들은 어떻게 될까요? 브로커를 추가했지만 기존의 토픽과 파티션들은 새로 추가된 브로커로 이동하지 않습니다. 그렇 어떻게 해야 할까요? 관리자가 수작업으로 토픽의 파티션들을 고르게 분산시켜야 합니다.
우선 새로운 토픽을 생성합니다.
$ $KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server peter-kafka01.foo.bar:9092 --create --topic peter-scaleout2 --partitions 4 --replication-factor 1
$ $KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server peter-kafka01.foo.bar:9092 --describe --topic peter-scaleout2
브로커를 추가한 후 생성한 peter-scaleout2 토픽은 브로커마다 고르게 분산됐음을 알 수 있습니다. 하지만 여전히 기존 토픽은 추가된 브로커에 배치되지 않습니다.
전체 브로커들에게 토픽의 파티션을 고르게 부하 분산하기 위해서는 새로 추가된 브로커를 비롯해 모든 브로커에게 균등하게 파티션을 분산시켜야 합니다. 카프카에서 제공하는 kafka-reassign-partitions.sh라는 도구를 이용하면 파티션을 이동시킬 수 있습니다. 이 도구를 이용해 실습용 토픽의 파티션을 분산시켜 봅니다.
파티션 이동작업을 위해 정해진 JSON 포맷으로 파일을 생성해야 합니다. 해당 JSON 포맷에는 분산시킬 대상 토픽을 추가해 작성합니다.
{"topics":
[{"topic" : "peter-scaleout1"},{"topic" : "peter-scaleout2"}],
"version":1
}
분산시킬 대상 토픽에 대한 JSON파일이 생성됐다면, 다음과 같이 kafka-reassign-partitions.sh 명령어를 이용해 파티션을 분산시킬 브로커 리스트를 지정합니다. 여기서는 1, 2, 3, 4번 브로커 모두를 지정했습니다.
$ $KAFKA_HOME/bin/kafka-reassign-partitions.sh --bootstrap-server peter-kafka01.foo.bar:9092 --generate --topics-to-move-json-file reassign-partitions-topic.json --broker-list "1,2,3,4"
위 작업을 통해서 토픽이 모든 파티션에 고르게 배치되었습니다.
주의사항
분산배치 작업을 수행할 때는 버전 업그레이드 작업과 마찬가지로 kafka의 사용량이 낮은 시간에 진행하는것을 추천합니다. kafka에서 파티션이 재배치 되는 과정은 파티션이 단순하게 이동하는 것이 아니라 브로커 내부적으로 리플리케이션하는 동작이 일어나기 때문입니다.
'PaaS > MQ' 카테고리의 다른 글
kafka와 보안 - 인증(SASL) (0) | 2022.07.08 |
---|---|
kafka와 보안 - SSL (0) | 2022.07.06 |
kafka 운영과 모니터링 (0) | 2022.06.24 |
kafka consumer의 내부 동작 원리와 구현 (0) | 2022.06.22 |
kafka producer의 내부 동작 원리와 구현 (0) | 2022.06.14 |