나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

전체 글 103

[Kafka] consumer group offset change by python.

Kafka consumer 관련 2번째 글이다. 지난 글에서 LAG에 대해서 설명했는데, consumer group과 offset에 대한 설명을 빼 놓고 지나가니 이해하는데 부족할 수 있어 consumer group에 대한 개념 설명을 하고자 한다. 그리고 추가로 consumer group의 offset을 변경하고자 할 때가 발생할 수 있는데 간단한 python 코드로 offset을 변경하는 방법을 알아보자. offset을 왜 변경하지? 라는 질문이 있을 수 있는데, consumer group에 대해서 이해하면 질문에 대한 답이 저절로 될 듯 하다. 1. consumer group 아래 그림이 consumer group을 이해할 수 있는 가장 좋은 그림이다. Kafka의 Topic은 여러 partitio..

Big Data/Kafka 2018.12.31

[Kafka] consumer LAG 수집 및 elasticsearch 적재

Kafka에 저장된 데이터를 consumer를 통해 처리를 하고 있을 때, 개발한 코드로 데이터가 잘 처리되고 있는 건지 궁금할 때가 있다. consumer의 데이터 처리 상황을 주기적으로 모니터링 한다면 처리하지 못하고 Kafka에 남아있는 데이터 수치를 알아야 한다. Kafka에 남아 있는 데이터 수의 증감을 통해 consumer의 throughput도 계산할 수 있다. Kafka 문서에 보면 consumer group의 현재 position을 얻는 command가 있다. 다음은 해당 command인 kafka-consumer-group.sh의 실행 예제이다. > bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --g..

Big Data/Kafka 2018.12.28

[Kafka] Topic의 Replica 분배 로직 분석

Kafka에서 topic을 생성할 때, partition 별로 replica를 어떻게 할당하나 찾아보았다. 여러개의 broker를 가진 Kafka Cluster를 운영할 경우 각 broekr 마다 replica 불균형이 발생한다. 최고 topic 생성 이후에 broker shutdown 등 다른 이유에 의해 replica가 바뀔 수 있겠지만 topic 생성 최초에 partition 별 replica 할당이 어떻게 되나 궁금했기 때문이다. 그래서 topic이 생성하는 코드 안쪽에서 partition 분배 로직을 뒤졌다. partition 분배 로직에는 broker의 rack 설정이 있는 것과 없는 것 2개의 로직이 존재했다. 이 글에서는 rack이 없는 설정에 대해서 먼저 분석해 본다. 다음은 partit..

Big Data/Kafka 2018.11.22

Spark SQL

팀에서 spark SQL을 사용해서 사용자가 요청한 쿼리를 stream 처리하는 작업을 하고 있다. 그래서 spark SQL에 대해서 정리해 보고자 한다. 해당 블로그의 내용은 책 '스파크 2 프로그래밍'에서 대부분 참고했다. 1. RDD와의 차이점 spark의 기본 데이터 모델은 RDD 이다. 분산환경에서 메모리 기반으로 빠르고 안정적으로 동작하는 프로그램을 작성할 수 있는 장점이 있지만 아쉬운 점도 있었다. 그것은 "스키마"에 대한 표현방법이 없다는 것이다. spark 2.0 부터 DataSet으로 통합되어 "스키마" 있는 데이터 처리가 가능하다. "스키마"라는 단어를 처음 들었을 때, 제일 먼저 데이터베이스가 생각났다. 데이터베이스가 설정된 스키마에 따라 SQL문을 던지면 결과를 주듯이, DataS..

Big Data/Spark 2018.11.20

아트 인문학 여행

아트인문학 여행국내도서저자 : 김태진,백승휴출판 : 카시오페아 2015.05.25상세보기 유럽 여행을 가게 되면 미술관, 성당을 많이 찾게 된다. 그럼 걸작이라 불리는 많은 그림을 마주하게 되는데, 정작 그림 뒤에 숨어 있는 역사나 명작의 이유를 알지 못하면 그저 유명한 그림을 본 추억에 머물게 된다. 나 역시도 처음 이탈리아 여행에 다녀온 이후 르네상스 시대의 역사와 그림을 만든 장인의 삶이 궁금해졌었다. 이 책은 르네상스 시대의 이탈리아 장인들을 시대와 도시를 접목하여 소개하고 있다. 르네상스 미술의 발전과정과 발전이 이루어진 도시도 연관도 처음 알게 됐다. 책은 피렌체 --> 밀라노 --> 로마 --> 베네치아 순서로 소개하고 있다. 그렇게 소개한 이유는 르네상스의 발전이 위 도시의 순서로 이루어졌..

2018.08.06

위대하고 위험한 약 이야기

위대하고 위험한 약 이야기국내도서저자 : 정진호출판 : 푸른숲 2017.07.31상세보기 저자는 서울대 약학 대학에서 독성학을 전문분야로 하는 교수님이다. 모든 사람은 병이 찾아오고 그때 마다 약을 먹게 되는데 어떤 약을 어떻게 먹어야 하는지 궁금하여 읽게 된 책이다. 약을 정확히 쓰지 않으면 독이 되고, 약을 포함한 독성물질에 대한 이해 없이 사용하게 되면 생명의 위험이 따른다. 이런 위험성에 대한 경각심을 일깨워 준 책이다. 반면 약이 개발되어서 인류 역사 상 위대한 발전을 이룬 사건이 되기도 한다. [대표적인 약의 위험성] 예 - 탈리도마이드. 가습기 살균제 사건. 가습기 살균제 사건은 국내를 뜨겁게 달군 이슈 중 하나다. 아이의 건강을 위해 가습기 살균제를 사용했던 사람들은 오히려 아이의 생명을 ..

