Kafka Producers
Kafka Producers란, Kafka를 사용해 Topic이 생성되면 해당 Topic으로 데이터를 전송하는 것입니다. 이때 Kafka Producers가 참여하게 됩니다.
- 데이터를 토픽으로 보내는 애플리케이션을 Kafka Producers라고 합니다
- 애플리케이션은 일반적으로 Kafka 클라이언트 라이브러리를 통합하여 Apache Kafka에 씁니다.
- Python, Java, Go 등을 포함하여 거의 모든 프로그래밍 언어에 대한 클라이언트 라이브러리가 존재합니다.
- Kafka Producers는 토픽에 메시지를 보내고 메시지는 키 해싱과 같은 메커니즘에 따라 파티션에 분산됩니다.
- 메시지가 Kafka 토픽에 성공적으로 기록되려면 producers가 승인(acks) 수준을 지정해야 합니다. 해당 내용은 Topic replication을 참고하시면 됩니다.
Message Keys
- 각 이벤트 메시지에는 키와 값이 선택적으로 포함되어 있습니다.
- producers가 키를 지정하지 않은 경우(key=null) 메시지는 토픽의 파티션에 균등하게 분배됩니다.
- 즉, 메시지가 라운드로빈(roundRobin) 방식으로 전송된다는 것을 의미합니다. (partition p0 -> p1 -> p2 -> p0)
- 키가 전송되면(key!=null)같은 키를 공유하는 모든 메시지는 항상 같은 kaffka partition에 전송되어 저장됩니다.
- 키는 문자열, 숫자 값, 이진 값 등 메시지를 식별하는 모든 것이 될 수 있습니다.
- Kafka 메시지 키는 같은 필드를 공유하는 모든 메시지에 대해 메시지 순서가 필요할 때 일반적으로 사용됩니다.
Kafka Message 분석
- Kafka 메시지는 producers에 의해 생성됩니다.
- Key
- 키는 kafka 메시지에서 선택 사항이며 null일 수 있습니다.
- 키는 문자열, 숫자 또는 임의의 객체일 수 있으며 키는 binary 형식으로 직렬화됩니다.
- Value
- 값은 메시지의 내용을 나타내며 null일 수 있습니다.
- 값 형식은 임의적이며 binary 형식으로 직렬화됩니다.
- Compression Type(압축 유형)
- kafka 메시지는 압축될 수 있습니다.
- 압축 유형은 메시지의 일부로 지정될 수 있습니다. 옵션은
none
, gzip
, lz4
, snappy
, zstd
가 있습니다.
- Headers
- 키-값 쌍의 형태로 선택적 kafka 메시지 헤더 목록이 있을 수 있습니다. 특히 추적을 위해 메시지에 대한 메타데이터를 지정하기 위해 헤더를 추가하는 것이 일반적입니다.
- Partition + Offset
- 메시지가 kafka topic로 전송되면 파티션 번호와 오프셋 ID를 받습니다.
- topic + partition + offset 조합으로 메시지를 고유하게 식별합니다.
- Timestamp
- 타임스탬프는 사용자 또는 시스템에 의해 메시지에 추가됩니다.
Kafka Message Serializers
- kafka 브로커는 byte array을 메시지의 키와 값으로 예상합니다.
- 객체에 대한 생산자의 프로그래밍 방식 표현을 binary로 변환하는 프로세스를 Message Serialization 이라고 부릅니다.
Kafka Message Key Hashing