가장 연결 가능한브로커

마지막 업데이트: 2022년 2월 13일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

지난해 7월 4일 딴 민 미얀마 상무장관이 청와대를 예방해 박근혜 대통령을 접견했다. 당시 청와대는 ‘아웅 산 수 치 여사가 이끄는 야당이 집권한 이후 가장 고위급 인사의 방문’이라고 크게 홍보했다. 하지만 국제사회의 도움이 시급한 미얀마의 장관급 인사는 자주 한국을 찾는 편이었다.

오히려 특이한 인물은 딴 민 장관의 일정을 사실상 총괄한 김호범(44·가명)이라는 젊은 미얀마 교민이었다. 청와대 행사에 미얀마 측 인사로 참석한 그는 이튿날 양국 통상 관련 장관을 자신의 서울사무소 개소식에 부르는 등 위세를 과시했다. 그가 바로 최순실의 미얀마 핵심 인맥으로, 논란이 된 ‘미얀마 K타운’ 사업을 설계한 장본인이다.

미얀마 K타운 사업이 특검 수사의 스포트라이트를 받는 이유는 최씨가 자신의 존재가 폭로되기 직전까지 가장 애착을 보인 프로젝트였기 때문이다. 게다가 연설문 수정 등을 처벌하는 데 형사법적 논란이 있다면 이 사안에서는 알선수재죄라는 뚜렷한 혐의가 포착됐다.

실제 최씨는 조카 장시호에게 “대대손손 물려줄 집안의 자산”이라고 말하며 이 사업에 전력을 기울였다. 주미얀마 한국대사를 자기 입맛에 맞는 인사로 갈아치운 것도 모자라 정부의 정부개발원조(ODA) 자금을 집행하는 한국국제협력단(코이카) 이사장직까지도 관련 사업(전시, 컨벤션) 전문가를 앉혔을 정도다. 심지어 김씨가 운영하는 MITS KOREA(미얀마 검사 및 검수 서비스)의 지분 15%를 직접 챙기고 이후 상장 계획까지 갖고 있었다. 이 때문에 최씨 주위에서는 ‘독일에서 이루지 못한 부동산 대박의 기운을 미얀마에서 느꼈기 때문’이란 해석도 나왔다.

K타운 사업의 핵심은 부동산

2011년 본격적으로 개혁·개방에 나선 미얀마는 한국이 가장 많이 투자하는 아시아 신흥국 가운데 하나다. 2014년 본격화된 코이카의 3대 무상협력사업 규모만 해도 미얀마개발연구소(2000만 달러), 새마을운동(2200만 달러), 구제역방지시스템(600만 달러) 등 총 550억 원에 이른다. 이 밖에도 각종 정부 산하기관이 유·무상으로 지원하는 액수도 상당하다는 평가.

미얀마 K타운 사업은 ODA 자금 6000만 달러(약 760억 원)를 활용해 미얀마 수도 양곤에 사무실 및 각종 대형전시가 가능한 복합 컨벤션센터를 짓는 프로젝트다. 유례없이 빠르게 추진돼 늦어도 지난해 하반기 박 대통령의 미얀마 순방과 동시에 본격화됐어야 할 사업이었다. 이를 위해 청와대와 산업통상자원부(산자부)가 긴밀히 움직였다.

검찰과 특검의 수사 결과에 따르면 이 같은 계획은 2015년 10월 등기를 마친 가칭 ‘한류문화재단’, 즉 사단법인 미르의 설립과 무관치 않았다. 최씨는 케이팝(K-pop)과 케이푸드(K-food), 케이스포츠(K-sports) 등 이른바 한류문화를 공연하고 가장 연결 가능한브로커 전시하기 위해 독자적인 공간 확보가 필요하다는 논리로 청와대 및 정부 고위 관계자들을 압박한 것으로 보인다. 이 과정에서 등장한 것이 바로 미얀마 교민인 김씨다. 그의 아버지는 미얀마에서 25년 이상 사업과 선교활동을 병행하며 군사정부 시절 관료들과 적잖은 인맥을 형성했다.

미얀마 양곤의 부동산은 2011년 이후 ‘미쳤다’는 표현이 나올 정도로 비싼 것으로 유명하다. 시내 평범한 단독주택의 거래 가격이 50억 원 이상인 것은 물론, 임대료도 천문학적으로 높아 모 국제기구의 사무실 월세가 1억 원을 넘어 세계적으로 화제가 되기도 했다. 최씨도 “양곤의 부동산 가격이 압구정과 비슷하다”며 크게 놀랐다는 후문이다.

세계 최빈국 가운데 하나인 미얀마의 비정상적인 부동산 가격은 30년 이상 지속된 군부독재의 유산 때문이다. 즉 개혁·개방으로 수요는 폭증했지만 토지 상당수를 군인과 정부가 독점해 허가권을 비싸게 팔고 있는 것. 결국 미얀마에서 큰돈을 벌려면 공무원과 손잡고 부동산개발에 나서는 것이 최선이고, 이 과정에서 대사관이나 코이카 등의 도움을 받으면 더 빨라질 수 있다는 얘기다.

이를 위해 발탁된 김씨는 인맥을 활용해 양곤 인근 약 10만㎡(3만 평) 규모의 상무부 유휴 대지를 섭외함으로써 최씨의 환심을 산 것으로 알려졌다. 당초 김씨를 소개한 장본인은 관세청 공무원. 커피와 중고차의 수출입을 위해 관세청을 드나들던 김씨를 고영태에게 연결해준 것이다.

