# Kafka

***

| 로고                                                                                 | 개념도                                                                                |
| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| ![아파치카프카](https://i.pinimg.com/564x/f2/80/1a/f2801a2555451906d4e0ced138039b0f.jpg) | ![카프카개념도](https://i.pinimg.com/564x/e5/6a/db/e56adbb7b7761e1f50bf90c8a1765607.jpg) |

## 카프카 기본 개념

* 카프카 : 카프카 클러스터를 포함한 이벤트 스트림 프로세스 아키텍처.
* 브로커 : 카프카 클러스터의 서버 중 하나. 데이터를 저장하고 전달.
* 토픽 : 카프카 클러스터에서 데이터를 구분하는 단위. 토픽은 최소 1개 이상의 파티션을 가짐
* 파티션 : 토픽에서 데이터를 논리적으로 구분하는 단위
* 레코드 : 메시지를 담는 가장 작은 크기.
  * 오프셋 : 프로듀서가 보낸 데이터가 브로커에 저장되었을 시에 받는 고유 번호. 인덱스 번호.
  * 타임스탬프 : 레코드가 프로듀서에서 생성 되었을 때 시간.
  * 헤더 : 레코드의 키/값 저장영역.
  * 메시지 키: 데이터를 구분하는 값. 실제 db에서 사용되는 primary key 또는 json의 키 개념이 비슷하다.
  * 메시지 값: 밸류값.

## 카프카 프로듀서

* 카프카 프로듀서 : 카프카 브로커로 데이터를 전달하는 역할을 하는 어플리케이션.
* 파티셔너 : 메시지 키를 토대로 파티션을 지정하는 클래스. 직접 커스텀하여 로직 변경 가능.
* 어큐뮤레이터 : 레코드 전송시 배치로 묶는 역할.
* acks : 레코드를 카프카 클러스터로 전송시에 전달 신뢰성을 지정함.
* min.insync.replicas : acks=all 일 경우 최소 적재 보장 파티션 개수.
* enable.idempotence : 멱등성 프로듀서로 동작하기 위해 설정하는 옵션.
* transactional.id : 트랜잭션 프로듀서로 동작하기 위해 설정하는 옵션.

## 카프카 컨슈머

* 카프카 컨슈머 : 카프카 클러스터에 저장된 레코드를 받와서 처리하느 어플리케이션.
* 컨슈머 그룹 : 동일한 역할을 하는 컨슈머들의 묶음.
* 컨슈머 랙 : 파티션에서 가장 최근의 레코드 오프셋과 컨슈머 오프셋간의 차이. 또는 차이 시간을 말함.
* 커밋 : 컨슈머가 레코드 처리가 완료되었을 경우 카프카 클러스터에 마지막으로 읽은 레코드의 오프셋 번호를 저장하는 작업.
* 리밸런싱 : 컨슈머 그룹에서 컨슈머 개수의 변화 또는 파티션 개수의 변화로 인해서 할당이 변경되는 작업.
* auto.offset.reset : 컨슈머 그룹이 없을 경우 처음 읽을 오프셋의 위치를 지정하는 옵션.
* isolation.level : 트랜잭션이 완료된 레코드를 읽을 것인지 판단하는 옵션.

## 카프카 스트림즈

* 카프카 스트림즈 : 상태/비상태 기반 스트림 데이터 처리를 수행하는 어플리케이션.
* 태스크 : 스트림즈 어플리케이션 내부에서 생성되어서 로직을 수행하는 최소 단위.
* 프로세서 : 데이터를 처리,가져오기,보내기
* 스트림 : 프로세서로 부터 처리된 데이터를 다른 프로세스로 전달되는 레코드
* 스트림즈DSL : 추상화 되어 스트림 프로세싱에 필요한 메서드들을 정의한 메서드들의 모음.
* 프로세서API : 스트림즈 dsl에서 구현할 수 없는 로직을 구현할 때 사용하는 API.
* KStream : 레코드의 흐름, 컨슈머의 poll()과 유사함.
* kTable : 특정 파티션의 메시지 키를 기준으로 가장 최근의 레코드들의 묶음.
* 코파티셔닝 : 동일한 파티션 개수, 동일한 파티셔닝 전략을 통해 레코드가 저장된 서로 다른 2개의 토픽.

## 카프카 커넥트

* 카프카 커넥트 : 카프카 기반 데이터 파이프라인을 반복적으로 생성할 때 사용하는 어플리케이션.
* 소스 커넥터 : 특정 파일 또는 소스 어플리케이션으로부터 토픽으로 데이터를 보내는 프로듀서.
* 싱크 커넥터 : 토픽에서 특정 파일 또는 소스 어플리케이션으로 데이터를 보내는 컨슈머.
* 오픈소스 커넥터 : 소스/싱크 커넥터를 사용할 수 있도록 jar형태로 배포하는 커넥터.
* 태스크 : 커넥터에서 데이터를 처리하는 최소 로직 단위.
* 단일 모드: 디버깅, 테스트용으로 적합한 1프로세스 단위 커넥트
* 분산 모드: 상용환경 운영에 적합한 멀티 프로세스 단위 커넥트


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sinbum.gitbook.io/blog/bigdata/kafka.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
