Software designer/developer, developer advocate, writer, and musician.
The code in this story is for educational purposes. The readers are solely responsible for whatever they build with it.
Walkthroughs, tutorials, guides, and tips. This story will teach you how to do something new or how to do something better.
この一連の記事は、私にとって新しいテクノロジーについて学び、探究するのにとても楽しかったです。初めて発見して以来、何が流行っているのかを知るのも楽しいです。 Apache Paimonに関する私の前回の記事は非常に人気があり、非常に驚いたのですが、それが一体何なのか興味を持ったのは私だけではなかったようです。この記事のおかげで、 Timeplusがスポンサーとなっているオープンソースの Apache 2.0 ライセンス プロジェクトProtonに出会いました。これは、履歴データとストリーミング データの両方に対応する SQL データベースです。 C++ で書かれ、 ClickHouseを利用して作られており、シンプルさとパフォーマンスに重点が置かれています。実行可能ファイルが 1 つあるため、インストールは簡単です。
私が見てきた傾向として、リアルタイム分析アプリケーションがますます構築されていますが、それらを二度構築することは望ましくありません。 1 回はストリーミング用、もう 1 回は履歴バックフィル用です。単一のプラットフォームでバッチ モードやストリーミング モード、さらには受信データのストリームに履歴データを結合するハイブリッド モードでクエリを実行できることには、明らかな利点があります。 Proton はまさにそれを行うために作られたようです。
一言で言えば、ClickHouse データベースがあり、Timeplus がストリーミング サービスのサポートを追加しました。これにより、Flink のようなクエリ エンジンと、ClickHouse データベースを備えた 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 で特定のイベントを保存するマテリアライズド ビューを作成できる機能でした。ドキュメントから借用すると、Web イベントをレポートする 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 を非常にサポートしており、コミュニティを歓迎しているようです。
以下のリンクから、私の他の「いったい何だ…」の記事をチェックしてください。