공유할 서비스 선택

TECH


TECH

Middleware (오픈소스 활용-32) Apache Kafka 란? 다운로드 및 샘플 소개

페이지 정보

작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 262회 좋아요 0회 작성일 24-06-24 16:34

본문

안녕하세요. "미들웨어" 입니다. 

 



오늘은 Kafka에 대해 정리해보겠습니다. 

요즘 종종 "Apache에서 Kafka 활용해봤어?" 질문을 듣게되네요.

이런 질문을 받으면 Kafka..들어는 봤는데 뭐하는지 잘 모르겠더라구요.

그래서 정리한번 해봤습니다.

Kafka란 무엇이고, 어떻게 활용 가능한지.. 제가 궁금해서요.




1. Kafka 란?

Apache kafka는 Scala과 Java로 개발된 오픈소스 데이터 스트리밍 플랫폼으로, 본래 메시지 큐로 설계되었으나 이벤트 스트리밍 플랫폼으로 발전하였다고 하네요.

창시자가 Kafka라서 Kafka라고 사용했네요

여튼.. 좀 더 깊이있게 정리해 보겠습니다.

Apache Kafka는 대규모 데이터 스트리밍과 실시간 데이터 파이프라인을 구축하기 위해 사용되는 분산 이벤트 스트리밍 플랫폼입니다. Kafka는 주로 다음과 같은 용도로 사용됩니다

 

실시간 데이터 파이프라인: 다양한 소스에서 데이터를 수집하고 실시간으로 분석 시스템 또는 데이터베이스에 전달합니다.
- 이벤트 스트리밍: 다양한 이벤트(예: 사용자 행동, 시스템 로그, 트랜잭션)를 실시간으로 캡처하고 처리합니다.
- 데이터 통합: 여러 시스템 간의 데이터 통합을 쉽게 만들어 줍니다.
- 로그 집계: 서버 로그를 수집하여 중앙집중식 로그 저장소로 전송합니다.

 



Kafka의 주요 구성 요소는 다음과 같습니다:

- 프로듀서(Producer): Kafka로 데이터를 보내는 역할을 합니다.

- 컨슈머(Consumer): Kafka에서 데이터를 읽는 역할을 합니다.
- 브로커(Broker): 데이터를 저장하고 관리하는 Kafka 서버입니다. 여러 개의 브로커가 클러스터를 이룹니다.
- 토픽(Topic): 데이터가 카테고리화되어 저장되는 논리적 단위입니다.
- 파티션(Partition): 각 토픽이 나누어지는 물리적 단위로, 병렬 처리를 가능하게 합니다.
- 리더와 팔로워(Leader and Follower): 파티션은 리더와 팔로워 복제본으로 구성되어 있어 고가용성을 보장합니다.



2. Kafka 와 기존 MQ의 차이점

Apache Kafka와 전통적인 메시지 큐(MQ)는 데이터 전송 및 처리의 역할을 하지만, 여러 면에서 차이점이 있습니다. 주요 차이점을 살펴보면 다음과 같습니다

 

데이터 저장 및 처리 방식:

- Kafka: 로그 기반의 데이터 저장소로, 데이터가 디스크에 영구 저장됩니다. 데이터가 일정 기간 동안 저장되어 여러 컨슈머가 각각 독립적으로 데이터를 읽을 수 있습니다.
- MQ: 메시지가 큐에 저장되며, 메시지가 소비되면 큐에서 삭제됩니다. 보통 하나의 메시지는 하나의 컨슈머만 소비할 수 있습니다

처리량

- Kafka: 매우 높은 처리량을 자랑합니다. 수백만 개의 메시지를 초당 처리할 수 있습니다.
- MQ: 일반적으로 Kafka보다 낮은 처리량을 가지고 있습니다.



3. Apache Kafka 설치 및 적용방법

- Kafka 다운로드 및 설치: 아래 경로에서 Kafka를 다운로드하고 설치합니다.
https://kafka.apache.org/downloads
6a6b3278cdf56e4c2a76739a4a04b6c4_1719214215_232.png


 
- Kafka 서버 실행: 다운로드한 Kafka 디렉토리에서 bin 폴더로 이동하여 다음 명령어로 Zookeeper와 Kafka 서버를 실행합니다

 # Zookeeper 실행

bin/zookeeper-server-start.sh config/zookeeper.properties

 

# Kafka 서버 실행

bin/kafka-server-start.sh config/server.properties

 

 

- 토픽 생성: Kafka에서 메시지를 주고받을 토픽을 생성합니다

 

 bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

 

 
- Java 프로듀서 예제

 

 import org.apache.kafka.clients.consumer.ConsumerRecord;

import org.apache.kafka.clients.consumer.ConsumerRecords;

import org.apache.kafka.clients.consumer.KafkaConsumer;

import org.apache.kafka.clients.consumer.ConsumerConfig;

import org.apache.kafka.common.serialization.StringDeserializer;

 

import java.time.Duration;

import java.util.Collections;

import java.util.Properties;

 

public class SimpleConsumer {

    public static void main(String[] args) {

        String topicName = "test-topic";

        Properties props = new Properties();

 

        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

        props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");

        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

 

        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

        consumer.subscribe(Collections.singletonList(topicName));

 

        while (true) {

            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));

