본문 바로가기

kafka9

6. Kafka - Java Kafka Clients의 Send 메소드 카프카 클라이언트를 개발할 때 보통 자바를 쓴다. Producer Client의 별도 Thread 가 전송을 담당한다는 점에서 기본적으로 Thread간의 비동기 전송이다. 즉 Main Thread가 있고, Serializer를 통해 전송하려는 데이터를 일련의 바이트로 변환한다. 즉 객체나 데이터를 바이트스트림으로 변환하여 Partitioner를 거쳐 이전에 학습했던 대로 파티션 별로 별도의 배치에 따라 담겨진 후 Sender에게 보내지는데, Sender는 메인 쓰레드가 아닌 별도의 Send Network Thread가 전송하게 된다. 1 2 3 4 5 6 Main Thread Send Network Thread DATA.send() Serializer Partitioner Topic Partition#1.. 2024. 4. 4.
5. Kafka - Kafka-Configs Kafka의 환경설정은 다양하게 할 수 있다. Kafka Producer의 설정은 Java Application 형태로 개발하였으면 Property의 항목에 입력하는 K:V 형태로 입력할 수 있고, Broker나 Topic에 관련한 환경설정은 docker run 시에 입력한다던지, docker-compose.yml 파일 안에서 입력한다던지 등 다양하게 입력할 수 있다. 물론 bitnami-kafka, confluent-kafka, apache-kafka 등 패키징 된 kafka를 제공하는 곳들이라면 환경설정을 매핑해주는 자체적인 환경설정 Key들이 있을 수 있다. 여기서는 confluent-kafka의 kafka-configs를 사용한다. configs 설정 확인 docker exec -it kafka .. 2024. 4. 4.
4. Kafka - 컨슈머 그룹 (Consumer Group) 카프카의 컨슈머 그룹(Consumer Group)이란 동일한 Topic을 구독하는 하나 이상의 컨슈머(Consumer)를 의미한다. 즉, 컨슈머는 어떤 특정 토픽을 구독하는 한 인스턴스라고 본다면, 컨슈머 그룹은 동일한 관심사를 가지는 컨슈머의 그룹이다! 또한 모든 컨슈머들은 단 하나의 컨슈머 그룹에 소속되어야 하며, 컨슈머 그룹은 1개 이상의 컨슈머를 가질 수 있다. 즉 컨슈머 그룹과 컨슈머의 관계는 1:N이 가능하다. 이 컨슈머 그룹의 특징은, 1) 그룹 단위 메세지 처리 - 컨슈머 그룹은 Topic으로부터 메시지를 소비하고 처리하는 단위이다. 동일하나 컨슈머 그룹에 속한 컨슈머 Instance는 그룹 내에서 메시지를 공유하고, 작업을 분산하여 처리한다. 2) 파티션 할당 - Topic은 하나 이상의.. 2024. 4. 4.
3. Kafka - 키가 없는 경우의 파티셔닝 전략 카프카를 파티셔닝해서 쓰는 경우, 어떻게 파티셔닝이 이뤄질까? 카프카는 키가 없는 경우의 파티셔닝 전략으로 2가지 파티션 분배 전략을 가지고 있다. 1) 라운드 로빈 (Round Robin) - Kafka 2.4 버전 이전 기본 파티셔닝 전략 2) 스티키 파티셔닝 (Sticky Partitioning) - Kafka 2.4버전 이상 기본 파티셔닝 전략 라운드 로빈은 순차적으로 메시지를 파티셔닝 하는 것이며, 요즘 사용하고 있는 카프카는 거의 대부분 "스티키 파티셔닝"일 것이다. 먼저 Kafka Producer에서 만들어진 메시지는 브로커의 특정 토픽 파티션에 들어가기 전, 파티셔너 (Partitioner)에 의해 "Batch"라는 단위로 모여 있다가, Batch 단위로 파티션에 send 된다. 즉 Pro.. 2024. 4. 4.