그렇게 시작된 미얀마 K타운 사업에서 걸림돌은 김씨의 인맥이나 경험이 한국 정부가 공식적으로 활용할 수준에 미치지 못했다는 것이다. 그가 섭외해온 양곤 인근 상무부 유휴 대지는 컨벤션센터로 활용하기에는 도심에서 16km나 떨어진 평범한 주택가였다. 이백순 전 주미얀마 한국대사는 “도심은커녕 부도심도 가장 연결 가능한브로커 아니라서 컨벤션센터 대지로는 부적절했다”고 기억했다.

최씨가 직접 고른 삼성 출신의 유재경 주미얀마 한국대사와 김인식 코이카 이사장 모두 전임자와 엇비슷한 평가를 내리면서 사업은 기약 없이 미뤄지게 된다. 청와대의 하명을 받고 지난해 7월 14일 미얀마로 떠난 김 이사장의 역할이 결정적이었다. 킨텍스 사장 출신답게 꼼꼼하게 사업성을 평가해 해당 대지가 경제성이 떨어진다는 내용을 청와대와 산자부에 보고한 것. 이에 발끈한 최씨가 자신의 미얀마 측근들을 대동해 현지답사에 나선 배경이 됐다. 결국 산자부의 재검토 지시를 받은 코이카가 9월 초 다시 현장을 방문한 뒤 최종적으로 ‘불가’ 입장을 천명하면서 미얀마 K타운 가장 연결 가능한브로커 사업은 기세가 꺾이고 만다.

“최순실이 브로커에게 당했다”

미얀마 사정에 밝은 한 코이카 관계자는 “최씨 일당은 땅을 개발해 얻는 수익에만 신경 썼겠지만, 그 건물에서 생활해야 할 실무자 처지에선 어려운 문제였을 것”이라고 답했다. 상식적으로 판단하면 투자가 불가능했다는 얘기다. 현지 사정은 모른 채 비선 실세의 사적 인맥에 속은 청와대와 산자부만 몸이 달아 대통령의 미얀마 추가 방문까지 추진한 셈이다.

관세청 직원이 고씨에게 소개했다는 김씨의 이력도 미스터리하다. 그가 대외적으로 사용한 미얀마 상무부 산하 무역진흥국(Myanmar Trade Promotion Center)의 서울사무소장(관장)이라는 공직 직함의 근거가 부족하다는 지적이 나온다.

김씨가 하는 무역 사업의 근거는 1990년대 미얀마 상무부 산하에 세워진 MITS라는 합작법인이다. 서방의 금수조치가 계속되던 군사정부 시절 자국의 수출입 행정을 간소화하고자 만든 것이지만, 실제로는 사문화된 조직. 그는 아버지의 인맥을 활용해 이 기업의 한국지사 권한을 얻어 2014년 1월 한국에 MITS KOREA란 가장 연결 가능한브로커 회사를 세웠다.

문제는 그가 미얀마 정부와 인연을 앞세워 마치 “허가권을 독점해 선적 전 화물 검사는 물론, 통관과 세관 업무까지 가능하다”는 식으로 우리 정부기관에 접근한 것. 당시 코트라 양곤지사에서 일하던 한 관계자는 “당시 김씨의 과대홍보로 여러 기업으로부터 항의를 받은 바 있다”며 “실상 김씨의 사업은 일반적인 수출입 서비스와 차이가 없다”고 말했다.

무역 전문가들도 입을 모아 “특정 국가의 인증 및 통관과 관련된 사안을 일개 주식회사가, 그것도 해외에서 진행하는 사례는 없다”면서 의구심을 나타냈다. 양곤에서 유명 건설업체를 운영하는 교민 K씨 역시 “비교적 쉽게 만날 수 있는 상무장관을 팔아 국내서 장사한 사례”라면서 “그런 사람에게 속는 한국 정부가 우스운 모양새가 됐다”고 촌평했다.

미얀마 교민사회에서는 ‘비선 실세가 평범한 미얀마 브로커에게 당했다’는 말이 회자되고 있다. 현재 김씨는 특검 조사를 마치고 미국으로 거처를 옮겼다. 서울에서 마치 미얀마 정부기관처럼 가장 연결 가능한브로커 가장 연결 가능한브로커 포장돼 있던 김씨의 ‘미얀마 무역센터’ 역시 문을 닫았다.

가장 연결 가능한브로커

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Azure HDInsight ID Broker (계층 2)

이 문서에서는 Azure HDInsight ID 브로커 기능을 설정 하 고 사용 하는 방법을 설명 합니다. Azure Active Directory Domain Services (Azure AD DS)에서 레거시 암호 해시가 필요 하지 않고 다단계 인증을 적용 하는 동안이 기능을 사용 하 여 Apache Ambari에 대 한 최신 OAuth 인증을 가져올 수 있습니다.

HDInsight ID Broker는 다음과 같은 시나리오에서 복잡 한 인증을 단순화 합니다.

  • 조직에서는 페더레이션에 의존 하 여 클라우드 리소스에 액세스 하는 사용자를 인증 합니다. 이전에는 HDInsight Enterprise Security Package 클러스터를 사용 하려면 온-프레미스 환경에서 Azure Active Directory (Azure AD)로 암호 해시 동기화를 사용 하도록 설정 해야 했습니다. 일부 조직에서는이 요구 사항이 어렵거나 바람직하지 않을 수 있습니다.
  • 조직에서 Apache Ambari 및 기타 클러스터 리소스에 대 한 웹 기반 또는 HTTP 기반 액세스를 위한 다단계 인증을 적용 하려고 합니다.

