Microservices Architecture / / 2024. 11. 7. 10:28

Kafka의 Source, Target, Topic, Partition

1. Source (소스)

 

Source는 Kafka에 데이터를 전송하는 시작점으로, 다양한 애플리케이션이나 시스템이 Source 역할을 할 수 있습니다. Source는 Kafka에 데이터를 전송하기 위해 Producer API를 사용하여 특정 토픽에 데이터를 지속적으로 전송하게 됩니다.

 

Source의 예시와 구성

 

애플리케이션 로그: 예를 들어 웹 애플리케이션에서 사용자 행동 데이터를 실시간으로 Kafka에 전송하여 로그를 수집합니다.

IoT 센서 데이터: IoT 장비들이 센서 데이터를 Kafka에 전송하여 실시간으로 모니터링할 수 있습니다.

데이터베이스 변경 사항: 데이터베이스가 업데이트될 때마다 해당 변경 사항을 Kafka로 전송해 데이터베이스의 변경 사항을 여러 시스템에서 공유하도록 할 수 있습니다.

 

Source의 역할과 데이터 전송 흐름

 

데이터 생산: Source는 주기적, 혹은 이벤트 기반으로 Kafka에 데이터를 전송합니다.

전송의 신뢰성: Source는 메시지 전송 과정에서 Kafka의 Producer 설정에 따라 데이터 신뢰성을 보장하며, 필요에 따라 acks 옵션을 통해 데이터가 손실되지 않도록 설정할 수 있습니다.

토픽 분류: Source는 여러 가지 데이터 유형에 따라 서로 다른 토픽을 생성하여 분류하고, 이를 통해 다양한 데이터가 혼동 없이 분리되어 저장됩니다.

 

2. Target (타겟)

 

Target은 Kafka의 데이터를 소비하고 이를 필요한 시스템으로 전송하거나 비즈니스 로직에 맞게 처리하는 역할을 합니다. Target은 Consumer API를 통해 Kafka의 메시지를 읽어 들입니다. 이를 통해 다양한 애플리케이션이 실시간으로 데이터를 처리하고 활용할 수 있게 됩니다.

 

Target의 예시와 구성

 

데이터 분석 시스템: Kafka에서 수신한 데이터를 빅데이터 분석 시스템(예: Hadoop, Spark)으로 전송하여 실시간 분석에 사용합니다.

알림 시스템: 사용자의 특정 행동이나 시스템 이벤트를 감지하여 알림 메시지를 전송할 수 있습니다. 예를 들어, 특정 거래가 발생했을 때 사용자에게 알림을 보낼 수 있습니다.

데이터베이스 업데이터: Kafka에서 데이터를 읽고 이를 데이터베이스에 저장하여, 최신 데이터를 데이터베이스에 반영할 수 있습니다.

 

Target의 역할과 데이터 소비 흐름

 

실시간 데이터 소비: Target은 지속적으로 Kafka에서 데이터를 소비하며, 필요한 경우 오프셋을 관리하여 처리 완료된 위치를 기록합니다.

데이터 처리: Target은 Kafka로부터 받은 데이터를 변환하거나 필터링한 후 필요한 시스템에 적절한 형식으로 전달합니다.

파티셔닝: Target은 Kafka 파티션 구조에 따라 데이터를 병렬로 처리할 수 있어, 처리 속도가 향상됩니다.

 

3. Topic (토픽)

 

Topic은 Kafka에서 데이터를 그룹으로 나누어 관리하는 논리적 구분 단위입니다. 모든 메시지는 특정 토픽에 속하며, Kafka에서 데이터를 저장하고 관리하는 기본 단위가 됩니다.

 

Topic의 특징

 

데이터 구분: 여러 토픽을 생성하여 서로 다른 유형의 데이터를 구분합니다. 예를 들어, payment_events, user_activity와 같은 토픽을 만들어 각각 결제 정보와 사용자 활동 데이터를 구분할 수 있습니다.

로그 유지: 토픽은 메시지를 시간 순서대로 저장하며, 소비자에게 메시지를 순차적으로 제공하여 데이터의 일관성을 보장합니다.

