NW-book-club / apache-kafka-application-programming

아파치 카프카 어플리케이션 프로그래밍 with 자바 (최원영)
0 stars 0 forks source link

Chapter 1 - 들어가며 #1

Open KKambi opened 2 years ago

KKambi commented 2 years ago

느낌


바이트 코드? 바이너리 코드?

4p) 카프카 클라이언트에서는 기본적으로 ByteArray, ByteBuffer, Double, Long, String 타입에 대응한 직렬화, 역직렬화 클래스가 제공된다. 어떤 데이터 포맷이든 직렬화, 역직렬화해서 통신할 수 있다.

  1. 바이너리 코드
    • 어떤 정보든지 이진코드로 변환한 것
    • 기계어보다 넓은 범위의 포맷이라고 생각된다.
  2. 기계어
    • CPU가 직접 해독하고 실행할 수 있는 이진 코드 (low-level language)
    • CPU 제조사에 따라 사용되는 기계어가 달라질 수 있음
  3. 바이트 코드
    • Virtual Machine이 이해할 수 있는 이진 코드
    • 가상 머신이 이해할 수 있는 코드 ex) JVM은 Java Byte Code를 이해한다.
    • Java Source (high-level language, .java) -> 자바 컴파일러 -> Object code (목적파일, .class)
    • 자바 바이트 코드는 runtime에 JIT(Just-In-Time) 컴파일러에 의해 기계어로 변환된다.


(질문) 배치 전송 -> 낮은 지연?

4p) 데이터를 묶음 단위로 처리하는 배치 전송을 통해 낮은 지연과 높은 데이터 처리량을 가진다. -> 총 통신 횟수가 줄어드니까 결국 지연 시간도 줄어든다는 의미?


데이터 웨어하우스(Data Warehouse, DW)

개념

1ba563e5-7ba8-404e-bc65-722a3785bf1f

데이터 웨어하우스란 무엇입니까? | 주요 개념 | Amazon Web Services 데이터 웨어하우스 - 위키백과, 우리 모두의 백과사전 사용자의 의사 결정에 도움을 주기 위해, DB에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스

다른 키워드와의 비교

데이터 레이크

데이터 마트


카프카 브로커?

카프카 클러스터는 다수의 브로커(서버)로 구성된다고 하는데, 가끔 역할이 헷갈릴 때가 있다. 쉽게 이해할 수 있는 그림! kafka 시스템 구조 알아보기


배치 데이터와 스트림 데이터

(12p) 카파 아키텍쳐는 스피드 레이어에서 모든 데이터를 처리하므로 서비스에서 생성되는 모든 종류의 데이터를 스트림 처리해야한다.

  1. 배치 처리
    • 일정 주기로 데이터를 처리하여 결과를 만들어낸다.
    • 그 결과 특정 기간의 한정된 데이터가 만들어진다. 그래서 시작과 끝이 명확하다. (bounded data)
  2. 스트림 처리
    • 데이터의 기간이 한정되어 있지 않다 (unbounded data, 입력 데이터가 무한하다)
    • 시간이 흐르며 데이터가 계속해서 수신된다.
    • 시작과 끝을 정의하지 않는다.
    • 데이터 스트림의 무한한 특성을 고려할 때 스트림 프로세서는 스트림이 새로운 데이터를 제공하는 한 지속적으로 작동해야 한다.
    • 데이터가 시스템에 도착할 때의 데이터 처리에 대해 관심 있다. (입력데이터는 스트림 처리 시스템에 도착한 일련의 이벤트)
    • 스트림 처리 프로그램은 입력 크기가 잠재적으로 무한하다고 가정하는 프로그램

Spark에선 스트림 처리를 위해 micro-batch라는 개념을 사용한다. 아주 작은 배치로 마치 실시간 처리하는 것처럼 보이는듯?

jjy0918 commented 2 years ago

카프카의 특징

  1. 높은 처리량
    • 하나의 커넥션에 하나의 데이터만 전달하는 것이 아니라 데이터를 묶어 전달하기 때문에 효율적이다!
  2. 확장성
    • 카프카는 환겨에 따라 안정적으로 Scale-in, Sacle-out이 가능하다!
  3. 영속성
    • 카프카는 메모리가 아닌 디스크를 이용하기 때문에 안정적으로 데이터를 처리할 수 있다.
    • 혹시 시스템에 장애가 발생하더라도 안정적으로 데이터를 처리할 수 있다.
  4. 고가용성
    • 여러대의 브로커를 통해 데이터를 복제하여 안정적이다.
    • 일반적으로 3대 이상의 브로커를 세팅하는 것을 추천한다.

카프카는 어떻게 디스크를 사용해도 빠를까?

image

참고: https://cloudnweb.dev/2019/05/heres-what-makes-apache-kafka-so-fast-kafka-series-part-3/ https://preparingforcodinginterview.wordpress.com/2019/10/04/kafka-3-why-is-kafka-so-fast/