kafka의 고가용성(시스템이 장애 상황에서도 멈추지 않고 정상적으로 서비스를 제공할 수 있는 능력)을 확보하는 방법을 이해하려면 아래 용어들을 먼저 알고있어야 한다.
✅ 노드(node)란?
카프카가 설치되어 있는 서버 단위를 의미한다.

서비스 장애를 방지하기 위해 실무에서는 위 그림과 같이 노드(node)를 1대만 두지 않고, 최소 3대의 노드(node)를 구성한다. 즉, 최소 카프카 서버 3대를 구축해서 운용한다는 뜻이다.
✅ 클러스터(cluster)란?
여러 대의 서버가 연결되어 하나의 시스템처럼 동작하는 서버들의 집합을 의미한다.

위 그림과 같이 3대의 노드로 구성을 하면, 이 3대의 노드들이 서로 유기적으로 작동한다. 예를 들면, 서로 들어오는 메시지를 나눠 저장하고, 서로의 복제본을 생성해서 유지할 수도 있으며, 장애 시 시스템 전체가 중단없이 작동되게 만든다. 이와 같이 유기적으로 작동하는 노드들을 묶어서 클러스터(cluster)라고 부른다.
✅ 브로커(broker), 컨트롤러(controller)란?
kafka 서버는 크게 컨트롤러(controller)와 브로커(broker)로 구성되어 있다.
브로커(broker)란, 메시지를 저장하고 클라이언트의 요청을 처리하는 역할을 한다. (직원)
컨트롤러(controller)란, 브로커들간의 연동과 전반적인 클러스터의 상태를 총괄한다. (총관리자)

기본적으로 kafka 노드에서 브로커(broker)는 9092번 포트에서 실행되고, 컨트롤러(controller)는 9093번 포트에서 실행된다. 즉, 별개의 프로세스로 실행된다.
✅ 레플리케이션(replication)이란?
kafka에서의 레플리케이션(replication)은, 데이터의 안정성과 가용성을 높이기 위해 토픽의 파티션을 여러 노드에 복제하는 걸 의미한다.

email.send의 파티션 #0을 다른 노드에도 복사해서 저장해둔다.