2018.06.25

주경철의 유럽인 이야기1

주경철의 유럽인 이야기 1국내도서저자 : 주경철출판 : 휴머니스트 2017.04.17상세보기 요즘 읽고 싶은 책을 골라보라고 했을 때, 역사책을 선택하는 횟수가 늘었다. 과거의 일들을 토대로 현재의 지혜를 얻을 수 있다는 생각 때문이다. 그럼 현재를 판단하는 지혜의 근거가 과거에 있다는 이유를 들라고 한다면 2가지를 들고 싶다. 사람들이 살아가면서 반복적으로 일어나는 사건과 현재의 모습이 있게 한 배경이 과거 역사에 있다는 점이다. 역사의 평가는 과거 사건의 분석으로 이루어지는데 사건을 일으키고 당하는 주체가 사람이라 했을 때, 과거 사람을 살펴보는 것이 흥미로울 수 밖에 없다. 이 책은 15~16세기 중세의 중요 유럽인을 다루고 있다. 워낙 유명해서 일대기를 알고 있던 사람도 있고, 이름만 알고 자세한..

2018.05.17

[python] list

알고 있는 내용을 정리하는 수준으로 블로그에 글을 적으려고 한다. python 문법에 대한 2번째 내용이다. 모든 언어에서 제일 많이 사용하는 데이터 구조인 list. python에서 유용한 것들 정리해 보자. 정의 방법# 빈 리스트 정의my_list = [] my_list = list() # 값과 함께 정의 (여러 데이터 타입들의 섞어서도 가능하다)my_list1 = [1,2,3] my_list2 = [“a”, “b”, “c”] my_list3 = [“a”, 1, “python”, 5] # list들의 list도 가능my_nested_list = [my_list1, my_list2] # list의 병합combo_list = my_list1 + mylist2 # [1, 2, 3, “a”, “b”, “c”..

Language/python 2018.03.28

[python] 상속 기본 및 factory method 패턴 정리

회사에서 python으로 코드를 작성하는 중에 비슷한 비즈니스를 처리하지만 타입에 따라 다르게 동작하는 기능을 넣어야 하는 필요가 생겼다. 비슷한 비즈니스 처리 중에 공통으로 쓰는 것도 있고 타입에 따라 약간 차이나는 것도 있다. 객체지향에 익숙한 사용자라면 상속을 통해 해당 기능을 처리해야 겠다고 바로 생각할 것이다. 그래서 python 문법 정리도 할 겸 상속에 대해 기본적으로 기술하고, 객체를 생성하는 과정에서 factory 패턴을 적용했는데 그 부분도 정리하고자 한다.상속 객체들 간의 관계를 구축하는 방법이다.상속의 핵심을 계층구조를 표현하는 것이다. python 상속의 문법 class 클래스명(상속할 클래스명)python에서는 class 정의 시에 괄호에 상속받을 부모클래스만 적으면 끝난다. 자..

Language/python 2018.03.27

Evaluation Rules

coursera의 Functional Programming Principles in Scala 강좌를 들으며 중요한 개념들만 블로그에 정리해 보고자 한다. call by value : 함수를 실행하기 전에 인자들의 값을 구한다. call by name : 함수를 먼저 실행하고 인자값이 필요할 때 값을 구한다. 다음과 같이 함수가 있다고 하자. 인자값을 달리해서 각 함수를 호출할 때 어떤 속도 차이가 있는지 보자. def square1(x:Int, y:Int) = x*x def square2(x: => Double, y:Int) = x*x square1(2,3) : 2*2 -> 4square2(2,3) : 2*2 -> 4동일한 단계가 필요하다. square1(3+4,8) : square1(7,8) -> 7..

Language/scala 2017.09.12

[spring boot] spring boot configuration 이해

spring boot는 spring의 설정을 편리하게 하고 실행가능한 어플리케이션을 만들어주는 프레임웍이다. spring 사용을 간단하게 한 일등공신이다. 필자도 처음 spring을 접할 때 복잡한 설정 때문에 힘들다는 이야기를 많이 들었는데, spring boot가 나온 뒤로 너무 간편하게 어플리케이션이 실행되서 그 동작 방식에 궁금해 했었다. 그 동작방식을 분석한 글을 보았는데 이 블로그은 해당 내용을 정리하였다. spring boot 설정의 비밀은 @EnableAutoConfiguration에 있다. @EnableAutoConfiguration 어노테이션은 spring boot가 클래스 경로에서 찾은 바에 따라 애플리케이션이 필요로 하는 모든 bean을 자동으로 로드한다. @Enable* 어노테이션..

Framework/spring 2017.08.30

Dynamic Proxies

Java의 reflection을 사용하면 런타임시에 동적으로 인터페이스를 구현할 수 있다. java.lang.reflect.Proxy를 사용하게 되는데, 그래서 동적 인터페이스 구현을 동적프록시라고 부르는 이유이기도 하다. 동적 프록시는 다양한 용도로 사용할 수 있다. 예를들면, 데이터베이스 연결 및 트랜잭션 관리, 단위 테스트를 위한 동적 모의 객체 및 인터셉트 목적의 AOP와 유사한 메서드 생성 등에 사용한다. Proxy의 생성public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) throws IllegalArgumentException Proxy.newProxyInstance()..

Language/Java 2017.08.29
반응형