            for (ConsumerRecord<String, String> record : records) {

                System.out.printf("Received message: key = %s, value = %s, offset = %d%n",

                                  record.key(), record.value(), record.offset());

            }

        }

    }

}

 

 

- Maven Dependencies

위의 예제를 실행하기 위해 필요한 Maven 종속성을 pom.xml 파일에 추가합니다

 

 <dependencies>

    <dependency>

        <groupId>org.apache.kafka</groupId>

        <artifactId>kafka-clients</artifactId>

        <version>3.0.0</version>

    </dependency>

</dependencies>

 

위의 Java 파일을 컴파일하고 실행합니다.

먼저 프로듀서를 실행하여 메시지를 보내고, 이후에 컨슈머를 실행하여 메시지를 수신합니다.

위 예제는 Kafka를 사용하여 간단한 메시지 전송과 수신을 보여줍니다.

 

 

 

4. Apache Kafka를 활용한 설치 아키텍처

Apache Kafka를 활용한 설치 아키텍처는 다양한 시스템 구성 요소와 함께 작동하여 실시간 데이터 스트리밍과 이벤트 처리를 구현합니다. 기본적인 Kafka 설치 아키텍처는 다음과 같은 구성 요소로 이루어집니다:

- 프로듀서(Producer): 데이터를 Kafka로 보내는 애플리케이션이나 시스템.
- Kafka 브로커(Broker): 데이터를 저장하고 관리하는 Kafka 서버.
- 주키퍼(ZooKeeper): Kafka 클러스터의 메타데이터와 분산 상태를 관리.
- 컨슈머(Consumer): Kafka에서 데이터를 읽는 애플리케이션이나 시스템.
- 토픽(Topic): 데이터가 카테고리화되어 저장되는 논리적 단위.

- apache Kafka를 잘 활용해서 아래와 같은 다이어그램을 완성해보면 좋겠네요. 

 

아래 이미지는 구글에서 찾아서 첨부합니다. 

6a6b3278cdf56e4c2a76739a4a04b6c4_1719214435_6793.png
 

그럼.. 이번 설명은 여기까지 하겠습니다. 

열공하세요~!

 

댓글목록

등록된 댓글이 없습니다.

TECH 목록
번호 제목 작성자 작성일 조회수
114 Middleware 미들웨어 아이디로 검색 전체게시물 08-19 83
(IMDG)를 활용한 session 구성 -2 오픈소스 (Hazelcast, Apache Ignite) 설치방법

카테고리 : Middleware

83 0
작성자 : 미들웨어 24/08/19
113 Middleware 미들웨어 아이디로 검색 전체게시물 08-09 109
(IMDG) Data Grid란? (IMDG)를 활용한 session 구성 -1

카테고리 : Middleware

109 0
작성자 : 미들웨어 24/08/09
112 Middleware 미들웨어 아이디로 검색 전체게시물 07-22 162
(오픈소스 활용-33) "ISTIO 이스티오" 쿠버네티스 서비스 시각화 구현에 필요한 데모설치

카테고리 : Middleware

162 0
작성자 : 미들웨어 24/07/22
111 Middleware 미들웨어 아이디로 검색 전체게시물 07-10 218
(Apache) mod_wl.so 에서 sticky session 사용방법 정리

카테고리 : Middleware

218 0
작성자 : 미들웨어 24/07/10
열람중 Middleware 미들웨어 아이디로 검색 전체게시물 06-24 263
열람중
(오픈소스 활용-32) Apache Kafka 란? 다운로드 및 샘플 소개

카테고리 : Middleware

263 0
작성자 : 미들웨어 24/06/24
109 Middleware 미들웨어 아이디로 검색 전체게시물 06-07 437
(Apache) Apache & Webtier에서 Nginx와 동일한 비동기 방식 처리 하기 (MPM-event)

카테고리 : Middleware

437 0
작성자 : 미들웨어 24/06/07
108 Middleware 미들웨어 아이디로 검색 전체게시물 05-21 551
(오픈소스 활용-31) (부하테스트 Tool) Jmeter 를 활용한 JDBC 부하테스트 방법 -2

카테고리 : Middleware

551 0
작성자 : 미들웨어 24/05/21
107 Middleware 미들웨어 아이디로 검색 전체게시물 05-07 791
(오픈소스 활용-30) (부하테스트 Tool) Jmeter 를 활용한 JDBC 부하테스트 방법 -1

카테고리 : Middleware

791 0
작성자 : 미들웨어 24/05/07
106 Middleware 미들웨어 아이디로 검색 전체게시물 04-22 537
(오픈소스 활용-29) was에서 T4CConnection (Locked) 발생시 해결방법

카테고리 : Middleware

537 0
작성자 : 미들웨어 24/04/22
105 Middleware 미들웨어 아이디로 검색 전체게시물 04-08 478
(오픈소스 활용-28) Java Flight Recorder 이란? Java 모니터링을 구현가능

카테고리 : Middleware

478 0
작성자 : 미들웨어 24/04/08
Total 114건
게시물 검색

주식회사 클럭스| 대표 : 이찬호| 사업자등록번호 : 107-87-27655
주소 : 서울특별시 영등포구 국회대로 800, 여의도파라곤
E-mail : sales@chlux.co.kr
Copyright © 클럭스 chlux.co.kr All rights reserved.
상단으로Top