Programming
-
kafka retention 용량 설정 값 이해하기Programming 2023. 5. 1. 01:17
overview retention.bytes옵션을 통해 retention 용량을 1GB로 설정했었는데 토픽의 용량이 7GB가 넘어가는 것들이 생겼다. 브로커당 용량이라고 이해해도 3GB넘지 않을 것이고 리플리케이션 팩터가 2라서라기엔 2GB를 훌쩍넘는다. 7GB라니...오버에도 한참 오버했다. 도대체 이 설정값들은 각각 무엇을 의미하는 것이고 어떤 매커니즘으로 메세지들이 지워지는지 파악해보자 Topic retention 용량 설정에 대해서 알아보기 전에 토픽에 대해서 간단히 정리해보자 partitions 리더 파티션과 팔로워 파티션으로 구분(replication-factor가 1인 경우 리더 파티션만 존재) 리더 파티션은 프로듀서 또는 컨슈머와 직접 통신하는 파티션으로 읽기, 쓰기 연산을 담당 팔로워 파..
-
debezium server 정리 및 트러블슈팅Programming/java 2023. 2. 6. 00:27
개요 CDC(Change Data Capture) CDC는 변경 데이터 켑처이라는 의미로 주로 데이터베이스와 같은 데이터 스토어의 데이터 변경을 포착하여 ETL, 감사(audit), 캐싱과 같은 다양한 후속 처리를 하는데 사용한다. Debezium 이름은 DB와 주기율표에 많은 요소 이름에 사용되는 -ium 접미사의 조합 Debezium은 다양한 데이터베이스를 모니터링하며 모든 이벤트를 대상으로 변경 사항을 분을 거의 즉시 응답하는 분산 오픈 소스 플랫폼이다. debezium은 결함과 실패를 허용하도록 설계되었고 수행하는 유일한 방법은 분산 시스템을 사용하는 것이다. Debezium은 모니터링 프로세스 또는 커넥터를 여러 시스템에 분산시킬 수 있고 문제가 발생하면 커넥터를 다시 시작할 수 있다. 카카오커..
-
ELT 툴 Airbyte 개요 및 M1 mac local환경 세팅Programming 2022. 4. 13. 15:13
Airbyte? 데이터 통합을 쉽고 확장가능성 있게 만들어주는 EL(T) Tool CDC기능을 사용 준실시간성으로 데이터를 가져올 수 있다 비교적 설치가 간편하다 지원하는 데이터 connector들이 많다 DB이외에 페이스북, 인스타그램 등 다양한 SNS과도 연동 가능하며 140개 이상의 커넥터를 지원 T(Transform)부분의 지원이 빈약하다 아직 Hive나 Glue 저장을 지원하지는 않는다 쿠버네티스, 에어플로우, dbt 등과 통합하여 사용할 수 있다. ex) airflow + airbyte + dbt on kubernates Architecture Airbyte는 플랫폼과 커넥터 이렇게 두가지 컨셉으로 나뉜다. 플랫폼은 모든 수평적 서비스들에서 요구하는 설정과 데이터의 움직임을 운영하는(UI, c..
-
airflow의 새로운 경쟁자 오케스트레이션 플랫폼 dagsterProgramming/python 2021. 12. 23. 23:42
Open Source Data Stack Conference 아래 내용은 위 동영상의 내용을 번안하고 정리한 내용입니다. 위 사진의 기술들은 다양한 방식들로 서로 의존성이 존재한다. 예를들어 스노우플로우나 다른 데이터 웨어하우스에서 데이터가 만들어지기 전까지 dbt를 실행할 수 없다. 그리고 dbt가 그것의 모델을 업데이트하기 전까지 Grouparoo같은 리버스 ETL은 새로운 정보를 적재할 수 없다. 이런 의존성들간에 Ordering과 Excute를 조율하는 것이 오케스트레이션의 목적이다. 왜 dagster여야 하는가? 전통적인 오케스트레이션은 스케줄링과 실행을 통합하는 시스템과 가시적이고 알림을 운영할 수 있어야 한다. 여기에 더해져서 덱스터는 유용한 metadata를 생성하는 과정에서 데이터가 어디..
-
[에러로그]parquet파일 변환 fastparquet v.s pyarrowProgramming/python 2021. 11. 19. 16:06
에러 내용 parquet로 변환한 파일을 read해서 확인했을 때 일부 컬럼의 로우 값이 제대로 인코딩되지 않은 문제가 있다. 다른 컬럼의 값들은 정상적으로 표출되었지만 특정 컬럼에서만 이상이 생기는 것을 확인했다. to_parquet 메소드 pandas 라이브러리에서 to_parquet 메소드를 사용해서 데이터프레임을 parquet 포맷으로 변경할 때, 사용할 수 있는 엔진의 옵션은 두 가지가 있다. pyarrow와 fastparquet이 바로 그것인데, pandas 내부적으로 이 두 라이브러리들을 가져와서 parquet파일로 변환하게 된다. 라이브러리를 선택하는 방법은 engine 파라미터에 해당하는 라이브러리명을 적어주면 된다. df.to_parquet("test.parquet", engine="p..
-
dockerfile 한국어 로케일 설정(feat. 우분투와 데비안의 차이)Programming 2021. 8. 10. 15:43
어플리케이션 내부나 쉘에서 한글이 등장할 때가 있는데 그때마다 오류가 생겨서 아예 언어셋을 UTF-8 인코딩된 한글 언어셋으로 설정했다. 해당 언어셋을 설치하기 위해서 아래와 같은 명령어를 dockerfile에 명시했다. RUN apt-get update && apt-get install -y locales git # Locale RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV PYTHONIOENCODING=utf-8 빌드 한 뒤에 docker run -it imagename /bin/bash 로 도커 내부의 쉘로 접속했더니 다음과 같은 경고가 떴다. bash: warning: setlocale: LC_ALL: cannot c..
-
파이썬 데코레이터에서 wraps를 사용해야 하는 이유Programming/python 2021. 6. 27. 22:48
파이썬에는 함수를 파라미터로 받아서 함수를 반환하기 위해서 데코레이터를 사용한다. 말하자면 함수의 함수인 셈인데, 파라미터 변환이나 코드 추적(로깅), 유효성 검사 및 재시도 로직 등 이 데코레이터를 사용하면 다양한 작업들을 손쉽게 처리해줄 수가 있다. 이 데코레이터를 사용할 때에는 주의해야할 점이 몇가지 있는데 오늘은 그 주의할 점에 대해서 이야기 하려고 한다. import logging as logger def trace_decorator(function): def wrapped(*args, **kwargs): """ decorator docstring """ logger.info("%s 실행", function.__qualname__) return function(*args, **kwargs) re..
-
Luigi로 batch job 모니터링 및 스케줄링Programming 2021. 6. 19. 17:28
개요 Spotify에서 개발한 오픈 소스 실행 프레임워크로, 복잡한 데이터 파이프 라인을 Python으로 배치 작업을 만들어 실행할 수 있다. 종속성 해결, 워크 플로 관리, 시각화, 실패 처리, 명령 줄 통합 등을 처리하는데 사용한다. 하이브나 Pig 또는 Cascading과 같은 로우 레벨에서의 데이터 전처리에 초점에 맞춰져있는 이런 프레임워크를 대체할 수는 없다. 대신에 많은 task들을 하나로 합치게 도움을 준다. 이름이 루이지인건 아마도 슈퍼마리오의 루이지가 배관공이라서 파이프라인을 다루는 일이기 때문이 아닐까 추측 기본 구조 Task class ExampleTask(luigi.Task): # Parameter 정의 count = luigi.IntParameter(default=7) def re..