so3500 / TIL

0 stars 0 forks source link

2024-01-21 #11

Open so3500 opened 5 months ago

so3500 commented 5 months ago

인프런강의 : 아파치 카프카 애플리케이션 프로그래밍 by 데브원영

책 : 챔피언의 마인드

so3500 commented 5 months ago

[ 카프카의 탄생 ] 데이터 파이프라인의 복잡도 증가 데이터를 한 곳에 모아서 처리 할 수 있도록 중앙집중화 애플리케이션 간 의존도를 낮추기 위해 메시지 큐 구조를 가져감

커밋 : 데이터를 가져면서 파티션의 몇번째 데이터를 읽었는지 기록함. 이 커밋을 가지고 다음에 읽을 데이터 시작점을 알 수 있다.

[ 카프카가 데이터 파이프라인으로 적합한 4가지 이유 ]

높은 처리량 데이터를 묶어서 보내서 네트워크 비용 감소, 배치로 빠르게 처리 파티션 단위로 처리하여 병렬처리

확장성 소스 데이터가 가변적인 환경에서 안정적으로 확장 가능하도록 설계 카프카 클러스터를 통한 스케일 인, 아웃 가능

영속성 전송받은 데이터를 파일 시스템에 저장 (다른 메시징 플랫폼은 메모리에 저장) 운영체제 레벨에서 파일 시스템을 최대한 활용. 파일 I/O 성능 향상을 위해 페이지 케시 영역을 메모리에 따로 생성하여 사용

영속성 : 데이터를 생성한 프로세서가 종료되더라도 데이터가 사라지지 않는 특성

고가용성 카프카 클러스터는 일부 서버에 장애가 발생하더라도 무중단으로 안전하고 지속적으로 데이터 처리 가능 데이터의 복제(replication)를 통해 고가용성 특징을 가지게 됨. 다른 브로커에도 데이터 저장 서버에 직접 운영하는 온프레미스(on-premise) 환경의 서버 랙 또는 퍼블릭 클라우드(public cloud)의 리전 단위 장애에도 데이터를 안전하게 복제할 수 있는 브로커 옵션들이 있음

[ 빅데이터 아키텍쳐의 종류와 카프카의 미래 ]

초기 빅데이터 플랫폼 -> 람다 아키텍쳐 -> 카파 아키텍쳐 -> 스트리밍 데이터 레이크

초기 엔드 투 엔드로 각 서비스 애플리케이션으로부터 데이터를 배치로 모음

한계. 유연하지 못한 구조 실시간 생성 데이터들에 대한 인사이트를 빠르게 전달하지 못함 데이터 히스토리 파악이 어렵고 파편화되면서 데이터 거버넌스를 지키기 어려움

람다 배치 레이어 : 데이터를 모아서 특정 시간, 타이밍마다 일괄 처리 서빙 레이어 : 가공된 데이터를 데이터 사용자, 서비스 애플리케이션이 사용할 수 있도록 데이터가 저장된 공간 for 데이터 분석가, 사용자 등 스피드 레이어 : 서비스에서 생성되는 원천 데이터를 실시간으로 분석하는 용도로 사용. 배치 레이어에 비해 낮은 지연

한계. 레이어가 2개로 나뉘기 때문에 데이터 분석, 처리 로직이 2벌로 각 레이어에 존재 배치 데이터와 실시간 데이터를 융합 처리 시에는 다소 유연하지 못한 파이프라인 생성

카파 배치 레이어를 제거하고 스피트 레이어에서 데이터를 모두 처리함 람다 아키텍쳐의 단점이었던 로직의 파편화, 디버깅, 배포, 운영 분리 이슈 제거 로그는 배치 데이터를 스트림으로 표현하기에 적합함 배치 데이터를 로그로 표현할 때는 각 시점의 배치 데이터를 변환 기록(change log)을 시간 순서대로 기록함으로써 각 시점의 모든 스냅샷 데이터를 저장하지 않고도 배치 데이터 표현

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

배치 데이터를 처리하는 방법 - 하둡

스트림 데이터를 배치로 사용하는 방법 - 카프카 로그에 시간을 남기고 이를 기준으로 데이터를 처리하면 스트림으로 적재된 데이터도 배치로 처리할 수 있다. e.g. 2021년 신입생 목록 배치 처리 - 스트림 데이터로 적재된 1/1 ~ 12/31 데이터를 구체화된 뷰(Materialized View)로 가져오면 배치 처리 가능

스트리밍 데이터 레이크 카파 아키텍쳐에서 서빙 레이어 제거 아이디어 : 스피드 레이어로 사용되는 카프카에 분석과 프로세싱을 완료한 대용량 데이터를 오랜 기간 저장하고 사용하는 것 개선사항 : 자주 사용하는 데이터와 그렇지 않은 데이터를 구분할 필요가 있음

so3500 commented 5 months ago

[ Kafka Broker & Cluster ] 카프카 생태계

