재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

초록 : 왕 Jinhai 담당 관심이 사람에 의해 공유 된이 문서의 헤드 라인 데이터 플랫폼, 흥미로운 헤드 라인 시간 수업 장면 FLINK - 하이브-및 FLINK - 투 - ClickHouse 초 장면을 소개합니다. 저자 : 왕 Jinhai; 출처 : Yunqi 커뮤니티

내용은 네 부분으로 나누어 져 있습니다 :

  • 첫째, 비즈니스 시나리오 및 상황 분석
  • 두, FLINK - 투 - 하이브 시간 수업 장면
  • 세, FLINK - 투 - ClickHouse 초 장면
  • 넷째, 미래의 개발 및 사고

첫째, 비즈니스 시나리오 및 상황 분석

오프라인 쿼리 페이지 및 실시간 쿼리 페이지에 페이지 헤드 라인에 관심 문의. 올해 구현 재미 헤드 라인 개혁 실시간 쿼리에서 ClickHouse 계산 엔진에 액세스 할 수 있습니다. 다양한 비즈니스 시나리오에 따르면, 보고서의 실시간 데이터는 데이터 지표 지수와 상세한 데이터 테이블의 그래프를 보여줍니다. 시간의 창을위한 5 분마다 수집 및 계산 데이터를 현재 측정 물론, 분 삼분의 특별한 경우가있다. 모든 데이터 인덱스 데이터는 카프카 실시간 데이터에서 파생 및 수입 ClickHouse 계산됩니다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

두, FLINK - 투 - 하이브 시간 수업 장면

1.도 구현 구조의 H 레벨

표시, 데이터베이스, 카프카에 바이너리 로그 아래에있는 동안 또한 로그 서버 데이터 회의 보고서 카프카를 파생됩니다. 실제 모든 시간 HDFS에 FLINK에 의해 그려진 카프카의 데이터에 착륙 후. 파선 사이 HDFS 하이브 이후의 그림은 직접 하이브 FLINK에 접지되지 않은 즉, HDFS FLINK 접지에, 다음 시간 반 시간 또는 분의 학년 수 있습니다 하이브 단계의 시간을 접지하여 데이터를 알아야하고 이벤트 시간이 등 테이블 변경, 추가 파티션, 추가 위치를 다시 트리거 할 때까지 파티션을 기록합니다.

그런 다음 프로그램이 어떤 시간 FLINK 작업 시간을 소비 한 현재 데이터, 데이터 등 9시을 모니터링하는 데 필요한, 카프카 소비를 볼 수있는 데이터 필요는 트리거 파티션이 하이브로 작성된 9 포인트 착륙, 도달했습니다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

2. 원리

재미 헤드 라인은 주로 기능 --StreamingFileSink의 FLINK 고차원 버전을 사용하십시오. StreamingFileSink 몇 가지 기능이 있습니다.

  • 먼저 forBulkFormat지지 브로, 마루 형식, 즉, 저장 형식 열.
  • 둘째, 시간 버킷에 의해 withBucketAssigner 사용자 정의 데이터는 여기에 데이터가 오프라인 시간에 의해 바닥에, 데이터를 모두 EventtimeBucket을 정의합니다.
  • 셋째, OnCheckPointRollingPolicy 데이터 체크 포인트 방문 시간에 따라, 데이터 및 체크 포인트 방문 일정 시간 내에 안정화. 체크 포인트 바닥에 따라 이러한 데이터 사이즈에 따라서 다른 전략이있다.
  • 넷째, StreamingFileSink 정확히-일단 의미가 구현됩니다.

FLINK 두 의미 정확히 - 한번 구현하고, 제 카프카 하나이며, 두 번째는 StreamingFileSink이다. 쇼 아래 OnCheckPointRollingPolicy 10 분마다 HDFS 파일 데모에 착륙의 디자인.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

정확히-일단 달성하는 방법 ■

A는 간단한 2-PC 모델의 측면보기를 떠났다. 동작 개시 트리거 ACK를 수행하여, 제조 코디네이터를 전송 한 후 ACK 코디네이터 모든 모두 커밋 ACK 모델 FLINK로 변환 된 모든 액터 층에 대해, 상기 소스가 검사 배리어 스트림을 수신하고, 트리거를 시작 시작 메시지를 수신 할 스냅 샷을 트리거합니다.

