스터디/[카프카 인 액션] (2024.12)

[카프카인액션] 2장. 레코드 | 브로커 | 프로듀서 | 컨슈머 | 주키퍼 | 커밋 로그 | 카프카 스트림즈 | 컨플루언트 클라이언트 | 스트림 처리

ttoance 2024. 12. 14. 23:20

 

2.1 메시지 생산과 소비 

- 메시지(레코드) : 카프카를 통해 흐르는 데이터의 기본 요소 

 

 

2.2 브로커란 무엇인가 ?

- 브로커 : 카프카의 서버 측면으로 생각할 수 있음. 

 

https://ddoance.tistory.com/290

 

[kafka] 토픽 생성 및 리스트 확인 + producer, consumer 메시지 전달 (mac m1)

1. kinaction_helloworld 토픽 만들기bin/kafka-topics.sh --create --bootstrap-server localhost:9094 --topic kinaction_helloword --partitions 3 --replication-factor 3   2. 토픽 확인하기 bin/kafka-topics.sh --list --bootstrap-server localhost:909

ddoance.tistory.com

 

 

- 토픽 세부 정보 조회 시, 파티션0을 보면 브로커0에 레플리카 사본이 있고, 이 파티션은 브로커 1과 2에도 레플리카가 존재한다.

- 마지막 컬럼인 Isr은 동기화된 레플리카를 표시한다. (현재 리더보다 뒤쳐지지 않은 상태의 브로커를 보여준다.)

 

- 브로커 0이 파티션 0에 대한 리더 레플리카를 보유하고, 리더 레플리카가 아닌 파티션1과 2에 대해서도 레플리카 사본을 보유

- 파티션 1의 사본 레플리카 데이터는 브로커 1에서 복사가 이루어짐. 

 

 

2.3 카푸카 투어

프로듀서 카프카로 메시지 보낸다.
컨슈머 카프카에서 메시지 조회한다.
토픽 메시지를 브로커에 저장하기 위한 논리적인 이름
주키퍼 앙상블 클러스터에서 컨센서스(consensus)를 유지하도록 돕는다.
브로커 커밋 로그를 처리한다 (디스크에 메시지를 저장하는 방법)

 

 

2.3.1 프로듀서와 컨슈머

1) 프로듀서 : 메시지를 카프카 토픽에 보내는 도구 

- 디폴트 프로듀서는 없으나, 자체적으로 구현된 코드에서 프로듀서를 사용한다. 

ex, 플룸(flume), 커넥트(connect), 스트림즈(streams)등의 도구 사용이 포함될 수 있음. 

2) 컨슈머 : 카프카에서 메시지를 검색하는 도구 

 

2.3.2 토픽 개요 

- 대다수 사용자가 어떤 메시지가 어디로 가야 하는지에 관한 로직 생각하기 시작하는 곳

- 파티션 partition 이라는 단위로 구성됨. = 1개 이상의 파티션이 단일 토픽을 구성함. 

* 단일 파티션의 에플리카는 단 하나의 브로커에만 존재하며 브로커 간에는 분할할 수 없음. 

 

- 3개의 데이터 복제본 설정 시, 토픽 자체는 단일 엔티티가 아니고 각각 3번씩 복제되는 여러 개의 파티션임

- 파티션 복제본(레플리카) 중 하나가 리더가 되며, 다른 두 복사본은 파티션 리더로부터 데이터를 업데이트 받는 팔로워가 될 것

- 예외나 오류가 없을 시는 리더 레플리카에서만 읽고 쓴다. (2.4 버전 부터는 가장 팔로워더라도 가까운 레플리카를 선택해 소비하는 기능이 포함됨)

 

2.3.3 주키퍼의 용도 

- 디스커버리, 컨피규레이션, 동기화 서비스를 고가용성 방식으로 제공하는 분산 저장소 

- 프로덕션 사용 사례에서는 주키퍼는 앙상블이지만, 로컬 셋업에서는 단 하나의 서버만 실행할 것임. 

 

2.3.4 카프카의 고가용성 아키텍쳐 

- 핵심 중 하나는 운영체제의 페이지 캐시 사용이다. 

- 또 다른 설계 고려사항은 데이터의 접근 패턴으로, 새 메시지가 유입될때 많은 컨슈머가 가장 최신 메시지와 상호 작용할 가능성이 높아, 최신 메시지는 캐시로부터 제공받을 수 있음. 

- 자체 프로토콜 사용 

 

2.3.5 커밋 로그 

- 이벤트가 항상 로그 마지막에 추가되는 추가 전용 append-only 특성이 있다.

 

 

2.4 다양한 소스 코드 패키지와 역할

2.4.1 카프카 스트림즈 

- 카프카 소스 코드 프로젝트의 streams 디렉터리에서 찾을 수 있음 

- 가장 좋은점 중 하나는 독립된 프로세싱 클러스터가 필요하지 않음. 

- 내결함성을 보장하는 로컬 상태, 한 번에 하나씩 메시지 처리, 정확히 한 번 개념을 지원함

 

2.4.2 카프카 커텍트 

- 코어 카프카 커넥트 폴더에서 찾을 수 있음 

- 아파치 고블린과 아파치 플룸 도구 대체 

- source connector는 소스에서 카프카로 데이터 임포트 하기 위해 사용

- connect source는 메시지를 카프카로 생산하기 위해 사용

- sink connector는 카프카에서 다른 시스템으로 데이터 익스포트 하기 위해 사용 

 

2.4.3 AdminClient 패키지 

- 어드민 클라이언트 API 

 

2.4.4 ksqlDB 

- 데이터 엔지니어를 대상으로 하는 인터페이스 

 

2.5 컨플루언트 클라이언트

https://docs.confluent.io/platform/current/clients/index.html

 

Build Client Applications for Confluent Platform | Confluent Documentation

Clients overview You can use Apache Kafka® clients to write distributed applications and microservices that read, write, and process streams of events in parallel, at scale, and in a fault-tolerant manner, even in the case of network problems or machine f

docs.confluent.io

 

 

2.6 스트림 처리와 용어 

 

반응형