프로듀서 : 토픽 데이터 생산 컨슈머 : 토픽 데이터 소비 스트림즈 : 토픽에 있는 데이터를 처리하여 다시 토픽에 넣음 (st 커넥스(소스) : DB, ES 등 외부 시스템 데이터를 읽어 토픽에 넣음. 프로듀서 역할 커넥트(싱크) : 토픽 데이터를 읽어 DB, ES 등 외부 시스템에 전송. 컨슈머 역할

카프카 브로커 / 클러스터 / 주키퍼

주키퍼 카프카 클러스터 운영에 필요한 애플리케이션 (~2.x) 3.x 부터 대체품(KRfaft) 가 나왔으나 아직까진 완벽하게 주키퍼를 대체하지 못하여 아직까진 주키퍼를 많이 사용한다고 함

브로커 카프카 클라이언트와 데이터를 주고받기 위해 사용 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션 1 서버 = 1 카프카 브로커 프로세스 일바적으로 데이터를 안전하게 보관 및 처리하기 위해 3대 이상의 브로커 서버를 1개의 클러스터로 묶어 운영함 한 클러스터로 묶인 브로커는 프로듀서가 보낸 데이터를 안전하게 분산 저장하고 복제함

여러개의 카프카 클러스터가 연결된 주키퍼 카프카 클러스터 실행을 위해 주키퍼가 필요함 주키퍼의 서로 다른 znode에 클러스터 지정하면 됨 root znode에 각 클러스터별 znode를 생성하고 클러스터 실행 시 root가 아닌 하위 znode로 설정 카프카 3.0 부터는 주키퍼가 없어도 클러스터 동작 가능 (KRaft) 하지만 상용환경 적용 사례는 많지않음.

브로커의 역할 - 컨트롤러, 데이터 삭제, 컨슈머 오프셋 저장, 코디네이터, 데이터 저장

컨트롤러 클러스터 다수 브로커 중 한대가 컨트롤러 역할 다른 브로커들의 상태를 체크하고 클러스터에서 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 재분배 컨트롤러 역할을 하는 브로커가 장애 시 다른 브로커가 역할을 대신함

데이터 삭제 컨슈머가 데이터를 가져가더라도 토픽의 데이터는 삭제되지 않으며 컨슈머나 프로듀서가 데이터 삭제를 요청할 수 없음 브로커만 데이터를 삭제할 수 있음 삭제는 파일 단위로 이루어지며 '로그 세그먼트(log segment)'라고 부름 이 세그먼트에는 다수 데이터가 들어 있기 때문에 일반적인 데이터베이스처럼 특정 데이터를 선별하여 삭제할 수 없음

컨슈머 오프셋 저장 컨슈머 그룹은 토픽이 특정 파티션으로부터 데이터를 가져가서 처리하고 이 파티션의 어느 레코드까지 가져갔는지 확인하기 위해 오프셋을 커밋함 커밋한 오프셋은 __consumer_offsets 토픽에 저장됨 이를 참고하여 컨슈머 그룹은 다음 레코드를 가져가서 처리함

코디네이터 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배함 컨슈머가 그룹에서 빠지면 매칭되지 않은 파티션을 정상 동작하는 컨슈머로 할당하여 데이터가 끊임없이 처리되도록 함 이 과정을 리밸런스(rebalance)라고 함

so3500 commented 5 months ago

중요한 날에 절대 해서는 안 되는 생각들

결과를 너무 강조하지 마라. 최고의 경기는 현재 지금 이 순간에만 만들어진다. 과정에 집중하면, 점수는 알아서 따라온다. 내가 할 수 있는 일에만 오롯이 신경을 쏟아라.

지나치게 애쓰지 마라. 지나치게 애쓰다가 긴장하거나 무모해지는 대신 경기 내내 꾸준하게 플레이 하자. 늘상 하던 루틴을 경기 당일에도 그대로 따르는 것이 중요하다. → 그래서! 무엇이든 하루하루 꾸준히 하는게 중요하다.

부정적인 일을 되짚지 마라.

머릿속 잡음 차단하기

중요한 것은, 당신이 상상하는 것을 시각화하는 것이다. 시각화를 많이 할 수록 이뤄질 가능성이 크다.

생각은 느낌을 결정하고 느낌은 성적에 영향을 준다. 이 행동이 인생에 도움이 되겠지만 인생을 결정짓지는 않는다. 자신이 바라는, 혹은 두려워하는 결과를 걱정하지 말고 그 과정과 실행에 몰두하라.

인생의 불확실함을 인지할 것

‘라이프 밸런스’라는 말은 잘못된 인식을 심어줄 수 있다. 모든 사물은 끊임없이 변화하기 때문이다. 인생의 모든 측면에서 균형이나 완벽한 상태를 기대하는 것은 좌절과 실망은 안길 뿐이다. 인생은 불분명하고 불확실하며 살다 보면 자주 균형이 무너진다는 사실을 받아들여라.

마음속에서 감정적 균형을 찾으려고 노력하고 무게 중심을 잡는 편이 낫다. 변화에 몸을 맡기되, 자신이 통제할 수 있는 것만을 통제하라.

내가 어떻게 할 수 없는 일을 위해 애쓰지마라. 대신 스스로를 다스리고, 통제할 수 있는 변수를 관리하라.

챔피언이 변화를 받아들이는 방법

유연한 태도를 가지고 파격적인 변화로 두들겨 맞는 순간 즉시 벌떡 일어나기. 낙심하지 않기. 회피하지 않기. 감정적인 벽에 부딪혔다면 주위에 고민을 털어놓고 필요하다면 도움 청하기.