완료 스냅 샷 각 연산자 체크 포인트, 후, 체크 포인트 작업 관리자는 notifyCheckpointComplete를 보내드립니다. 두 번째 단계는 세 줄을 떠나 모델의 FLINK 모델 부분은도과 일치한다. 따라서 FLINK 두 단계로 달성 될 수 커밋 프로토콜.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

프로토콜을 커밋 FLINK 두 개의 상을 구현 ■ 사용 방법

첫째, StreamingFileSink는 두 개의 인터페이스, CheckpointedFunction 및 CheckpointListener를 구현합니다. initializeState snapshotState과 기능을 달성 CheckpointedFunction. CheckpointListener 두 인터페이스가 2 단계로 구현 프로토콜 시맨틱을 저지 할 수 있도록하는 것이 달성하기 notifyCheckpointComplete 방법이다.

  • initializeState

작업 시작이 세 가지 작업을 트리거 할 때 initializeState. 첫 번째는 commitPendingFile입니다. 바닥 상태 HDFS 세 실시간 데이터가 있습니다. 첫 번째 상태에서 진행 상태를 진행합니다. 제 2 상태는 제 3 상태가 완성 된 상태, 보류 상태이다.

initializeState는 작업이 시작은 restoreInProgressFile, 실시간 운영자 쓰기를 게재 할 때. 이 프로그램은 성공적인 체크 포인트 다시 initializeState 다음 하둡 2.7 이상 버전을 진행중인 파일을 재설정하거나 절단하는 잘라 내기 방법을 사용하여, PendingFile을 커밋합니다 시작, 문제가되지 않았습니다 나타나면.

  • 호출

실시간 데이터가 기록됩니다.

  • snapshotState

기록 데이터의 길이 (TRUNCATE 실시 절단 길이를 요구한다) 동안 체크 포인트, 보류 상태로 진행 ​​파일을 트리거한다. snapshotState 정말 HDFS에 데이터를 쓸 수 있지만 ListState 기록되지 않습니다. FLINK 내부 구현 정확히 - 한번 배리어 배향 상태가되지만 정확히 - 한번 의미 곤란의 외측 단부를 달성하는 의미. FLINK가 ListState 달성 내부되면 정확히-, 모든 데이터는 체크 포인트가 완료 모든 사업자, HDFS의 브러시 ListState에서 다음 데이터를 ListState, 대기를 저장.

  • notifyCheckpointComplete

기록 된 데이터의 완성 보류 상태 notifyCheckpointComplete 트리거. 구현 스트리밍 임시 HDFS에 파일 이름 바꾸기 작용에 의해 작성된 공식 문서의 종료 후 모든 작업을 쓰기 계속 이름을 변경하는 것입니다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

3. 크로스 클러스터 멀티 네임 서비스

실시간 및 오프라인 클러스터의 재미 헤드 라인은 클러스터 오프라인의 독립, 여러 세트의 클러스터입니다, 실시간 클러스터는 현재 설정되어 있습니다. 실시간으로 클러스터에서 오프라인 클러스터에 서면, HDFS 네임 서비스 문제가 발생합니다. 네임 서비스 실제 클러스터로 전체의 클러스터 네임 노드 HA와 클러스터에 실시간으로 모든 오프라인은 적합하지 않습니다. 어떻게 실시간 태스크의 클러스터에서 각 클러스터를 오프라인으로 제출?

다음 FLINK 자원 작업에 나타낸 바와 같이, 아래 그림과 같이 HDFS의 XML의 중간에 추가되었습니다. 실시간 스트림으로, 네임 서비스에 PropertyHong 홍콩 추가입니다 네임 노드 HA 클러스터 구성 데이터가 오프라인 구성을 기록 할 네임 노드 HA 클러스터입니다. 그런 다음 각 HDFS 더 수정을 설정하지 두 클러스터의 중간은 클라이언트에서 직접 구현 될 수있다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

4. 다중 사용자 쓰기 권한

HDFS 오프라인 실시간을 작성하려면, 그것은 사용자 권한 문제를 포함 할 수있다. 실시간 사용자의 제출은 사용자가 같은 사용자의 정의,하지만 오프라인 따라서 불평등 실시간 및 오프라인 사용자를 제공, 모든 프로그램에서 다중 사용자입니다. 이 API에 추가 withBucketUser 흥미로운 헤드 라인 HDFS를 작성합니다. 구성 네임 서비스되면, 다음 그러한 사용자 구성과 같은 사용자가, 스트림을 기록하는 통해 HDFS 경로를 작성 알아야합니다.

