Yeni teknolojileri öğrendiğim ve keşfettiğim için bu makale dizisi benim için çok eğlenceli oldu. İlk keşfettiğimden bu yana neyin ilgi gördüğünü görmek de eğlenceli. Apache Paimon hakkındaki son makalem inanılmaz derecede popülerdi, bu da beni şaşırttı, ama görünen o ki onun ne olduğuyla ilgilenen tek kişi ben değildim. Bu yazı sayesinde Timeplus sponsorluğundaki açık kaynaklı Apache 2.0 lisanslı projesi Proton ile karşılaştım. Hem geçmiş hem de akış verilerini barındıran bir SQL veritabanıdır. C++ ile yazılan ve ClickHouse tarafından desteklenen bu kitabın odak noktası basitlik ve performanstır. Tek bir yürütülebilir dosyayla kurulum basittir.
Gördüğüm bir trend, giderek daha fazla gerçek zamanlı analiz uygulamasının geliştirildiği, ancak bunları iki kez oluşturmak istemezsiniz. Bir kez akış için ve bir kez de tarihsel dolgu için. Toplu veya akış modunda, hatta geçmiş verileri gelen veri akışıyla birleştirdiğiniz karma modda sorgulama yapabilen tek bir platforma sahip olmanın kesin avantajları olacaktır. Görünüşe göre Proton tam da bunu yapmak için yapılmış.
Özetle, bir ClickHouse veritabanımız var ve Timeplus akış hizmetleri için destek ekledi. Bu size ClickHouse veritabanıyla Flink benzeri bir sorgu motoru ve Kafka benzeri bir akış depolama alanı sağlamalıdır. Peki bu neye benziyor?
Noktalı çizgi Proton'un devreye girdiği yerdir. Neyin mümkün olduğuna dair iyi bir fikir edinmek için mimari belgelerini okumanızı öneririm.
Rastgele bir veri akışı oluşturmak ve bunu Proton ile sorgulamak için şöyle bir şey yapabiliriz:
-- 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'un pek çok şık özelliği vardır; Beni hemen etkileyen şey, Proton'daki belirli olayları kaydetmek için somutlaştırılmış bir görünüm oluşturma yeteneğiydi. Belgelerden ödünç alarak, diyelim ki web olaylarını bildiren bir Kafka akışınız var ve bozuk bağlantı raporlarını kaydetmek istiyorsunuz, böylece Kafka kapalıyken veya olaylar kaldırılmış olsa bile bunları daha sonra sorgulayabilirsiniz. Bunun gibi bir şeye benzeyecek:
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';
Daha sonra, materyalleştirilmiş görünümü doğrudan sorgulamak ve verilerden bir çubuk grafik oluşturmak istiyorsanız, şöyle görünecektir:
-- 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 │ ██ │ └────────┴─────┴─────┘
Bu işlevlerden bazıları bana birkaç yıl önce çalıştığım Upsolver şirketini hatırlatıyor.
Java, Go ve Python için diğer dillere yönelik sürücüler mevcuttur. Proton'u Redpanda gibi bir şeyle kullanmak, geçmiş verilerin akışı için minimum ayak izi olacaktır.
Pek çok başka özellik de mevcuttur, ancak bunun bir eğitim olması amaçlanmamıştır. Hafif bir açıklama yapıp bazı özelliklerine dikkat çekmek istiyorum. Dokümanlar kısa ve genel olarak iyi yazılmış olup birçok açık kaynaklı projeden kesinlikle daha iyidir.
Şu anda kişisel olarak bu tür bir düzenlemeye ihtiyacım olmasa da, kesinlikle bunun çok ama çok harika olacağı yerlerde bulundum ve şirketler gördüm. Bu adam kadar havalı mı?
Muhtemelen hayır, ama yine de hiçbir şey yok :). Önemsizlik bir yana, Proton ekibi projeyi belgeleyerek ve kurulumunu ve kullanımını mümkün olduğunca basit hale getirerek mükemmel bir iş çıkardı. Tonlarca bağımlılığa sahip geniş bir Java ekosistemine ihtiyaç duymayan bu tek ikili projeleri seviyorum. Ancak hata yapmayın, Timeplus'ın size stok Proton sürümünden daha fazla yetenek sağlayan ticari bir sürümü var. Ancak Proton'u oldukça destekliyorlar ve topluluğa kucak açıyor gibi görünüyorlar.
Aşağıdaki bağlantılardaki diğer What the Heck is… makalelerime göz atın: