이 기사 시리즈는 제가 새로운 기술에 대해 배우고 탐구하면서 많은 재미를 느꼈습니다. 처음 발견한 이후로 어떤 일이 일어나고 있는지 보는 것도 재미있습니다. Apache Paimon 에 대한 나의 마지막 기사는 놀라울 정도로 인기가 많았습니다. 하지만 그게 도대체 무엇인지에 관심이 있는 사람은 나뿐만이 아니었던 것 같습니다. 그 기사 덕분에 나는 Timeplus 가 후원하는 오픈 소스 Apache 2.0 라이선스 프로젝트인 Proton을 발견했습니다. 기록 데이터와 스트리밍 데이터를 모두 수용하는 SQL 데이터베이스입니다. C++로 작성되고 ClickHouse 로 구동되며 단순성과 성능에 중점을 둡니다. 단일 실행 파일로 설치가 간단합니다.
제가 본 추세는 점점 더 많은 실시간 분석 애플리케이션이 구축되고 있지만 이를 두 번 구축하고 싶지는 않다는 것입니다. 스트리밍용으로 한 번, 기록 백필용으로 한 번. 일괄 처리나 스트리밍 모드 또는 기록 데이터를 수신 데이터 스트림에 결합하는 하이브리드 모드에서 쿼리할 수 있는 단일 플랫폼을 사용하면 확실한 이점이 있습니다. Proton은 바로 그렇게 하기 위해 만들어진 것으로 보입니다.
간단히 말해서 ClickHouse 데이터베이스가 있고 Timeplus는 스트리밍 서비스에 대한 지원을 추가했습니다. ClickHouse 데이터베이스를 사용하면 Flink와 같은 쿼리 엔진과 Kafka와 같은 스트리밍 스토리지를 얻을 수 있습니다. 그래서, 그것은 어떻게 생겼나요?
점선은 Proton이 등장하는 곳입니다. 무엇이 가능한지 잘 이해하려면 아키텍처 문서를 읽어보는 것이 좋습니다.
무작위 데이터 스트림을 생성하고 Proton으로 쿼리하려면 다음과 같이 할 수 있습니다.
-- Create a stream with random data. CREATE RANDOM STREAM devices(device string default 'device'||to_string(rand()%4), temperature float default rand()%1000/10); -- Run the long-running stream query. SELECT device, count(*), min(temperature), max(temperature) FROM devices GROUP BY device; ┌─device──┬─count()─┬─min(temperature)─┬─max(temperature)─┐ │ device0 │ 2256 │ 0 │ 99.6 │ │ device1 │ 2260 │ 0.1 │ 99.7 │ │ device3 │ 2259 │ 0.3 │ 99.9 │ │ device2 │ 2225 │ 0.2 │ 99.8 │ └─────────┴─────────┴──────────────────┴──────────────────┘
Proton에는 멋진 기능이 많이 있습니다. 저에게 즉시 충격을 준 것은 Proton의 특정 이벤트를 저장하기 위해 구체화된 뷰를 생성하는 기능이었습니다. 문서를 빌려 웹 이벤트를 보고하는 Kafka 스트림이 있고 Kafka가 다운되거나 이벤트가 제거된 경우에도 나중에 쿼리할 수 있도록 끊어진 링크 보고서를 저장하려고 한다고 가정해 보겠습니다. 다음과 같이 보일 것입니다 :
create materialized view mv_broken_links as select raw:requestedUrl as url,raw:method as method, raw:ipAddress as ip, raw:response.statusCode as statusCode, domain(raw:headers.referrer) as referrer from frontend_events where raw:response.statusCode<>'200';
그런 다음 구체화된 뷰를 직접 쿼리하고 데이터에서 막대 차트를 만들려면 다음과 같습니다.
-- streaming query select * from mv_broken_links; -- historical query select method, count() as cnt, bar(cnt,0,40,5) as bar from table(mv_broken_links) group by method order by cnt desc; ┌─method─┬─cnt─┬─bar─┐ │ GET │ 25 │ ███ │ │ DELETE │ 20 │ ██▌ │ │ HEAD │ 17 │ ██ │ │ POST │ 17 │ ██ │ │ PUT │ 17 │ ██ │ │ PATCH │ 17 │ ██ │ └────────┴─────┴─────┘
이 기능 중 일부는 제가 몇 년 전에 근무했던 회사인 Upsolver를 생각나게 합니다.
다른 언어용 드라이버는 Java, Go 및 Python에서 사용할 수 있습니다. Redpanda 와 같은 제품과 함께 Proton을 사용하면 기록 데이터를 스트리밍하는 데 최소한의 공간만 차지하게 됩니다.
사용할 수 있는 다른 기능도 많이 있지만 이는 튜토리얼이 아닙니다. 가벼운 설명을 하고 몇 가지 기능에 주목하고 싶습니다. 문서는 간결하고 전반적으로 잘 작성되었으며 확실히 많은 오픈 소스 프로젝트보다 낫습니다.
지금은 개인적으로 이런 종류의 배열이 필요하지 않지만, 확실히 이것이 있으면 매우 멋진 장소와 회사를 본 적이 있습니다. 이 사람만큼 멋있나요?
아마 아닐 수도 있지만, 다시 말하지만, 아무것도 아닙니다 :). 경솔함을 제쳐두고 Proton 팀은 프로젝트를 문서화하고 설치 및 사용을 최대한 간단하게 만드는 훌륭한 작업을 수행했습니다. 저는 수많은 종속성이 있는 방대한 Java 생태계가 필요하지 않은 이러한 단일 바이너리 프로젝트를 좋아합니다. 하지만 실수하지 마십시오. Timeplus에는 기본 Proton 릴리스보다 더 많은 기능을 제공하는 상용 버전이 있습니다. 그러나 그들은 Proton을 매우 지지하고 커뮤니티를 환영하는 것 같습니다.
아래 링크에서 내 다른 What the Heck is… 기사를 확인하세요.