API 레벨은 여러 가지 HDFS와 다른 사용자를 지정할 수있는 혜택 FLINK 프로그램입니다. 다중 사용자 쓰기는 하둡 파일 시스템, 사용자 에이전트로 플러스 ugi.do이다. 위의 흥미로운 헤드 라인에게 하이브의 작품의 일부 실시간 데이터 동기화를 사용하는 FLINK 방법이다. 작은 파일 문제를 표시 할 수있는 파일은 체크 포인트 짧은 시간 간격이 같은 삼분으로, 작은 파일 문제 많은 수있을 것입니다 경우 작은 데몬이 주기적으로 병합합니다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

세, FLINK - 투 - ClickHouse 초 장면

1.도 아키텍처는 초에서 구현

재미 헤드 라인은 실시간 측정의 많은이 평균 5 분마다 또는 3 분이 계산되는 경우 이러한 카프카 주제의 소비로 FLINK 작업 각 실시간 측정, 또는 쓰기에 FLINK SQL, 매일 라이브, 새로운 프로세스를 계산하기 위해 필요 등 사용자가 앞으로 새로운 수요를 넣을 때, 현재 FLINK을 변경할 필요는 새 작업을 시작하거나 작업 FLINK 주제를 소모한다.

FLINK 작업 그러므로 수정하거나 새로운 FLINK 문제를 시작하는 작업을 계속합니다. 전체 OLAP을 달성하기 위해, 액세스 ClickHouse FLINK하려고 후 재미 헤드 라인. 다음 그림은 도표를 달성하는 두 번째 단계를 나타낸다. 카프카에서 FLINK, 하이브로, ClickHouse 클러스터, 외부 도킹 호라이즌 (실시간 보고서), QE (실시간 애드혹 쿼리), 치히로 (데이터 분석), 사용자 초상화 (실시간으로 사람들의 원)이다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

2.Why FLINK + ClickHouse

  • 실현 SQL 설명의 지표 : SQL에 제기 통계 분석은 기본적으로 설명 될 수있다.
  • 서로 독립적으로의 다운 라인에 지수 : 작업 FLINK 소비자 주제, 필요 다른 지표 경우, 인덱스가 서로 영향을 오프라인으로 보장 할 수 있습니다.
  • 데이터가 이상 조사를 용이하게하기 위해 다시 추적 할 수 있습니다 : 같은 날 하락을 살을, 필요의 역 추적 조사는 데이터의 차이로 표시 구경이보고 논리적 인 질문은 나 데이터는 카프카가 손실 스트림, 또는 사용자가 일상 생활의 하락을 주도 인덱스를보고하지 않기 때문에, FLINK는 역 추적 할 수 없다.
  • 빠른 컴퓨팅,주기 내에서 계산 된 모든 지표를 완료 : 필요가 모든 계산이 완료 지표의 수백의 모든 차원의 5 분 이내에.
  • 실시간 스트리밍, 분산 배포, 운영 및 유지 보수를 지원하는 것은 간단하다 : 실시간 데이터 스트리밍 카프카에 대한 지원.

현재 흥미로운 헤드 라인이있다 FLINK 클러스터 100 + 32 코어 128 G 3.5T SSD, 매일 2,000 + 억 쿼리 21w + 시간 일상에서의 문의의 80 %가 1 초 이내에 완료 데이터의 양. 쇼 아래 단일 테이블 테스트 결과. ClickHouse 빠른 단일 테이블 테스트 속도. 그러나 아키텍처의 대상은, ClickHouse는이 약에 가입하세요.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

도면은 3.6s에서 ClickHouse 2,600,000,000 완전한 데이터 연산에 의해 순서에 의한 + +기를 카운트 비교적 복잡한 공정 SQL이다.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

3.Why ClickHouse 너무 빨리

