Apache Kafka ‐ Kafka 장애 대응(고가용성) - dnwls16071/Backend_Summary GitHub Wiki
📚 노드(Node), 브로커(Broker), 컨트롤러(Controller), 클러스터(Cluster), 레플리케이션(Replication)
[노드(Node)]
- 노드(node)란, 카프카가 설치되어 있는 서버 단위를 의미한다.
- 위와 같이 Kafka가 설치된 서버 자체를 노드(Node)라고 부른다.
- 이 노드가 고장나게 되면 메시지 전달 자체가 막히기 때문에 아무런 요청에 대해서 처리하지 못해 서비스 장애로 이어지게 된다.
- 그래서 서비스 장애를 방지하기 위해 현업에서는 최소 3대의 노드를 구성한다.
[클러스터(Cluster)]
- 클러스터(Cluster)란, 여러 대의 서버가 연결되어 하나의 시스템처럼 동작하는 서버들의 집합을 의미한다.
- 3대의 노드를 묶은 하나의 큰 집합을 클러스터라고 한다.
- 유기적으로 작동하는 노드들을 묶어서 클러스터(cluster)라고 부른다.
[브로커(Broker), 컨트롤러(Controller)]
- 브로커(broker)는 메시지를 저장하고 클라이언트의 요청을 처리하는 역할을 하고 컨트롤러(controller)는 브로커들간의 연동과 전반적인 클러스터의 상태를 총괄한다.
- 기본적으로 브로커는 9092번, 컨트롤러는 9093번 포트에서 실행된다.
[레플리케이션(Replication)]
- 레플리케이션(Replication)이란, 데이터의 안정성과 가용성을 높이기 위해 토픽의 파티션을 여러 노드에 복제하는 걸 의미한다.
- 복제된 파티션들은 리더 파티션(원본)과 팔로워 파티션(복제본)으로 구분한다.
- 리더 파티션은 프로듀서나 컨슈머가 직접적으로 메시지를 쓰고 읽는 파티션이다. 반면에 팔로워 파티션은 프로듀서나 컨슈머가 직접적으로 메시지를 쓰고 읽지 않는다.
- 팔로워 파티션은 리더 파티션의 메시지를 실시간으로 복제하며 유지한다.
- 리더 파티션에 장애가 발생하면 팔로워 파티션이 리더 역할(프로듀서로부터 메시지를 받고, 컨슈머가 메시지를 처리)을 대신 수행한다. 이미 팔로워 파티션은 리더 파티션 내부에 있는 메시지까지 복제해서 가지고 있기 때문에, 리더 파티션의 노드가 중간에 장애가 난다고 하더라도 메시지는 정상적으로 이어서 처리할 수 있다.
📚 토픽 세부 정보 이해하기
- PartitionCount : 해당 토픽의 파티션 수
- ReplicationFactor : 해당 토픽의 레플리케이션 수
- Partition : 파티션 번호
- Leader : 해당 토픽의 리더 파티션을 가지고 있는 노드 ID
- Replicas : 해당 토픽의 파티션을 복제하기로 설정된 노드들의 ID
- Isr : 리더 파티션과 똑같은 상태로 복제가 완료된 노드들의 ID
📚 Kafka 서버 운용 방법
server:
port: 0
spring:
kafka:
bootstrap-servers:
- {Kafka 서버 IP 주소}:9092
- {Kafka 서버 IP 주소}:19092
- {Kafka 서버 IP 주소}:29092
consumer:
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
auto-offset-reset: earliest
리더 파티션이 아닌 팔로워 파티션에 메시지를 넣는다면? -> 리더 파티션으로 재전송된다.