HDInsight ID Broker는 Azure AD DS에 대 한 암호 해시를 동기화 할 필요 없이 OAuth (최신)에서 Kerberos (레거시)로의 프로토콜 전환을 가능 하 게 하는 인증 인프라를 제공 합니다. 이 인프라는 HDInsight ID Broker 노드가 활성화 된 Windows Server VM (가상 머신)에서 실행 되는 구성 요소와 함께 클러스터 게이트웨이 노드와 함께 구성 됩니다.

조직의 요구 사항에 따라 가장 적합 한 인증 옵션을 확인 하려면 다음 표를 사용 합니다.

인증 옵션 HDInsight 구성 고려해 야 할 요소
완전 OAuth Enterprise Security Package + HDInsight ID Broker 가장 안전한 옵션입니다. (다단계 인증이 지원 됩니다.) 패스 해시 동기화는 필요 하지 않습니다 . Azure AD DS에 암호 해시가 없는 온-프레미스 계정에 대 한 ssh/kinit/keytab 액세스는 없습니다. 클라우드 전용 계정은 여전히 ssh/kinit/keytab 수 있습니다. OAuth를 통한 Ambari에 대 한 웹 기반 액세스 OAuth를 지원 하려면 레거시 앱 (예: JDBC/ODBC)을 업데이트 해야 합니다.
OAuth + 기본 인증 Enterprise Security Package + HDInsight ID Broker OAuth를 통한 Ambari에 대 한 웹 기반 액세스 레거시 앱은 계속 기본 인증을 사용 합니다. 기본 인증 액세스를 위해서는 다단계 인증을 사용 하지 않도록 설정 해야 합니다. 패스 해시 동기화는 필요 하지 않습니다 . Azure AD DS에 암호 해시가 없는 온-프레미스 계정에 대 한 ssh/kinit/keytab 액세스는 없습니다. 클라우드 전용 계정은 여전히 ssh/kinit 할 수 있습니다.
완전 한 기본 인증 Enterprise Security Package 온-프레미스 설정과 가장 유사 합니다. Azure AD DS에 대 한 암호 해시 동기화가 필요 합니다. 온-프레미스 계정은 ssh/kinit 또는 keytab를 사용할 수 있습니다. 백업 저장소를 Azure Data Lake Storage Gen2 하는 경우 다단계 인증을 사용 하지 않도록 설정 해야 합니다.

다음 다이어그램은 HDInsight ID Broker를 사용 하도록 설정한 후 페더레이션된 사용자를 포함 하 여 모든 사용자에 대 한 최신 OAuth 기반 인증 흐름을 보여 줍니다.

. image type="content" source="media/identity-broker/identity-broker-architecture.png" alt-text="HDInsight ID Broker의 인증 흐름을 보여 주는 다이어그램입니다." border="false".

이 다이어그램에서 클라이언트 (브라우저 또는 앱)는 먼저 OAuth 토큰을 획득 해야 합니다. 그런 다음 HTTP 요청에서 게이트웨이에 토큰을 제공 합니다. Azure Portal와 같은 다른 Azure 서비스에 이미 로그인 한 경우 Single Sign-On 환경을 사용 하 여 HDInsight 클러스터에 로그인 할 수 있습니다.

기본 인증 (즉, 사용자 이름 및 암호)만 지 원하는 많은 레거시 응용 프로그램이 있을 수 있습니다. 이러한 시나리오의 경우 여전히 HTTP 기본 인증을 사용 하 여 클러스터 게이트웨이에 연결할 수 있습니다. 이 설정에서는 게이트웨이 노드에서 직접 시야를 볼 수 있도록 게이트웨이 노드에서 Active Directory Federation Services (AD FS) 끝점으로의 네트워크 연결을 확인 해야 합니다.

다음 다이어그램에서는 페더레이션된 사용자에 대 한 기본 인증 흐름을 보여 줍니다. 먼저 게이트웨이는 Ropc flow를 사용 하 여 인증을 완료 하려고 시도 합니다. Azure AD에 동기화 된 암호 해시가 없는 경우 AD FS 끝점을 검색 하 고 AD FS 끝점에 액세스 하 여 인증을 완료 하는 것으로 대체 됩니다.

. image type="content" source="media/identity-broker/basic-authentication.png" alt-text="기본 인증을 사용 하 여 아키텍처를 보여 주는 다이어그램입니다." border="false".

HDInsight ID Broker 사용

HDInsight ID Broker를 사용 하 여 Enterprise Security Package 클러스터를 만들려면:

    에 로그인합니다.
  1. Enterprise Security Package 클러스터에 대 한 기본 만들기 단계를 수행 합니다. 자세한 내용은 Enterprise Security Package를 사용 하 여 HDInsight 클러스터 만들기를 참조 하세요.
  2. HDINSIGHT ID Broker 사용 을 선택 합니다.

HDInsight ID Broker 기능은 클러스터에 가장 연결 가능한브로커 추가 VM 하나를 추가 합니다. 이 VM은 HDInsight ID 브로커 노드 이며 인증을 지 원하는 서버 구성 요소를 포함 합니다. HDInsight ID 브로커 노드는 Azure AD DS 도메인에 가입 된 도메인입니다.

. image type="content" source="./media/identity-broker/identity-broker-enable.png" alt-text="HDInsight ID Broker를 사용 하도록 설정 하는 옵션을 보여 주는 다이어그램입니다." border="true".

Azure 리소스 관리자 템플릿 사용

다음 특성을 사용 하 여 라는 새 역할을 idbrokernode 템플릿의 계산 프로필에 추가 하면 HDINSIGHT ID Broker 노드가 활성화 된 상태로 클러스터가 생성 됩니다.