LZ4, ZSTD 데이터 압축 + 저장소를 사용 ClickHouse 칼럼. 둘째, 산출 저장 +와 함께 양자화를 수행하기 위해 국부. 프레스토 데이터는 계산을 위해 당긴 데이터를 HDFS 하둡 클러스터 또는 실시간에 저장 될 수있다. ClickHouse 저장 및 계산 수단은 SSD를 전용 노드를 병합 한 다음 자신의 데이터를 카운트하고, 각각의 로컬 컴퓨팅 기기의 필요성이 국부적된다. 동시에, LSM 병합 트리 + 인덱스입니다. 데이터가 ClickHouse를 작성 후에는 백그라운드 스레드 데이터 병합을 시작, 인덱스 색인을한다. 이러한 공통 지표와 DT-시간 수준의 데이터 인덱스의 건설로 쿼리 성능을 향상시킬 수 있습니다. 넷째, SIMD + LLVM 최적화. SIMD는 단일 명령어 다중 데이터 세트이다. 다섯째, SQL 구문 및 UDF 완벽. 이 큰 수요가 ClickHouse. 시간 윈도우의 기능 포인트의 일부로서, 속성을 인출 할 때 상기 데이터의 분석 또는 더 높은 측정이 필요하다.

  • 트리 병합 : 아래 그림. 제 1 층은 데이터가 기록되는 실시간이다. 배경은 모든 수준의 데이터를 병합합니다. 병합은 데이터를 정렬 할 때, 인덱스 색인을한다.
  • 커넥터 ClickHouse : ClickHouse 두 가지 개념을 로컬 테이블과 분산 테이블. 일반적으로 분산 테이블을 읽을 로컬 테이블을 작성합니다. 5 ~ 10w ClickHouse 일반적으로 배치 데이터 쓰기, 5 초주기. 재미 헤드 라인은 RoundRobinClickHouseDataSource을 달성했다.
  • BalancedClickHouseDataSource  : MySQL의는 IP를 구성하고 포트 번호 데이터를 기록 할 수 있지만 BalancedClickHouseDataSource 필요 로컬 테이블을 작성, 각 지역 테이블에 대해 얼마나 많은 지역 클러스터 테이블, IP 및 포트 번호를 알 필요가있다. 백 기계가 구성된 모든의 백 개 머신의 IP 및 포트 번호, 그리고 필요한 경우 다음 물품. 이 일정을 BalancedClickHouseDataSource. scheduleActualization 및 scheduleConnectionsCleaning. 구성은 백 개 머신의 IP 및 포트 번호, 일부 컴퓨터가 연결되지 않았거나 서비스 문제에 응답을하지 않습니다되어있을 것, scheduleActualization 문제의 기계가 조립 라인에서 트리거, 정기적으로 연결하거나 IP 및 기타 활동을 삭제할 수 있습니다. scheduleConnectionsCleaning 정기적으로 ClickHouse 쓸모 HTTP 요청을 청소.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

  • RoundRobinClickHouseDataSource는 : BalancedClickHouseDataSource에 대한 재미있는 헤드 라인은 세 가지 의미를 달성하기 위해 강화의 결과. true로 testOnBorrow 세트, 당신은 연결을 얻기 위해 ping 할 수 있는지 확인하려고합니다. ClickHouse를 작성하는 것은 배치, 공식 scheduleActualization 및 scheduleConnectionsCleaning 기능에서 다음 testOnReturn의 False로 설정, true로 testWhileIdel 세트, 필 때. 삽입으로 유지하는 배경 병합 삽입 너무 느린 경우, 지속적인 병합에게 배경을 ClickHouse 오류가 발생합니다. 가능한 한 지속적으로 적어 필요하며, 다른 현재의 시스템이 완료 기계와 그 속도가 삽입 속도와 일치 최대한 병합 할 수 있도록 다음 쓰기에 쓰기, 간격 5 초.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

4.Backfill

FLINK 수입 ClickHouse, 데이터 쿼리 또는 노출 보고서는 FLINK 작업 등, 오류 또는 데이터 배압, 실패 또는 클러스터되지 응답 ClickHouse 표시와 같은 몇 가지 문제가 발생하는 것입니다 때, ZK 등, 너무 빨리 삽입하거나 클러스터로드, 유지할 수 없습니다 임무 전반에 걸쳐 문제가 발생할 수 있습니다 문제.

