실행된 카프카 애플리케이션 서버 중 1대
3대 이상의 브로커로 클러스터 구성
주키퍼와 연동 (~2.5.0 버전)
n개의 브로커중 1대는 컨트롤러 (Controller) 기능 수행
new ProducerRecord<String, String>("totpic", "key", "message");
ConsumerRecords<String, String> records = consumer.poll(1000);
for (ConsumerRecord<String, String) record: recrods){ ... }
객체를 프로듀서에서 컨슈머로 전달하기 위해 Kafka 내부에 byte 형태로 저장할 수 있도록 직렬화/역직렬화하여 사용
메시지분류단위
n개의 파티션 할당 기능
각 파티션마다 고유한 오프셋을 가짐
메시지 처리순서는 파티션 별로 유지 관리됌.
프로듀서는 레코드를 생성하여 브로커로 전송
전송된 레코드는 파티션에 신규 오프셋과 함께 기록됌
컨슈머는 브로커로 부터 레코드를 요청하여 가져감(polling)
실제로 메세지가 저장되는 파일 시스템 단위
세그먼트는 시간 또는 크기 기준으로 닫힘
세그먼트가 닫힌 이후 일정 시간 (또는 용량)에 따라 삭제 또는 압축(compact)됌
토픽 내 파티션이 3개, 컨슈머가 1대일 때
토픽 내 파티션이 3개, 컨슈머가 3대 일 때
토픽 내 파티션이 3개 , 컨슈머가 4대 혹은 그 이상일떄
이는 모두 컨슈머 그룹이 한개일떄를 가정
컨슈머 그룹이 두개일 경우 서로 다르게 처리할 수 있음.
데이터가 재처리되야한다면 컨슈머 그룹을 하나 더 만들어서 처리하기도 함
coupling을 줄이는 용도로도 사용
토픽 생성 시 replication옵션을 추가하면 각 브로커에 replica 들이 생성됨
이 때 파티션이 생성되고 주로 사용되는 파티션을 리더파티션, 리플리카 파티션들을 팔로워 파티션이라고 함
특정 파티션의 리더, 팔로워의 레코드가 모두 복제되어 sync 가 맞는 상태 => ISR (In-Sync Replica)
ISR 이 아닌 상태에서 장애가 나면 => unclean.leader.election.enable (기본은 false으로 되어있음)