카프카 프로듀서란 카프카 클러스터로 이벤트를 발행하는 클라이언트 어플리케이션을 의미한다.
DDD 관점에서 보면, 서로 다른 바운디드 컨텍스트(일반적으로 서버가 분리되어 있음)에 속한 애그리거트의 상태 변경에 대한 도메인 이벤트를 시스템간의 이벤트로 변환하여 발행할 때 카프카 프로듀서를 통해 이벤트를 발행하곤 한다.
예를들어, 주문이 취소되는 경우 주문이라는 애그리거트 (도메인의 제약사항을 공유하는 객체 묶음) 상태가 변경된 것을 이벤트로 발행하게 되는데, MSA 에서 다른 컨텍스트 예를 들어, 재고 시스템과 같은 컨텍스트가 이에 대한 처리가 필요한 경우 해당 이벤트를 받아서 로직을 처리하게 된다.
기본적으로 카프카 프로듀서는 컨슈머에 비해 그렇게 복잡하지 않다.
파티셔너
파티셔너는 프로듀서가 메시지를 발행할 때 어떤 파티션에 메시지를 매핑할 것인지 결정하는 주체이다.
일반적으로 프로듀서가 메시지의 키에 값을 넣는 경우, 이를 해싱한 값을 기반으로 파티셔너가 파티션을 결정하게 된다. 따라서 같은 키로 메시지를 발행하는 경우, 하나의 파티션으로 메시지를 전송하게 된다.
메시지 키가 없는 경우
메시지에 키가 없는 경우 기본적으로 메시지는 파티션에 골고루 분배되는 방식이 사용된다.
구현체마다 다르게 동작하는데, java 로 제공되는 kafka client 의 경우 버전에 따라 라운드 로빈으로 동작하기도 하고, 배치단위가 될 때까지 데이터를 묶어서 파티션 마다 분배하기도 한다.

메시지 키가 있는 경우
위에서 설명했듯, 메시지 키가 존재하는 경우, 파티셔너에 의해 키를 해싱하여 파티션에 분배하게 된다. 따라서, 아래 그림처럼 key1 의 경우 같은 파티션1에 메시지를 보내게 된다.
참고로 key2, key3 는 각기 다른 파티션에 메시지를 보내는 것으로 그려져있지만, 해싱 결과에 따라서 같은 파티션에 분배되기도 한다.

accumulator
accumulator 란 카프카의 어떤 개념적인 부분은 아닌 것으로 보이나 kafka client 에 구현된 객체로, 토픽별로 메시지를 묶어서 배치로 카프카 클러스터로 메시지를 보내는 역할을 한다.
이름은 다르지만, 기본적으로 카프카의 구현체들은 다른 언어에서도 메시지를 건 바이 건으로 브로커에 보내지 않고, 메시지를 배치로 묶어서 보내게 된다.

acks 옵션
acks 옵션은 프로듀서가 파티션에 메시지를 쓰기할 때, in-sync replicas 에 복제가 성공적으로 이루어졌는지 확인하기 위한 옵션이다.
아래의 포스팅에서 acks 옵션과 메시지 유실 가능성에 대해서 자세히 다루었기 때문에 생략하려고 한다.
https://pius712.tistory.com/28
카프카 - 메시지 유실 가능성
언젠가 면접에서 카프카 사용시 메시지가 유실될 수 있을까? 만약 유실될 수 있다면 언제 유실될 수 있을까? 라는 질문을 받은적이 있다. 당시 질문에 대답을 잘 못했는데, 카프카를 통신수단 이
pius712.tistory.com