데이터 트래픽의 급격한 서지 데이터가 나타납니다를 복구하는 데 계속 시간에 대한 FLINK 가능성을 시작하면 병렬 처리 및 데이터를 복구 다른 운영 FLINK 도움의 정도를 조정해야합니다. FLINK 또한, ClickHouse 제한이 너무 빨리 삽입 할 수 없습니다 동시성 데이터 처리의 정도를 증가하지만 이번에는 그렇지 않으면 악순환으로 이어질 것입니다, 데이터 잔고가 있었다. 하이브는 ClickHouse로 데이터를 가져 오기에 의해 FLINK 고장 또는 오작동의 ClickHouse 클러스터, ClickHouse 클러스터 복구를 기다릴 때, FLINK 작업이 최신 데이터에서 지출 시작, 데이터, 일정 기간 동안 더 이상 추격하지 않습니다.

카프카에 의해 실시간으로 이전 데이터로 인해이 ClickHouse 하이브에 데이터를 작성하여, 하이브로 떨어질 것입니다. ClickHouse이 파티션, 시간에 간단하게 삭제 된 데이터는 시간 하이브 데이터 가져 오기, 당신은 데이터 쿼리를 계속할 수 있습니다. 대체 광고는 작업 시간 FLINK 수준의 내결함성을 제공하고 클러스터링 시간 수준의 결함 허용 메커니즘을 ClickHouse.

재미 헤드 라인을 기반으로 FLINK + ClickHouse 빌드 실시간 데이터 분석 플랫폼

미래의 개발 및 사고

1.Connector SQL 기술

현재 FLINK - 하이브-에와 FLINK - 투 - ClickHouse 헤드 라인 더 흥미로운 장면을 치료하고, 사용자 필요는, 경로 HDFS를 지정 SQL의 방법에 의해 설명 될 수 있습니다 과정의 휴식.

2.Delta 호수

FLINK는 하나 개의 배치 흐름 계산 엔진,하지만 일괄 흐름 저장합니다. 제목 관심이 저장 FLINK와 실시간으로 상호 작용하는 KV 같은 데이터 HBase를, 쿠두, 레디 스를 사용하여 계산됩니다. 같은 계산 같은 새로운 문제는, 현재의 프로그램은 흥미로운 헤드 라인은 새로운 FLINK 여부를 결정하기 위해 실시간으로 사용자와의 상호 작용에서 하이브 역사 레디 스 또는 HBase를 사용자 브러시 필요가있다.

그러나 두 가지의 데이터 하이브 데이터와 레디 스 그것은 데이터로 저장되기 때문이다. 둘째 바이너리 로그 데이터를 삭제 조작을 추출 수반 HBase를, 쿠두 지원 데이터 수정의 하이브 정기적의 뒷면. 문제는 하나 이상의 주 중 쿠두, 하이브 데이터의 복사본을 저장 데이터 등의 데이터가, HBase를에 의해 야기된다. 당신은 FLINK의 작업을 통해, 또한, 실시간으로 사용자 추가, 실시간 데이터, 업데이트, 수정 또는 삭제할지 여부를 결정하기 위해 실시간으로 실시간 쿼리 하이브 데이터를 포함한 오프라인 데이터에 상호 작용할 수 위의 시나리오를 지원하기 위해 승인 된 스토리지 흐름의 하나가있는 경우 하이브는 저장 장치의 배치 작업을 지원할 수 있습니다.

미래, FLINK는 스트림 생태 배치 조합을 통합 있도록 FLINK 흥미로운 헤드 라인, 저장 장치의 배치를 흐르게 할 생각.

저자 : 그것은 큰 데이터 작업 예약, 메타 데이터를 개발, 초상화 및 기타 작업 작업을 담당 건축가로 재직, 배고픈 왕 Jinhai, 인터넷 경험 10 년, 유일한 제품은, 사용자의 초상화 시스템에 대한 책임을지지 군중 개인화 된 마케팅 서비스를 제공 할 것입니다있다; 이제 흥미로운 헤드 라인 데이터 센터 플랫폼 계산 층 (스파크, 프레스토, FLINK, clickhouse), 플랫폼 서비스 계층 (천칭 자리 실시간 계산, 케플러 오프라인 스케줄링), 데이터 제품 층에 대형 데이터베이스 (QE 임의 쿼리, 수평선 데이터 보고서에 대한 책임 담당자, ), 팀은 메타 데이터 메타 데이터 권한을 구축뿐만 아니라.

게시 50 개 원래 기사 · 원 찬양 1706 · 조회수 2,220,000 +

추천

출처blog.csdn.net/zl1zl2zl3/article/details/105326825