ARM 템플릿의 전체 샘플을 보려면 여기에 게시 된 템플릿을 참조 하세요.

HDInsight 도구는 기본적으로 OAuth를 지원 하도록 업데이트 됩니다. 이러한 도구를 사용 하 여 클러스터에 대 한 최신 OAuth 기반 액세스를 사용할 수 있습니다. HDInsight IntelliJ 플러그 인은 Scala와 같은 Java 기반 응용 프로그램에 사용할 수 있습니다. Visual Studio Code에 대 한 Spark 및 Hive 도구 를 사용 하 여 PySpark 및 hive 작업을 수행할 수 있습니다. 이 도구는 batch 및 대화형 작업을 모두 지원 합니다.

Azure AD DS에서 암호 해시가 없는 SSH 액세스

SSH 옵션 고려해 야 할 요소
로컬 VM 계정 (예: sshuser) 클러스터를 만들 때이 계정을 제공 했습니다. 이 계정에 대 한 Kerberos 인증이 없습니다.
클라우드 전용 계정 (예: [email protected] ) 암호 해시는 Azure AD DS에서 사용할 수 있습니다. Kerberos 인증은 SSH Kerberos를 통해 가능 합니다.
온-프레미스 계정 (예: [email protected] ) SSH Kerberos 인증은 Azure AD DS에서 암호 해시를 사용할 수 있는 경우에만 가능 합니다. 그렇지 않으면이 사용자는 클러스터에 대해 SSH를 사용할 수 없습니다.

도메인에 가입 된 VM으로 SSH 하거나 명령을 실행 하려면 kinit 암호를 제공 해야 합니다. SSH Kerberos 인증을 사용 하려면 Azure AD DS에서 해시를 사용할 수 있어야 합니다. 관리 시나리오에만 SSH를 사용 하려는 경우 클라우드 전용 계정을 하나 만들어 클러스터에 대 한 SSH에 사용할 수 있습니다. 다른 온-프레미스 사용자는 Azure AD DS에서 암호 해시를 사용할 수 없는 경우에도 Ambari 또는 HDInsight 도구나 HTTP 기본 인증을 사용할 수 있습니다.

조직에서 Azure AD DS에 대 한 암호 해시를 동기화 하지 않는 경우 Azure AD에서 클라우드 전용 사용자 하나를 만드는 것이 가장 좋습니다. 그런 다음 클러스터를 만들 때이를 클러스터 관리자로 할당 하 고 관리 목적으로 사용 합니다. 이를 사용 하 여 SSH를 통해 Vm에 대 한 루트 액세스를 가져올 수 있습니다.

인증 문제를 해결 하려면 이 가이드를 참조 하세요.

OAuth를 사용 하 여 HDInsight ID Broker를 통해 HDInsight 게이트웨이에 연결 하는 클라이언트

HDInsight ID Broker 설정에서 게이트웨이에 연결 하는 사용자 지정 앱 및 클라이언트를 업데이트 하 여 필요한 OAuth 토큰을 먼저 획득할 수 있습니다. 이 문서의 단계에 따라 다음 정보를 사용 하 여 토큰을 가져옵니다.

  • OAuth 리소스 uri: https://hib.azurehdinsight.net
  • AppId: 7865c1d2-f040-46cc-875f-831a1ef6a28a
  • 권한: (이름: Cluster. ReadWrite, id: 8f89faa0-ffef-4007-974d-4989b39ad77d)