내결함성: 토픽 내 데이터는 레플리카로 여러 파티션에 복제되어, 일부 브로커가 다운되더라도 데이터 유실을 방지합니다.

 

Topic 생성 예시

./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 5 --topic orders

 

이 명령어는 orders라는 이름의 토픽을 생성하며, 5개의 파티션3개의 레플리카를 설정하여 높은 가용성을 확보할 수 있도록 합니다.

 

Topic 내 데이터 저장 방식

 

파티션별로 분산 저장: 하나의 토픽은 여러 파티션으로 나뉘며, 각 파티션에는 메시지가 순서대로 저장됩니다.

읽기 및 쓰기 성능 최적화: 파티션 단위로 메시지가 저장되고 관리되기 때문에, 여러 Consumer가 병렬로 데이터를 읽어들일 수 있습니다.

 

4. Partition (파티션)

 

Partition은 토픽의 데이터를 물리적으로 분산하여 저장하는 단위입니다. 파티션을 통해 Kafka는 대량의 데이터를 효율적으로 관리하고, Consumer가 병렬로 데이터를 처리할 수 있게 합니다.

 

파티션의 주요 특징

 

병렬 처리 지원: 파티션 단위로 Consumer가 데이터를 병렬로 처리할 수 있어 대규모 데이터 처리가 가능합니다.

오프셋 관리: 각 파티션에는 고유한 오프셋이 있으며, Consumer는 오프셋을 통해 어디까지 데이터를 읽었는지 추적할 수 있습니다. 이를 통해 데이터 처리 상태를 쉽게 관리할 수 있습니다.

리더와 팔로워 구조: 각 파티션에는 리더와 여러 팔로워가 있으며, 리더는 읽기/쓰기 작업을 처리하고, 팔로워는 리더의 데이터를 복제하여 데이터 안정성을 보장합니다.

 

파티션 할당 및 데이터 분산

 

메시지 키: 메시지에 키가 있으면 같은 키를 가진 메시지는 동일한 파티션에 저장됩니다. 예를 들어, 사용자 ID를 키로 지정하면 같은 사용자의 데이터가 한 파티션에 모이게 됩니다.

라운드 로빈: 메시지 키가 없는 경우 라운드 로빈 방식으로 파티션을 순차적으로 선택하여 데이터를 분산합니다. 이를 통해 데이터가 고르게 분포됩니다.

 

예시

 

예를 들어, user_activity라는 토픽이 3개의 파티션으로 나뉘어 있는 경우:

Partition 0: 메시지 오프셋이 0, 1, 2, … 순서로 저장됩니다.

Partition 1: 메시지 오프셋이 0, 1, 2, … 순서로 저장됩니다.

Partition 2: 메시지 오프셋이 0, 1, 2, … 순서로 저장됩니다.

 

Consumer는 각 파티션에서 병렬로 데이터를 읽어 처리하며, 오프셋을 기준으로 데이터가 중복 없이 소비됩니다.

 

요약

 

Source는 데이터를 생성하여 Kafka로 전송하는 시작점입니다. 다양한 소스가 Producer API를 통해 메시지를 Kafka로 보냅니다.

Target은 Kafka에서 데이터를 소비하여 처리를 수행하거나 다른 시스템으로 데이터를 전송합니다.

Topic은 데이터를 논리적으로 구분하는 단위로, 서로 다른 유형의 데이터를 관리할 수 있도록 도와줍니다.

Partition은 데이터를 물리적으로 분산하여 저장하는 단위로, 병렬 처리 및 데이터 확장성을 지원합니다

'Microservices Architecture' 카테고리의 다른 글

Apache Kafka와 ActiveMQ  (0) 2024.11.08
Amazon EC2, SC3  (9) 2024.11.08
Kafka의 Lag와 Burrow  (0) 2024.11.07
Kafka의 Broker, Replication, ISR (In-Sync Replica)  (1) 2024.11.07
Kafka의 Producer와 Consumer  (0) 2024.11.07
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유