프로듀서
메시지를 발행하는 주체
메시지 발행시 대부분 비동기 방식으로 동작 (스프링 카프카)
카프카는 기본적으로 라운드 로빈으로 토픽안에 파티션에 분산 저장한다. 따라서 프로듀서는 해당부분을 신경 쓸 필요가 없다.
컨슈머
카프카 브로커로부터 메시지를 구독하여 가져오는 주체다.
컨슈머 그룹
같은 그룹ID를 가진 컨슈머들이 하나의 그룹을 이루어 하나 이상의 토픽을 함께 구독하는 논리적 단위
한 컨슈머 그룹 내의 여러 컨슈머는 토픽의 파티션을 나누어 점유. 이 때, 컨슈머가 여러개 있더라도 딱 한번만 메시지를 가져간다.
예를들어 주문서버에서 발행된 메시지를 상품서버에서 재고처리를 할 때 트래픽에 따라 상품서버가 여러대가 있다.
여러대의 서버를 같은 그룹 ID로 묶어서 파티션을 분담할 수 있다.
여러 컨슈머 그룹이 한 토픽을 구독하면 독립적으로 파티션 점유. 이 때, 메시지는 여러 컨슈머 그룹에 공유된다.
예를들어 주문서버에서 발행된 메시지를 상품서버, 주문통계서버, 알림서버에서 소비할 때 각 서버는 같은 메시지를 각각 소비해야하므로 다른 그룹 ID로 설정한다.
offset
토픽의 메시지의 순서를 나타내는 고유한 번호다
커밋이란 메시지를 읽어서 처리했다는 것을 확정짓는 행위다.
컨슈머그룹에서 메시지를 정상 수신 후 처리하면 오프셋을 커밋하며 오프셋의 값을 이동시킨다.
각 컨슈머그룹에서 내가 어디까지 메시지를 읽었는지 기록하는 숫자 값이다.
오토커밋을 설정할 수 있다. 이 때, 에러가 발생해도 offset을 이동한다.
로그같은 가벼운 처리는 true로 설정한다. 스프링 카프카의 기본 값은 true다
중요한 데이터는 false로 처리해야한다. 이 때는 수동으로 커밋처리를 해야한다.
자동초기화 옵션 : 새로운 컨슈머 그룹이 처음 토픽을 구독할 때, 기존에 저장된 오프셋 정보가 없으면 어디서 부터 메시지를 읽을지를 결정하는 옵션
auto-offset-rest=earliest 설정은 토픽 내 가장 오래된 메시지부터 읽는다. 새로운 컨슈머그룹이 이전 메시지를 읽어야하는 경우에 설정하며 과거의 로그도 분석해야하는 로그분석서버등에 쓰인다.
auto-offset-rest=latest는 디폴트 설정이며 토픽 내 들어오는 새 메시지부터 읽는다. 새로운 컨슈머그룹이 서버 실행 이후 최신의 메시지만 읽어야 하는 경우에 설정한다. 알림서버등에 쓰인다.