OAuth 토큰을 획득 한 후에는 클러스터 게이트웨이에 대 한 HTTP 요청의 인증 헤더 (예: https://-int.azurehdinsight.net)에이 토큰을 사용 합니다. Apache Livy API에 대 한 샘플 말아 명령은 다음 예제와 같이 보일 수 있습니다.

Beeline 및 Livy를 사용 하는 경우 여기 에 제공 된 샘플 코드를 따라 OAuth를 사용 하도록 클라이언트를 설정 하 고 클러스터에 연결할 수도 있습니다.

AAD에서 HDInsight에 의해 생성 되는 앱은 무엇 인가요?

각 클러스터에 대해 타사 응용 프로그램은 identifierUri (예:)로 클러스터 uri를 사용 하 여 AAD에 등록 됩니다 https://clustername.azurehdinsight.net .

사용자가 설정 된 클러스터를 사용 하기 전에 동의를 요청 하는 이유는 무엇 인가요?

AAD에서 사용자를 인증 하거나 데이터에 액세스 하기 전에 모든 타사 응용 프로그램에 대 한 동의가 필요 합니다.

동의를 프로그래밍 방식으로 승인할 수 있습니까?

Microsoft Graph api를 사용 하 여 동의를 자동화할 수 있습니다. 동의를 자동화 하는 시퀀스는 api 설명서 를 참조 하세요.

Chapter 08 HA

유입되는 트래픽이 많은 경우 많은 연결이 필요하기 때문에 브로커가 CPU와 메모리 자원을 많이 사용할 수 있는데 이런 경우에는 브로커를 별도로 구동해 부하를 분산할수 있다.

응용프로그램은 -> 브로커에 연결을 요청

응용프로그램은 -> 브로커들에 대한 우선순위 지정 가능

특정 브로커는 -> 읽기 작업만 허용할수 있음

브로커 장비를 다중화해 연결 부하를 분산하고, 하나의 브로커 장비가 비정상적으로 종료되는 경우에도 다른 브로커가 이를 대체 할수 이도록 해야함

broker1 이 죽으면 broker2 대체 하고 broker2가 죽으면 broker3가 대체

JDBC설정의 althosts로 설정가능, 또한 loadBalance값을 true로 줘서 무작위로도 선택 가능

- 데이터베이스 다중화 : 데이터베이스 볼륨을 여러 개의 장비에 복제 구성하는 것, 역할에 따라 마스터, 슬레이브, 레플리카로 구분

- 마스터 노드 : 읽기/쓰기 가능, 모든 쓰기작업은 이곳에서 발생

- 슬레이브 노드 : 페일오버 노드, 마스터 노드를 모두 복제, 읽기만 가능

- 레플리카 노드 : 슬레이브 노드와 같지만 페일오버는 안함

5. 데이터베이스 다중화의 활용

- 데이터 분산 : 같은 데이터를 다른 장소에 저장, 빠른 네트워크 회선 필요

- 부하 분산 : 복제가 제대로 되는 상태에서 읽기 부하를 분산가능

- 백업 : 슬레이브에서 백업 수행, 의도된 복제 지연 레플리카를 두어서 복구에 활용 가능(삭제 오류시)

cubrid_ha.conf 설정파일의 ha_node_list 파라미터를 세팅하여, 가장 먼저 기재한 노드가 마스터 노드가 됨

ACCESS_MODE가 RW인 브로커는 마스터 노드에 먼저 접속, 모든 질의문 처리

ACCESS_MODE가 RO인 브로커는 슬레이브 노드 혹은 레플리카 노드로 접속, 마스터만 가능한 경우는 마스터 노드로 접속, 읽기 작업만 가능

ACCESS_MODE가 SO인 브로커는 읽기만 가능한 데이터베이스, 즉 슬레이브 혹은 레플리카로 접속가능, 마스터만 가능한 경우라도 마스터 접속 못함

마스터 노드 -> 슬레이브 혹은 리플리카 노드로 복제

즉, 마스터 노드의 데이터베이스에서 변경된 데이타를 트랜잭션 로그에 쓰면, 이를 슬레이브 노드에서 복사한후 슬레이브 노드의 데이터베이스에 적용하는 방식이다. (기본키 기반, 기본키가 없으면 복제되지 않는다)

윤자이 기술블로그

이번 포스팅에서는 kafka consumer(소비)에 대해서 알아보겠습니다. kafka producer가 메시지를 생산하고 토픽으로 전송하는 역할을 한다면 consumer는 메시지를 가져와서 소비하는 역할을 하는 애플리케이션 또는 서버를 지칭합니다. 컨슈머의 주요 기능은 특정 파티션을 관리하고 있는 파티션 리더에게 메시지를 가져오기 요청을 하는 것입니다. 각 요청은 로그의 오프셋을 명시하고 그 위치로부터 가장 연결 가능한브로커 로그 메시지를 수신합니다. 때문에 컨슈머는 가져올 메시지의 위치를 조정할 수 있고, 또 이미 가져왔던 메시지를 다시 가져오는 것 역시 가능합니다.

Consumer option

카프카 컨슈머에는 Old Consumer와 New Consumer 두 가지가 있습니다. 두 컨슈머의 가장 큰 차이는 주키퍼의 사용 유무입니다. Old Consumer는 컨슈머의 offset을 주키퍼의 지노드에 저장하는 방식을 지원하다가 0.9 version 이후로는 offset을 주키퍼가 아닌 카프카 토픽에 저장하는 방식으로 변경되었습니다.

※ 여기서 offset이란, 카프카 파티션 내에서 메시지를 식별하는 단위입니다.

아직까진 Old Consumer(주키퍼에 offset을 저장하는 컨슈머)의 지원이 계속되고 있지만, 이후의 릴리즈 버전에서는 해당 기능이 사라질 예정이므로 새로운 카프카 프로젝트를 시작하거나 인프라를 구축할 때에는 New Consumer를 기준으로 하는 것이 좋습니다.

bootstrap.servers

카프카 클러스터에 연결 하기 위한 카프카 정보를 나타냅니다. 프로듀서 포스팅에서도 언급했듯이 하나의 호스트만을 적용하더라도 동작은 하지만, 클러스터는 살아있지만 해당 호스트가 다운될 시에는 접속이 불가능하기 때문에 호스트 리스트 전체[를 입력하는 방식을 권장합니다.

fetch.min.bytes

한번에 가져올 수 있는 최소 데이터 사이즈 입니다. 만약 옵션에서 지정한 사이즈보다 모인 데이터가 적을 시에는 바로 요청에 대해 응답하지 않고 데이터가 누적될 때까지 기다리거나 응답을 기다리는 최대 시간까지 기다렸다가 응답하게 됩니다.

컨슈머가 속한 컨슈머 그룹을 식별하는 식별자 입니다.


enable.auto.commit

백그라운드에서 주기적으로 offset을 커밋합니다.

auto.offset.reset

카프카에서 초기 offset이 없거나 현재 offset이 더 이상 존재하지 않는 경우(데이터가 삭제된 경우) 아래의 옵션으로 리셋합니다.

  • earliest : 가장 초기의 오프셋 값으로 설정합니다.
  • latest : 가장 마지막의 오프셋값으로 설정합니다.
  • none : 이전 오프셋값을 찾지 못하면 에러를 나타냅니다.

fetch.max.bytes

한 번에 가져올 수 있는 최대 데이터 사이즈

fetch.max.wait.ms

fetch.min.bytes에 설정된 데이터보다 적은 경우 요청에 응답을 기다리는 최대 시간입니다.

request.timeout.ms

요청에 대한 응답을 가장 연결 가능한브로커 기다리는 최대 시간입니다. 만약 최소 데이터 사이즈가 차지 않았을 경우 해당 시간만큼 기다렸다가 데이터를 응답하게 됩니다.

session.timeout.ms

컨슈머와 브로커 사이의 세션 타임 아웃 시간 을 지정하는 옵션입니다. 즉 다시 말해 브로커가 컨슈머가 살아있는 것으로 판단하는 시간입니다. (default 10초) 만약 컨슈머가 그룹 코디네이터(주피터)에게 하트 비트를 보내지 않고 session.timeout.ms가 지나면 브로커는 컨슈머가 종료되었거나 장애가 발생한 것으로 판단하고 컨슈머 그룹은 리벨런스를 시도하게 됩니다.

해당 옵션은 일반적으로 heartbeat.interval.ms와 함께 사용됩니다. session.timeout.ms를 기본값보다 낮게 설정하면 싶패를 빨리 감지할 수 있지만, 가비지 컬렉션이나 poll 루프를 완료하는 시간이 길어지면 원하지 않는 리밸런스가 일어나게 됩니다. 반면 session.timeout.ms를 높게 설정하면 원하지 않는 리밸런스가 일어날 가능성은 줄어들지만, 실제 오류를 감지하는 데 시간이 오래 걸릴 수 있습니다.

heartbeat.interval.ms

그룹 코디네이터에게 얼마나 자주 하트비트를 보낼지 지정합니다. 당연히 session.timeout.ms보다 낮아야하고, 일반적으로 session.timeout.ms의 3분의 1 정도로 설정합니다. (default 값은 3초입니다)

max.poll.records

단일 호출에 대한 최대 레코드 수를 조정합니다.

max.poll.interval.ms

앞에서 컨슈머가 살아있는지 체크하기 위해 하트비트를 주기적으로 보낸다고 했습니다. 그런데 컨슈머가 하트비트만 가장 연결 가능한브로커 보내고 실제로 메시지를 가져가지 않는 경우가 있을 수 있습니다. 이러한 경우 해당 컨슈머가 파티션을 무한정 점유할 수 없도록 주기적으로 poll을 요청하지 않으면 장애라고 판단하고, 컨슈머를 제외한 후 다른 컨슈머가 해당 파티션에서 메시지를 가져갈 수 있도록 합니다.

auto.commit.interval.ms

주기적으로 offset을 커밋하는 시간입니다.

리밸런스란 컨슈머의 소유권이 넘어가는 것을 뜻합니다.

Consumer 구현해보기

그럼 직접 Java를 이용해서 Consumer를 구현해보도록 하겠습니다. 구현 코드는 아래와 같습니다.

코드를 살펴보면 Producer와 마찬가지로 카프카 리스트를 입력하고, 그 후로 gropd id와 auto commit과 offset reset과 관련된 옵션을 지정합니다. 앞선 포스팅 producer에서 메시지와 키 값에 문자열을 사용했기 때문에 내장된 StringDeserializer를 지정합니다.

subscribe() 메서드를 이용해서 메시지를 가져올 토픽을 구독합니다. (리스트의 형태로 여러개의 토픽을 입력할 수도 있습니다.) 그리고 무한 루프로 토픽에서 메시지를 지속적으로 poll()하게 됩니다. 이때 중요한 것이 카프카에 폴링 하는 것을 계속 유지해야 한다는 것입니다. 그렇지 않으면 컨슈머가 다운된 것으로 카프카가 판단하게 되어서 해당 컨슈머에 할당된 파티션은 다른 컨슈머에게 전달되어 소비됩니다.

poll()은 전체 레코드를 리턴합니다. 따라서 레코드 안에는 토픽, 파티션, 파티션의 offset, key, value와 같은 다양한 데이터를 포함하고 있습니다. 또한 한 번에 하나의 메시지만을 불러오는 것이 아니기 때문에 N개의 메시지를 처리하기 위해서 반복문을 사용하도록 합니다. 해당 예시에서는 단순히 System.out.printf()로 데이터를 출력하는 코드를 추가했지만, 실제 운영환경에서는 Hadoop이나 데이터베이스에 저장하거나 수신한 메시지를 분석하는 등 추가적인 로직을 작성하도록 합니다.

마지막으로 consumer가 종료하기 전에 close() 메서드를 이용해서 네트워크 연결과 소켓을 종료하도록 합니다. close() 메서드는 컨슈머가 하트 비트를 보내지 않아서 코디네이터가 해당 컨슈머의 종료를 감지하는 것보다 빠르게 진행되기 때문에 즉시 리벨런스가 발생합니다.

Partition Message 순서

컨슈머에 들어오는 메시지들의 순서는 파티션 단위로 지켜집니다. 예를 들어 아래의 이미지와 같이 파티션이 4개 있는 토픽이 있을 때 0, 1, 2, 3, 4, 5라는 메시지를 전송했다고 가정해보겠습니다. 각각의 파티션은 병렬로 메시지를 받기 때문에 0, 1, 2, 3이 offset1로 적재되었습니다. 그리고 4, 5가 offset2로 적재되었습니다. 카프카는 offset 기준으로만 메시지를 가져오기 때문에 offset이 1인 0, 1, 2, 3은 offset이 2인 4, 5에 비해서는 확실히 먼저 도착한 것이보장되지만 같은 offset을 가진 메시지끼리는 순서를 보장하지 않습니다. 따라서 아래의 이미지와 같이 0, 1, 2, 3, 4, 5로 전송하였지만 0, 2, 1, 3, 5, 4와 같은 순서로 consumer가 메시지를 받게 됩니다.

파티션끼리도 메시지의 순서를 보장하기 위해서는 파티션을 1개만 지정해서 사용해야합니다. 하지만 파티션 수를 1로 지정하면 모든 메시지의 순서를 보장할 수 있지만 파티션 수가 하나이기 때문에 분산해서 처리할 수 없고 하나의 컨슈머에서만 처리할 수 있기 때문에 처리량이 높지 않습니다.

Consumer Group

이번에는 컨슈머 그룹에 대해서 알아보도록 하겠습니다. 컨슈머 그룹은 카프카의 커플링을 낮추는 데에 큰 기여를 한 기능입니다. 컨슈머 그룹은 하나의 토픽에 여러 컨슈머 그룹이 동시에 접근해서 메시지를 순서를 유지하며 가져올 수 있습니다. 즉 하나의 데이터를 일관성 있게 다수의 그룹에서 불러옴으로써 다양한 형태로 데이터를 변형 및 사용할 수 있게 됩니다.

또한 컨슈머 그룹은 컨슈머를 확장시킬 수 있습니다. 만약 프로듀서가 토픽에 보내는 메시지 속도가 급증해서 컨슈머가 메시지를 가져가는 속도보다 빨라지면 어떻게 될까요? 컨슈머가 처리하지 못한 메시지들이 점점 쌓이게 될 것입니다. 처음에는 큰 문제가 발생하지 않을지 모르지만, 점점 들어오는 메시지와 받아가는 메시지의 차이의 간격이 벌어져 서비스의 문제가 생길 수 있습니다.

이런 상황일 때 컨슈머 그룹은 유용한 기능을 제공합니다. 기본적으로 컨슈머 그룹 안에서 컨슈머들은 메시지를 가져오고 있는 토픽의 파티션에 대해 서유권을 공유합니다. 따라서 컨슈머 그룹 내 컨슈머 수가 부족해서 프로듀서가 전송하는 메시지를 처리하지 못하는 경우에는 컨슈머의 수를 추가해서 위의 이미지와 같이 하나의 컨슈머가 처리하던 메시지들을 병렬적으로 처리할 수 있습니다.

아래의 이미지처럼 컨슈머 그룹 내에 컨슈머가 증가하게 되면 리밸런스 과정을 거치게 되는데, 즉 파티션에 대한 각각의 컨슈머의 소유권이 이동하는 것을 뜻합니다. 그런데 리밸런스를 하는 중에는 일시적으로 메시지를 가져올 수 없기 때문에 유의해야 합니다. 리밸런스가 일어나게 되면 토픽의 각 파티션마다 하나의 컨슈머가 연결됩니다. 그리고 리밸런스가 끝나게 되면 컨슈머들은 각자 담당하고 있는 파티션으로부터 메시지를 가져오게 됩니다.

컨슈머 그룹이라는 기능으로 인해 간단하게 컨슈머를 추가할 수 있습니다. 하지만 이미지처럼 4개의 컨슈머를 추가했음에도 프로듀서가 보내는 메시지보다 컨슈머가 가져가는 메시지의 양이 적다면 어떻게 해야 할까요? 단순히 컨슈머의 수를 늘리면 된다고 생각할 수 있지만, 토픽의 파티션에는 하나의 컨슈머만 연결할 수 있기 때문에 추가한 새로운 컨슈머는 대기상태에 놓이게 됩니다. 따라서 토픽의 파티션 수와 동일하게 컨슈머 수를 늘렸음에도 프로듀서가 보내는 메시지의 속도를 따라가지 못한다면 컨슈머만 추가하는 것이 아니라, 토픽의 파티션과 컨슈머를 같이 늘려줘야 합니다.

또한 반대로 잘 동작하고 있던 consumer4가 갑자기 다운될 경우를 생각해 보겠습니다. 이러한 경우에는 consumer4로 메시지를 보내던 partition3이 consumer3으로 리밸런스 되어서 가장 연결 가능한브로커 partition2와 3이 모두 consumer3에게 할당되게 됩니다. 이런 경우 consumer 1, 2에 비해 처리량이 불균등해지기 때문에 지속적인 모니터링을 통해서 추가적으로 컨슈머를 할당해줄 필요가 있습니다.

처음 카프카를 소개할 때 카프카는 데이터의 중앙 집중화를 위한 시스템이라고 말씀드렸습니다. (리마인드를 위해 다시 이미지를 보도록 하겠습니다.) 카프카 이전의 시스템 흐름도는 우측의 카프카가 적용된 시스템 흐름도에 비해서 굉장히 커플링이 심하고 복잡합니다. 카프카는 이러한 복잡한 시스템 흐름도를 어떻게 개선한 걸까요?

예를 들어 A라는 서비스를 하는 팀이 로그 메시지를 topic-01 토픽으로 보내고 컨슈머 그룹01을 이용해서 이 메시지들을 처리하고 있었습니다. 그런데 얼마 후 B서비스팀에서 A 서비스팀의 로그 메시지들을 필요하게 되었습니다. 이전 같은 상황이었으면 A서비스 팀이 직접 로그 메시지를 전달해주었지만 (이러한 상황이 반복되어 복잡한 시스템 흐름도가 만들어짐) 카프카를 사용하고 있는 지금은 A팀이 사용하고 있는 카프카와 토픽 정보를 B팀에게 알려주어서 B팀이 새로운 컨슈머 그룹으로 접근하여 A팀이 카프카에서 가져가고 있는 메시지를 동일하게 가져갈 수 있습니다. 이렇게 여러 컨슈머 그룹들이 하나의 토픽에서 메시지를 가져갈 수 있는 이유는 컨슈머 그룹마다 각자의 오프셋을 별도로 관리하기 때문입니다. 그렇기 때문에 하나의 토픽에 두 개 이상의 컨슈머 그룹뿐만 아니라 그 이상의 컨슈머 그룹이 연결되어도 다른 컨슈머 그룹에 영향 없이 메시지를 가져갈 수 있게 됩니다.

가장 연결 가능한브로커

InTheMarket 브로커 대시 보드

NY 브로커, 상업용 임대 시장 출시

InTheMarket은 상업용 부동산 임대 산업을위한 새로운 서비스로서의 소프트웨어 플랫폼으로, 임차인 중개인 및 임대인을 위해 특별히 설계 및 구축되었습니다.

스티븐 렌 바움

뉴욕리스 업계에서 16 년을 보낸 ITM 창립자 가장 연결 가능한브로커 Steven Renbaum은 자신의 제품이 "전체 CRE리스 프로세스를 클라우드로 가져와 테넌트 담당자 경험의 모든 작업에 대한 엔드 투 엔드 워크 플로를 제공합니다"라고 말합니다.

기능에는 브로커와 임대인이 플랫폼 내에서 제안 조건을 협상하고 거래를 실행하는 업계 최초의 대화 형 거래 실이 포함됩니다.

“오늘날 현재의 선도적 인 플랫폼은 산업의 공급 측면을 중심으로 구축되었지만 시장을 주도하는 것은 수요이며 ITM이 만들어지기 전까지는 이와 비슷한 것이 없었습니다. ITM은 CRE 임대 공간에서 최초의 진정한 엔드-투-엔드 플랫폼으로 이해 관계자가 매년 수백 시간을 절약 할 수 있습니다. 우리는 전체 임대 프로세스를 클라우드에 도입하여 프로세스 속도를 크게 높이고 업계에 혁명을 일으킬 '판매 시점'데이터 집계를 허용했습니다.”라고 Renbaum은 말했습니다.

Renbaum은 기존의 다른 임대 관리 플랫폼이 ITM처럼 하나의 플랫폼에 전체 애플리케이션 제품군을 모두 갖추고 있지 않다고 말합니다. 또한 플랫폼에 업로드 할 수있는 항목에도 제한이 있습니다.

마트에서의 맞춤형 제품군은 테넌트-렙 중개인이 매일 견디는 "큰 부담"을 제거하고 여러 시간에 걸친 프로젝트를 단 몇 분으로 줄여 효율성과 응답 시간을 크게 향상시킵니다. 임대인과 그 대리인을위한 ITM의 맞춤형 포털은이를 브로커 수요에 직접 연결하고 임대 프로세스의 모든 단계를 가속화하는 내장 워크 플로, 통신 및 파일 공유 도구를 제공합니다.

Renbaum은 플랫폼의 개발이 지난 24 개월 동안 실무 중개인과 집주인의 의견의 정점이며 CRE, Proptech 및 기술 산업의 고위 임원을 포함한 베테랑 고문 팀의 도움을 받았다고 말했습니다.

InTheMarket은 가장 필수적인 워크 플로우 도구의 하이브리드이며 다음과 같은 기능을 포함합니다.

  • CRE 워크 플로우를 중심으로 설계된 내장 고객 관계 관리 시스템
  • 우주 탐색 및 검색 도구
  • 중개인을위한 임차인 요구 사항 발표 도구 및 임대인을위한 실시간 수요보기
  • 맞춤형 투어 북, 전단지, 제안서 작성자 및 편집자
  • 맞춤형 재무 분석 및 비교 매트릭스
  • 중개인 및 집주인 확인 워크 플로를 포함한 투어 예약 물류
  • 중개인과 집주인이 실시간으로 플랫폼 내 조건을 협상하는 가상 거래 실
  • 전대 센터 — CRM의 테넌트 프로필에서 직접 목록을 만들고, 시장에 발표하고, 문의, 투어 및 거래를 관리합니다.

Renbaum은 2012 년에 독립적 인 중개 플랫폼 인 Summit RE Partners를 설립했습니다. 부동산 업계에 진출하기 전에 Renbaum은 2002 년에 기술 회사 Critical Mention의 창립 멤버 중 한 명으로, PR 회사, 기업, 기업을위한 방송 모니터링 서비스를 제공했습니다. TV에서 브랜드 멘션을 모니터링하는 정부 기관.

Renbaum은 ITM 플랫폼이 혁신이 필요한 산업에 즉각적인 영향을 미칠 것이라고 말했습니다. “전통적으로 업계는 비효율적이고 정적 인 수동 워크 플로우 프로세스와 결합되었습니다. 이 플랫폼은 사람과 제품을 통합하여 중개인과 집주인 모두의 액세스, 도달 범위 및 속도를 크게 향상시킵니다.”라고 그는 말했습니다.

InTheMarket은 이번 달에 뉴욕시에서 사용할 수 있으며 더 광범위한 전국적으로 출시 될 예정입니다. InTheMarket은 현재 제한된 업계 전용 베타 등급의 사용자를 마무리하는 과정에 있습니다. 이러한 사용자의 온 보딩에 따라 InTheMarket은 뉴욕 CRE 산업의 더 넓은 브로커 커뮤니티에서 제품을 사용할 수 있도록하고 2021 년에 주요 시장을 추가로 출시 할 계획입니다.


0 개 댓글

답장을 남겨주세요