Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Kafka Intro #72

Merged
merged 13 commits into from
Aug 25, 2024
Merged

Add Kafka Intro #72

merged 13 commits into from
Aug 25, 2024

Conversation

ehddnr301
Copy link
Collaborator

image

Kafka Zero to Hero 실시간 성장하기 스터디를 진행하며 정리한 내용을 추가하였습니다.

![alt text](./images/9_1_1.png)

## 카프카란

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

간단한 카프카의 설명을 추가하는 것이 어떨까요?

카프카(Kafka)는 아파치 소프트웨어 재단에서 개발한 오픈 소스 분산 스트리밍 플랫폼입니다. 대규모 데이터 처리와 실시간 데이터 스트리밍을 목적으로 설계되었습니다. 카프카는 여러 애플리케이션 간에 데이터를 효율적으로 교환할 수 있게 합니다.[MSA(MicroService Arcitecture)에 적합하다고 평가]

## 파티션

![alt text](./images/9_1_2_1.png)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이미지에 대한 설명을 추가하면 좋을 것 같아 만들어 봤는데 그림에 대한 해석을 짐작하여 작성한 것이라 의도한 것과 다르시면 수정하시는 것이 좋을 것 같습니다.

  • 각 원 안의 숫자는 메시지의 오프셋(Offset)을 나타냅니다. 오프셋은 파티션 내에서 각 메시지의 고유햔 위치를 의미하며, 0부터 시작하여 순차적으로 증가합니다.
  • 원의 색상은 각 메시지가 어떤 파티션에 저장되었는지를 나타냅니다. 동일한 색상의 원은 동일한 파티션에 속한 메시지임을 의미합니다.

2. Key를 이용해 특정 Partition을 선택할 수 있습니다.
- Key가 지정된 경우 Kafka는 키의 해시값을 이용해 메시지를 특정 파티션에 저장합니다.
- 같은 키를 갖는 메시지는 항상 같은 Partition에 저장되기 때문에 메시지 순서가 보장됩니다.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

라운드 로빈에 대한 간단한 소개글이 있으면 좋을 것 같아서 작성해봤습니다.

라운드 로빈(RoundRobin) 방식

라운드 로빈은 프로듀서가 메시지를 각 파티션에 고르게 분산시키기 위해 사용하는 방식 중 하나입니다. 이 방식은 다음과 같이 동작합니다:

  • 메시지 분산: 프로듀서는 첫 번째 메시지를 첫 번째 파티션에, 두 번째 메시지를 두 번째 파티션에 저장하는 식으로 순차적으로 파티션에 메시지를 분산합니다.
  • 순환 반복: 모든 파티션에 한 번씩 메시지를 보낸 후 다시 첫 번째 파티션으로 돌아가서 동일한 순서로 메시지를 보냅니다. 즉, 파티션의 개수만큼 순환하면서 메시지를 저장합니다.


- 그림 예시를 살펴보면 Consumer Group A에서 각 컨슈머는 Partition0과 Partition1을 공유할 수 없습니다.
- 다른 Consumer Group B는 Consumer Group A에서 읽고있는 Partition0과 Partition1을 읽을 수 있습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컨슈머 그룹의 당위성이 있으면 이해가 쉬울 것 같아 작성해봤습니다.

컨슈머 그룹을 사용하는 이유

  1. 확장성과 병렬처리

    • 부하분산: 컨슈머 그룹을 사용하면 여러 컨슈머를 그룹으로 묶어, 각 컨슈머가 토픽의 서로 다른 파티션을 병렬로 처리할 수 있습니다. 이를 통해 데이터 처리 속도가 크게 향상됩니다.
    • 확장성: 처리해야 할 데이터 양이 증가하면 컨슈머 그룹에 컨슈머를 추가하여 쉽게 확장할 수 있습니다. 새로운 컨슈머가 그룹에 추가되면, 카프카는 자동으로 파티션을 다시 할당하여 각 컨슈머가 처리할 데이터를 균등하게 분배합니다.
  2. 데이터 중복 방지

    • 고유처리: 컨슈머 그룹 내의 각 컨슈머는 고유한 파티션을 할당받아 처리하므로, 동일한 파티션의 데이터를 여러 번 처리하지 않습니다. 이는 동일한 데이터를 여러 번 처리하는 중복 작업을 방지하여 효율성을 높입니다.
  3. 장애 복구

    • 높은 가용성: 컨슈머 그룹 내의 특정 컨슈머가 장애를 일으키면, 해당 컨슈머가 처리하던 파티션의 데이터는 다른 컨슈머에게 자동으로 할당 됩니다. 이를 통해 데이터 처리가 중단되지 않고 지속될 수 있습니다.
    • 자동 재할당: 장애가 발생한 컨슈머가 다시 정상 작동하게 되면, 카프카는 자동으로 파티션을 재할당하게 됩니다.

@ehddnr301 ehddnr301 merged commit d2ac2a7 into main Aug 25, 2024
1 check passed
github-actions bot pushed a commit that referenced this pull request Aug 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants