묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
프로듀서 컨슈머 주요 옵션에 대한 문의가 있습니다.
bootstrap.servers 에 2개 이상의 브로커 정보를 입력하는 이유가 무엇일까요?제가 생각하기로는 클러스터에 대한 주소 1개를 입력하면 되는게 아닌가 싶어서요그래야지만 특정 브로커에서 문제가 생겼을 때 클러스터에 있는 다른 브로커로 접속해서 이슈가 없도록 설정하는 개념이 아닌가요?클러스터에 있는 브로커중 2개 이상을 임의로 입력해야한다는 것인데, 항상 클러스터에 있는 모든 브로커 개수를 입력해야한가요? 그럼 브로커가 추가될 때마다 소스에 있는 bootstrap.servers 정보를 수정해야 하는게 아닌가요?제가 원리를 잘못 이해한 것인지 답변부탁드립니다.
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
운영 환경에서 컨슈머에 대한 질문이 있습니다.
특정 토픽에 대한 파티션을 3개를 만든 후 소스에서 컨슈머 그룹에 대한 컨슈머를 3개를 만들었습니다.운영 환경에서 실행중인 서버가 1개인데 CPU 사용량으로 인한 오토스케일링이 발생하여 서버가 2개가 되었을 때, 그럼 총 6개의 컨슈머가 생성되는 것이라고 생각됩니다.그럼 3개의 컨슈머는 idle 상태로 놀고 있는게 아닌가 싶습니다.제가 이해한게 맞을까요?실제 운영 환경에서 이런 경우는 어떻게 하는게 좋은 방법일지 궁금합니다.---------------멀티스레드 컨슈머 애플리케이션 강의를 들었습니다.그렇다면 강사님께서는 토픽 + 컨슈머 그룹 + 컨슈머 별로 각각의 프로세스를 실행시키나요?다른 강의에서 파티션의 개수를 충분히 많은 개수 50~100개를 권장하셨는데.. 그럼 프로세스가 너무 많이 떠있는거라 생각되서요.. 강의 예로는 아래와 같이 컨슈머가 있다면, 총 7개의 프로세스에 단일 쓰레드로 실행시키는 걸까요?ex)A-TOPICA-TOPIC-GROUP-1A-TOPIC-GROUP-1-CONSUMER-1A-TOPIC-GROUP-1-CONSUMER-2A-TOPIC-GROUP-2A-TOPIC-GROUP-2-CONSUMER-1A-TOPIC-GROUP-2-CONSUMER-2A-TOPIC-GROUP-2-CONSUMER-3B-TOPICB-TOPIC-GROUP-1B-TOPIC-GROUP-1-CONSUMER-1B-TOPIC-GROUP-1-CONSUMER-2
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
프로듀서를 통해 카프카 클러스터에 레코드를 보낼 때 항상 1개의 배치로만 tcp 통신이 이루어지나요?
카프카 프로듀서 소개 강의를 보다 질문드립니다.프로듀서에서 레코드를 send하면 Accumulator에서 배치로 묶는 과정을 한다고 하셨는데요.실제 Sender가 발생하는 시점에 프로듀서 애플리케이션에서 항상 1개의 배치 단위로 tcp 통신이 발생하나요?아니면 내부적으로 여러개의 배치를 한번의 tcp 통신으로 통신할까요?
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
주키퍼의 대한 역할이 잘 이해가 되지 않습니다.
주키퍼는 카프카 클러스터 당 최소 1개씩 존재하는 건가요?주키퍼가 하는 역할이 무엇인지 잘 모르겠습니다..좀 더 추가적인 설명을 해주실 수 있을까요?추가로 집필하신 책에 주키퍼에 대한 자세한 설명이 있을까요?
-
해결됨Airflow 마스터 클래스
섹션7: CustomOperator 개발 실습부분 pandas에 관하여
안녕하세요. 강사님 코드를 참조하며 공부를 하다보니, 어느새 새벽시간대가 되었네요다름이 아니라, 방금 전 쯤에 질문 드린 xmltodict는 import 에러가 발생했는데, (비주얼스튜디오 환경에서 pip install 및 wsl2환경에서 pip install 했음에도 불구하고)섹션7: CustomOperator 개발 실습 부근에서 pandas를 사용하는데, 비주얼 스튜디오 코드 가상환경(venv)에서 pandas가 설치되어있지 않아서 제가 pip install pandas로 설치를 하고 진행을 했는데, airflow 상에서 import error 가 나지 않는 점이 궁금해서 질문을 드리게 되었습니다. 추가)xml 데이터가 자꾸 안되어서 다른 데이터를 사용해보자는 마음으로 일단 json 양식까지 지원되는 open api를 물색해봤는데, 잘 동작하네요.---서울시 전기차 충전소 정보(서울시 설치)서울시 전기차 급속충전기 정보 현황(서울시 설치)서울시 자동차 전용도로 위치 정보(좌표계: GS80) 데이터 사이언티스트 쪽에서 데이터 엔지니어로 직무를 바꾸게 되었는데, 아무래도 정보가 정말 없다보니, 뭐부터 시작을 해야할지 막막했었습니다.아직도 신입으로 취업하기 위해서는 구체적으로 어떤 것을 완성해야할지 모르지만, 인프런에서 좋은 강의를 알게 되어서 강사님께 항상 감사하게 생각하고 있습니다.
-
해결됨Airflow 마스터 클래스
섹션7: SimpleHttpOperator import error문제
안녕하세요. 서울시 공공데이터 포털에 있는 실시간 데이터를 바탕으로, 진행해보고 싶어서 강사님께서 짜신 코드와 조금 다르게 구성을 했는데,패키지 에러 문제가 나타났습니다. 에러 사항은 import xmltodict error문제 입니다.(1) 데이터 수집https://data.seoul.go.kr/dataList/OA-21285/A/1/datasetView.do샘플 데이터 양식: http://openapi.seoul.go.kr:8088/{API_KEY}/xml/citydata/{startnum}/{endnum}/POI{num}'POI{num}의 경우, 해당 num은 숫자가 아닌 str형태입니다. (001 ~ 113)(저는 여기서, 전기차 충전소와 충전기 데이터 분석을 통해, 급속 충전기 최적 입지 데이터 분석을 해보고 싶어 크롤링과 MYSQL에 데이터를 수집은 해놓았습니다. )(강사님께 airflow를 배우며, airflow를 통해 배치 기반으로 데이터 수집을 자동화하고 싶습니다.)[충전소 데이터][충전기 데이터]--- (2) 에러 발생!(3) 코드 개요 from airflow import DAG from airflow.operators.bash import BashOperator from airflow.decorators import task from airflow.providers.http.operators.http import SimpleHttpOperator # import common.poi_func as poi_array# poi nums import pendulum with DAG( dag_id="dags_simple_http_operators", start_date=pendulum.datetime(2023, 8, 1, tz="Asia/Seoul"), catchup=False, schedule="0 18-20 * * *" #매일 오후 6시~8시 1시간 간격으로 실행 ) as dag: """ 서울시 실시간 전기차 충전소/충전기 데이터 정보 """ # http_conn_id = 'openapi.seoul.go.kr' #array = poi_array() #for poi_number in array: tb_electric_station_info = SimpleHttpOperator( task_id="tb_electric_station_info", http_conn_id='openapi.seoul.go.kr', endpoint= '{{var.value.apikey_openapi_seoul_go_kr}}/xml/citydata/1/1/광화문·덕수궁', method='GET', headers={"Content-Type": "application/xml"} ) @task(task_id='python_1') def python_1(**kwargs): ti = kwargs['ti'] rslt = ti.xcom_pull(task_ids='tb_electric_station_info') from pprint import pprint import xmltodict response_dict = xmltodict.parse(rslt) pprint(response_dict) tb_electric_station_info >> python_1() 강사님께서는 json.load()를 사용했지만, 해당 실시간 데이터는 xml 형식으로만 받아올 수 있어서, 출력을 하기 위해 xmltodict 를 import 해와서, 잘 받아오는지 테스트를 해보고자 하였습니다. 하나의 페이지에 무수히 많은 태그들이 있기 때문에, 페이지는 1페이지로만 설정을 했습니다. 해당 에러를 해결하기 위해서, pip install xmltodict를 진행하였습니다.그럼에도, 해결이 되지 않아서, git이 연동되어있는 쪽에,pip install xmltodict로 패키지를 설치해주었습니다.혹시 몰라서, docker compose down을 시킨 뒤,다시 docker_compose.yaml 파일이 있는 곳에서 docker compose up을 실행하여 airflow 환경에 접속을 했는데,ModuleNotFoundError: No module named 'xmltodict' [2023-08-15, 23:47:23 KST] {taskinstance.py:1350} INFO - Marking task as FAILED. dag_id=dags_simple_http_operators, task_id=python_1, execution_date=20230815T144715, start_date=20230815T144723, end_date=20230815T144723 [2023-08-15, 23:47:23 KST] {standard_task_runner.py:109} ERROR - Failed to execute job 206 for task python_1 (No module named 'xmltodict'; 77)여전히 해당 모듈이 없다는 에러가 뜨네요 ..어떻게 해결해야할까요? ---[추가1]xcom에는 그래도 데이터가 잘 받아와지는 걸 확인할 수 있었습니다. 해당 데이터를 파싱하는 과정에서 에러가 난 것 같습니다.[추가2]나름대로 방법을 찾아봤는데, https://stackoverflow.com/questions/67851351/cannot-install-additional-requirements-to-apache-airflowdocker_compose.yaml파일을 수정해봤는데도...종료가 되네요..
-
미해결Airflow 마스터 클래스
강의 소스코드 문의
강의에서 진행된 소스코드는 공유안해주시나요?
-
미해결처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
강의자료가 다 들어 있지 않은 것 같아요.
강의자료 다운을 받았는데 파이썬 부분이 빠져있는 듯 합니다. 01,02,07 파일만 존재하는데 제가 못 찾는건지..
-
미해결카프카 완벽 가이드 - 코어편
콘솔에서 컨슈머 생성
토픽을 구독하는 컨슈머를 콘솔에서 생성하면, 생성하는 컨슈머마다 항상 새로운 그룹이 만들어지게 되는거고 해당 토픽에 내부 파티션인 __consumer_offset가 생성된 컨슈머의 수만큼 만들어지는게 맞나요?자바의 KafkaConsumer 를 사용할때 이미 존재하는 컨슈머 그룹에 참여한다면, 토픽에는 해당 컨슈머 그룹에 대한 정보인 __consumer_offset이 이미 존재하고 컨슈머에서 이 값을 읽어오니 earlist로 설정해도 0번 인덱스 레코드부터 읽는게 아닌 __consumer_offset에서 offset 값을 그대로 읽어와 사용하는게 맞나요?
-
해결됨Airflow 마스터 클래스
Bash Operator with Macros 수업에서 날짜에 대해 올바르게 해석했는지 질문드리고 싶습니다.
안녕하세요. airflow에 관한 질 높은 수업을 정말 잘 듣고 있습니다. 다른 공부보다 airflow 공부하는 게 재밌어서, 시간 가는 줄 모르고 노션에 정리하며 실습을 해보고 있습니다. 다름이 아니라, airflow의 날짜 개념에 대해 제가 올바르게 이해했는지 확인을 하고 싶어서 문의를 드리게 되었습니다.강의 내용은 Bash Operator with macros부분이며dags_bash_with_macros_eg1과 dags_bash_with_macros_eg2에 대한 airflow log 값에 대한 부분입니다 START_DATE와 END_DATE에 대해서 올바르게 이해했는지 여쭈어보고 싶습니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
수강 기간 연장 부탁드립니다.
안녕하세요 강사님 !좋은 강의를 꾸준하게 들어 성장하고 싶지만,항상 마음과 달리 쉽지가 않네요수강 신청하고 얼마 듣지도 못 했는데 벌써 기간이 얼마 남지 않아수강 기간을 연장을 요청드리고자 합니다.좋은 강의 감사드립니다 강사님 !
-
미해결다양한 사례로 익히는 SQL 데이터 분석
수료증
수료증 주나요?
-
미해결데이터베이스 중급(Modeling)
json 구조의 데이터를 저장할 때 재귀 관계가 맞는 방법인지 궁금합니다.
선생님 안녕하세요. 테이블 설계 중 고민 중인 부분이 있어 강의 복습하다가 의견을 여쭙고자 질문드립니다.제가 하려는 것은json 구조로 내려오는 데이터를 key, value 모두 각각 저장하려고 합니다.구조를 예를 들면,{"resReferenceList": [{"resTriglyceride": "mg/dL","resALT": "U/L","resType": "단위","resSight": ""},{"resTriglyceride": "150미만","resALT": "35이하","resType": "정상(A)","resSight": ""}],"resResultList": [{"resQuestionInfo": "","resInfantsCheckupList": [ ],"resQuestionInfoList": [{"resSmokingList": [{"resPeriod": "","resType": "일반담배(궐련)"},{"resPeriod": "","resType": "궐련형 전자담배","resPeriod1": ""}],"resApplicableYN1": "0","resSmokingStatus": "0","resDiseaseHistoryList": [{"resApplicableYN": "0","resType": "0","resDisease": "뇌졸중(중풍)"},{"resApplicableYN": "0","resType": "0","resDisease": "심장병(심근경색/협심증)"}],"resApplicableYN": "0","resAlcoholAmtList": [{"resUnit": "병","resNumber": "0.5","resType": "평균","resType1": "소주"}]}],"resOriGinalData": "","resInfantsDentalList": [ ]},{"resQuestionInfo": "","resInfantsCheckupList": [ ],"resOriGinalData": "","resInfantsDentalList": [ ]}],"resCheckupTarget": "홍길동"} (json 구조가 잘 보이게 하고 싶은데 붙여넣기 하면 계속 이렇게 되네요ㅠ죄송합니다.)이렇게 Object 형태에 List 형태도 포함되어 있습니다.그런데 좀 더 까다로운게 위의 Object 가 [] List 에 담겨 여러개 나오는 경우도 있습니다. (이거까지 생각하면 복잡해서 일단 위 구조만 고려했습니다.)이러한 형태가 계속해서 테이블에 쌓이게 하려고 합니다.우선 트리 구조라고 생각했기 때문에 재귀 관계 테이블을 떠올려서 그렇게 작업을 하려고 했는데요.-Id (pk, auto increment)-부모테이블Id (fk, 위 데이터의 부모격인 메인 테이블이 있습니다. (1:M 관계))-상위Id(id 와 fk 관계, 재귀)-리스트 번호(Obejct 가 리스트로 같은 상위 id 에 포함될 수 있는데, 그러면 각 Object 묶음이 구분이 되어야 하므로 구분하기 위한 번호)-key_name-value이렇게 생각을 했는데 조회시 상당히 불편해서 다른 방법이 있을지 고민되어 질문드리게 되었습니다.단순히 데이터를 쌓고 통계를 위한 조회 정도로 사용할 예정입니다.위와 같은 데이터 구조의 key, value 를 모두 저장해야 할 때 재귀 관계를 사용하는게 최선인지 아니면 다른 고민해볼 포인트도 있는지 의견 여쭙고 싶습니다.감사합니다.
-
미해결카프카 완벽 가이드 - 코어편
빅데이터 관리에 관해서
안녕하세요 강사님 강의 잘 듣고 있습니다.강의중간에 잠깐 언급하고 넘어가신 부분중에 궁금한게 있어서 질문드립니다.현업에서 실제로 하루에 10기가 혹은 20기가로 엄청난 양의 데이터가 나올때이 데이터를 실제로 어떻게 처리하는지 궁금합니다.감사합니다.
-
미해결다양한 사례로 익히는 SQL 데이터 분석
CLI로 ga_export.sql 쉽게 불러오기
안녕하세요 강사님, 오늘부터 새로 강의를 듣게 되었는데 완강 목표로 열심히 듣겠습니다 ㅎㅎ강의 초반 환경설정에서 ga_export.sql이 large text여서 Dbeaver에서 스크립트 실행할 때 java heap space 부족 에러가 발생하더라고요.이 때 터미널로 쉽게 불러올 수 있는 방법을 찾았고, 다른 수강생분들에게도 도움이 될 것 같아 공유드립니다.아래 스샷처럼 터미널에서 sudo -iu postgres psql 입력 후 \i [ga_export.sql이 위치한 경로] 를 입력하면 쉽게 ga 데이터를 불러올 수 있습니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
섹션9 compose up 에러
세션9 내용 따라하면서 docker compose up 커맨드를 입력했는데 다음과 같은 에러가 났습니다. 코드는 올려주신 깃헙 코드 사용하였는데 해결 방법 알 수 있을까요?
-
미해결다양한 사례로 익히는 SQL 데이터 분석
컬럼의 뜻에 대해 질문 드립니다.
채널별 고유/주문 사용자 건수와 매출 금액 및 비율 SQL로 구하기 2 를 학습하면서/************************************ 채널별 고유 사용자 건수와 매출금액 및 비율, 주문 사용자 건수와 주문 매출 금액 및 비율 채널별로 고유 사용자 건수와 매출 금액을 구하고 고유 사용자 건수 대비 매출 금액 비율을 추출. 또한 고유 사용자 중에서 주문을 수행한 사용자 건수를 추출 후 주문 사용자 건수 대비 매출 금액 비율을 추출 *************************************/ with temp_01 as ( select a.sess_id, a.user_id, a.channel_grouping , b.order_id, b.order_time, c.product_id, c.prod_revenue from ga_sess a left join orders b on a.sess_id = b.sess_id left join order_items c on b.order_id = c.order_id where a.visit_stime >= (:current_date - interval '30 days') and a.visit_stime < :current_date ) select channel_grouping , sum(prod_revenue) as ch_amt -- 채널별 매출 --, count(distinct sess_id) as ch_sess_cnt -- 채널별 고유 세션 수 , count(distinct user_id) as ch_user_cnt -- 채널별 고유 사용자 수 --, count(distinct case when order_id is not null then sess_id end) as ch_ord_sess_cnt -- 채널별 주문 고유 세션수 , count(distinct case when order_id is not null then user_id end) as ch_ord_user_cnt -- 채널별 주문 고유 사용자수 --, sum(prod_revenue)/count(distinct sess_id) as ch_amt_per_sess -- 접속 세션별 주문 매출 금액 , sum(prod_revenue)/count(distinct user_id) as ch_amt_per_user -- 접속 고유 사용자별 주문 매출 금액 -- 주문 세션별 매출 금액 --, sum(prod_revenue)/count(distinct case when order_id is not null then sess_id end) as ch_ord_amt_per_sess -- 주문 고유 사용자별 매출 금액 , sum(prod_revenue)/count(distinct case when order_id is not null then user_id end) as ch_ord_amt_per_user from temp_01 group by channel_grouping order by ch_user_cnt desc;위 쿼리의 쿼리 뜻이 잘 이해가 안되어 질문 드립니다., sum(prod_revenue)/count(distinct user_id) as ch_amt_per_user -- 접속 고유 사용자별 주문 매출 금액, sum(prod_revenue)/count(distinct case when order_id is not null then user_id end) as ch_ord_amt_per_user이 두 항목은 각각 접속 고유 사용자별 주문 매출 금액,주문 고유 사용자별 매출 금액이라 명칭 되어 있는데, 어떤 의미를 가지고 있는 것인지 잘 이해가 되지 않아 질문 드립니다.접속 고유 사용자별 주문 매출 금액 : 사용자 대비 30일이내 매출 금액주문 고유 사용자별 매출 금액 : 주문 대비 30일 이내 매출 금액이렇게 이해를 하면 될런지요?
-
미해결다양한 사례로 익히는 SQL 데이터 분석
group by에 대해 질문 드립니다.
사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL로 구하기 - 02위 과정을 학습하고 있습니다select month ,case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end as gubun , count(*) as user_cnt from temp_01 group by month, case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end order by 1, 2;위 쿼리에서 group by 항목이 이해가 잘 안되서 질문 드립니다.위와 같이 그룹을 지으면일자 + monthly_user_cnt 의 조합으로 그룹들이 만들어짐select에서select month ,case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end as gubun위 쿼리로 넘어온 데이터(아직 컬럼으로 만들어지지 않은채 각 그룹별로 정의되어 넘어온 데이터)에 컬럼명을 붙여줌위와 같은 동작을 하는게 맞는지요?제가 이해하는게 맞는지 알고 싶습니다.
-
해결됨mongoDB 기초부터 실무까지(feat. Node.js)
find() 가 리턴하는 instance member
nestjs + mongoose 조합이지만, https://velog.io/@modolee/mongodb-document-to-javascript-object와 같이 find()가 리턴하는 인스턴스 내부가 `_doc` 처럼 되어 있었습니다.저는 user.age 이렇게 사용하고 싶은데, user 밑에 age 라는 변수도 없고, 꼭 .toObject()를 해야 하나요?아직 이 부분에 수수께끼가 풀리지 않았습니다.설명해 주실 수 있나요?
-
미해결카프카 완벽 가이드 - ksqlDB
drop stream delete topic 관련 오류
안녕하세요 강사님. 처음 stream 생성 후 삭제시에 토픽삭제 까지하는 명령어를 쳤을때 명령어실행후 ~was dropped. 라고 성공적으로 메시지도 뜨고 show streams; 했을때 stream 목록까지 안보이는데 console로 list확인했을떄 topic이 남아있는데 어떤 문제가 있어서 이러는걸까요?